kenlistian

勤学多思

  IT博客 :: 首页 :: 新随笔 ::  :: 聚合  :: 管理 ::
  412 随笔 :: 0 文章 :: 23 评论 :: 0 Trackbacks

#


来自flash帮助例子,学习使用flashscript3.0笔记一二。
用flash作界面,有2种方法,
一。采用场景+内嵌脚本
1.直接在场景中布置控件,并命名。
2.在脚本框中处理其控件表现。由于flash的事件不能通过强大背景的类库自动勾连,所以
  需要在初始化做响应事件和函数的勾连,方法基本上如下:
    comboBox1.addEventListener(Event.CHANGE, cbHandler);
  把一个下拉框的下拉事件和cbHandle勾连起来,然后再编写cbHandle函数处理逻辑。
二。采用空场景+脚本文件(as)
   1.在新建空场景中,必须关联到一个文档类,该文档类既是文件名又是类名(同java类文件大致是相同命名规范)
   2.在脚本文件中,实现该场景的UI builder,以及事件管联代码。
     注意的是,在该脚本中其import flashxxx。xxx。xxx是flash自身所带的控件库包文件。
        
附:

ActionScript 3.0 事件处理模型

ActionScript 3.0 引入了单个事件处理模型,替换以前版本的 ActionScript 中存在的不同事件处理机制。该新事件模型基于文档对象模型 (DOM) 第 3 级事件规范。

对于具有使用 ActionScript 2.0 addListener() 方法经验的开发人员,指出 ActionScript 2.0 事件侦听器模型和 ActionScript 3.0 事件模型之间的区别是会有帮助的。下面的列表描述了这两种事件模型之间的一些主要区别:

  • 若要在 ActionScript 2.0 中添加事件侦听器,在某些情况下使用 addListener(),其它情况下则使用 addEventListener(),而在 ActionScript 3.0 中,所有情况下都使用 addEventListener()
  • ActionScript 2.0 中没有事件流,这意味着 addListener() 方法只能在广播事件的对象上进行调用,而在 ActionScript 3.0 中,addEventListener() 方法可以在作为事件流一部分的任意对象上进行调用。
  • 在 ActionScript 2.0 中,事件侦听器可以是函数、方法或对象,而在 ActionScript 3.0 中,事件侦听器只能是函数或方法。
  • ActionScript 3.0 中不再支持 on(event) 语法,因此无法将 ActionScript 事件代码附加到影片剪辑。您只能使用 addEventListener() 添加事件侦听器。
由此可见,在ActionScript3关于处理事件上,规范了许多,相对而言,也就更像编程而不是
杂乱的做着什么事情。
自己在学习中,感觉actionscript有些类似delphi语法结构,但也有c,java的部分风格,可以说
它几乎就是一种杂种语言。
 
 
 
 
 
 
posted @ 2008-05-30 15:03 kenlistian 阅读(252) | 评论 (0)编辑 收藏

 


ActionScript 3.0 是一种强大的面向对象编程语言,它标志着 Flash Player Runtime 演化过程中的一个重要阶段。
 设计 ActionScript 3.0 的意图是创建一种适合快速地构建效果丰富的互联网应用程序的语言,这种应用程序已经成
 为 Web 体验的重要部分。

历史

ActionScript 是一种基于 ECMAScript 的编程语言,用来编写 Adobe Flash 电影和应用程序。
ActionScript 1.0 最初随 Flash 5 一起发布,这是第一个完全可编程的版本。Flash 6 增加了几个内置函数,
                 允许通过程序更好地控制动画元素。
在 Flash 7 中引入了 ActionScript 2.0,这是一种强类型的语言,支持基于类的编程特性,比如继承、接口和严格的数据类型。
Flash 8 进一步扩展了 ActionScript 2,添加了新的类库以及用于在运行时控制位图数据和文件上传的 API。
Flash Player 中内置的 ActionScript Virtual Machine(AVM1)执行 ActionScript。通过使用新的虚拟机
         ActionScript Virtual Machine(AVM2),
Flash 9(附带 ActionScript 3)大大提高了性能。

下载flash9  http://www.adobe.com/cfusion/entitlement/index.cfm?e=flex3email


ActionScript 的老版本(ActionScript 1.0 和 2.0)提供了创建效果丰富的 Web 应用程序所需的功能和灵活性。
ActionScript 3 现在为基于 Web 的应用程序提供了更多的可能性。它进一步增强了这种语言,提供了出色的性能,
        简化了开发的过程,因此更适合高度复杂的 Web 应用程序和大数据集。
 
 ActionScript 3 可以为以 Flash Player 为目标的内容和应用程序提供高性能和开发效率。

ActionScript 3 符合 ECMAScript Language Specification 第三版。它还包含基于 ECMAScript Edition 4 的功能,
      比如类、包和名称空间;可选的静态类型;生成器和迭代器;以及非结构化赋值(destructuring assignments)。
      随着 Web 应用程序项目需求的增长,也要求 ActionScript 引擎有重大的突破。
     
ActionScript 3 引入了一个新的高度优化的 ActionScript Virtual Machine(AVM2),与 AVM1 相比,AVM2
   的性能有了显著的提高。这使 ActionScript 3 代码的执行速度几乎比以前的 ActionScript 代码快了 10 倍。
  
Flash Player 9 中包含 AVM2(ActionScript 3.0 的脚本语言引擎),设计它的目的是提供互联网应用程序开发人员
     所需的性能和特性。为了向后兼容现有的内容,Flash Player 将继续支持 AVM1。

 

ActionScript2上说过它增加了强制变量类型和新的类语法,它实际上在最终编译时变成了ActionScript 1,

而ActionScript 3.0运行在AVM2上,一种新的专门针对ActionScirpt 3代码的虚拟机。


基于上面的原因,
   ActionScript 3.0影片不能直接与ActionScript 1和ActionScript 2影片直接通讯(ActionScript 1和ActionScript2
   的影片可以直接通讯,因为他们使用的是相同的虚拟机;如果要ActionScirpt 3影片与ActionScirpt 1和ActionScript 2的影片通讯,
   只能通过local connection),但是你会发现ActionScript 3的改变更深远更有意义。

下面是各个版本的代码示范:

ActionScript 1

function Example(){
   this.num = 1;
}
 
 Example.prototype.str = "text";
 
 Example.prototype.doubleNum = function(){
 this.num *= 2;
}

ActionScript 2
代码:


class Example {
   public var num:Number;
   private var str:String = "text";
   public function Example(){
            this.num = 1;
          }
   public function doubleNum():Void {
       this.num *= 2;
   }
}

注意当编译时,上面的ActionScript 2类会变成ActionScript 1范例那样。


ActionScript 3
代码:

package {
    public class Example {
        public var num:Number;
        protected var str:String = "text";
        public function Example(){
            this.num = 1;
        }
       
 public function doubleNum():void {
              this.num *= 2;
       }
    }
}

 

ActionScript 3有怎样的不同呢?

ActionScript 3是不同的,非常的不同。因为不同在实际应用上所以需要一个全新的虚拟机来运行它。
但是本质上,它仍是ActionScript,作为 ActionScript你可能 已经注意到了在ActionScript 1和ActionScript 2
中的许多命令和程序概念仍然非常好的适用于ActionScript 3.0.尽管上面的范例代码非常小,我们至少可以看出
语法已经改变了。


在某些地方ActionScript 3.0与ActionScript 2.0代码看上去非常相似但并不总是这样,
最终在As2.0与As3.0中直接转换经常会比较困难。
这些改变是非常必要的,在印象中 ActionScript 3.0有很高的功效,在开发过程中不仅是效率(这
一点在一些小的但工作量较大的项目中得到证实)还有就是ActionScript 3.0在Flash Player中的
回放速度要比ActionScript 2代码快10倍。好,你可能会发现在ActionScirpt 1和ActionScript 2
中的许多并不复杂的任务在ActionScript 3.0中的代码长度会是原来的两倍长。但是最终你获得是
它的高速和效率。

posted @ 2008-05-30 11:08 kenlistian 阅读(453) | 评论 (0)编辑 收藏


wxruby安装及其生成exe方法


1、WxRuby
    WxRuby是为了使用Ruby进行跨平台的GUI开发而产生的一个开源的工具集。
    利用的是一个C++的工作框架--wxWidgets 。

   下载http://wxruby.rubyforge.org/wiki/wiki.pl?WxRuby_Tutorial

3、安装

  a.从http://wxruby.rubyforge.org下载最新版的gem(wxruby-1.9.X-i386-mswin32.gem)。

  b. 安装
    网络安装:
        打开命令行窗口,键入命令gem install wxruby进行安装(网络安装)。
    本地安装:
        从以上网页下载后,在该目录运行以上命令,就可以安装本地下载的文件。

注意:

  a.如果使用的版本是1.9.3以及以后的版本需要在Windows/system32文件夹中安装gdiplus.dll动态连接库。
  b.如果出现mscvp71.dll 没有找的错误信息时,需要下载、安装。

 

 


做完一个gui程序,如何生成exe,

1. 采用exerb 处理

    a.下载:http://exerb.sourceforge.jp/index.en.html
           找最新的下。
    b.安装  解压,进入exerb目录,运行ruby setup.rb。
                  这时exerb和mkexy命令将会加入ruby/bin目录中。
   
  转换rb到exe方法

  a.用mkexy收集所用的包头文件。
  b.再转换成exe.
 
  方法如下:
    mkexy hello_wx.rb, 生成hello_wx.exy文件hello_wx.exy
    exerb hello_wx.exy 
 
  若运行exe会出现控制台窗口,打开hello_wx.exy文件,找到core: cui,改成gui。
  还可以设置版本及其图标,都在exy文件中。


2.用rubyscript2exe
   只有一个源文件:rubyscript2exe.rb   (http://www.erikveen.dds.nl/rubyscript2exe/download/rubyscript2exe.rb)

  方法:
      ruby rubyscript2exe.rb your_ruby_file.rb
  最后生成一个有红宝石图标的exe文件。
 
  具体介绍在http://www.erikveen.dds.nl/rubyscript2exe/index.html

posted @ 2008-05-29 17:54 kenlistian 阅读(2152) | 评论 (0)编辑 收藏



RIA:Rich Internet Application ,富网络应用,

网页,一般是html静态网页,浏览者只是看,内容有图片和文字,有超链接。但浏览者没法交互和反馈。
后台脚本语言和CGI得到大量应用,就叫动态网页了。以.net,jsp,asp,php等技术为代表,结合css和数据
库,ActiveX,Ajax,Flash等,使网页功能相当强大。

RIA技术,类似于单机版的应用程序,具有丰富美观的界面和交互能力,但它又是网络程序,具有快速修改
和部署的能力。

它基于XMl,脚本语言和web service,可以产生丰富而强大的应用。在没有RIA的时代,要制作强大的界面,
单机版应用程序很费力气,学过VC6.0的就知道,做个界面不容易。做花哨一点的界面更是费九牛二虎之力。
网络上做界面相对容易,采用dreamweaver等工具布局。但网络上的程序又不够强大,或受到某些安全限制。
flash网页美观,功能也强。但用其做网页工作量还是挺大。

RIA技术,基于XML,界面上采用Flash等技术,用ActionScript脚本做动态响应。编写时和编写普通网页差
不多,但最终界面却玄的多,会生成flash可以播放执行的swf文件。这代表了以后网络界面技术的方向。

现在,两家主要的RIA技术力量,

一是Adobe的Flex,另一家是微软的silver light,银光。另javaFX 也支持,但java程序的单调界面没法和flash比,
所以java爱好者认为基于java技术的RIA是用于工业应用的。Adobe是一家做图片和视频处理的超级厂商,其代表产
品Adobe Photoshop和Adobe PDF reader成为人们离不开的产品。收购macromedia后,强强联合,网络图像处理的
力量得到空前加强。基于 macromedia Flash的Flex,实力强劲,已经发布到3.0版。Flex基于eclipse开发,现在
已经开源。但其企业版还是要600多美元。

另:
silver light 是基于.net的一个插件,支持跨平台和跨浏览器。支持高清视频(蓝光DVD,HD-DVD)播放。
支持多种脚本语言如ruby, python,javascript,c#等。它采用微软提供的visual studio和expression studio
(类似flash用来生成矢量图形界面的)来编写。但也可直接用文本编辑器来编写,可以生成矢量图形。需要
下载silver light插件才能播放。
其网站是:
http://www.silverlight.net

posted @ 2008-05-29 16:05 kenlistian 阅读(245) | 评论 (0)编辑 收藏

在.Net出现之前,界面开发本是三足鼎立之势, VC/MFC、VB和Delphi/C++Builder各据一方。然而,.Net的出现,不仅没能一统江湖,反而把天下搞得更乱了。不止一个人在困惑,到底该用什么来做界面呢?
l Visual C++
今天,由于.Net的出现, Visual C++已经失去了昔日的IDE王者的宝座。微软显然更偏爱的是C#,以及VB。当看到Visual C++ 2008中即将搭载的最新版MFC不过是捆绑了BCGSoft的第三方界面库,还能再说什么呢?难怪有人不解的问,还需要搭载第三方的界面库吗? 微软自己的库呢?莫非Office 2007的界面不是用C++开发的?所以,别再指望Visual C++了,不是微软没有能力搞出个更好的MFC或着WTL,而是他压根就没打算去搞。
l .Net Framework
一直觉得.Net Framework是个Java的翻版。可以理解微软嫉妒Java在企业开发领域独占鳌头的心理,但偏偏.Net Framework的野心太大了,连桌面开发也想统一,结果就出现了今天的局面。.Net隔三差五的出个新版,虽然宣传的新特性令神往,可真要把桌面开发建立在这个平台上还是会有麻烦的。首先,分发.Net程序就是个麻烦,以前还觉得JRE臃肿庞大,但比起今天的.Net,JRE已经很轻盈了。而且,.Net各个版本并不完全兼容,所以日后为旧客户维护在老版本上开发的程序时,必然痛苦万分。
l Java
本来桌面开发这片没有Java什么事。自从.Net把水搅混之后, Java也开始浑水摸鱼起来。先是Eclipse异军突起,从SWT到RCP,还真吸引了不少人的青睐。而今,Netbeans也东山再起,趁火打劫。随着Java FX的发布,桌面开发显得更热闹了。
l 其他
无论如何,Delphi/C++ Builder曾经的辉煌与贡献是不能抹杀的。 可惜的是,Borland已经不再把心思放在IDE上了,虽然成立了CodeGear全资子公司,但结果如何只能让时间来回答了。
Mozilla/Firefox走的是与众不同的路线。 XUL在Firefox上的成功运用,给我们的界面开发带来了新的尝试,但尚未成为主流。

“说了这么多,其实等于没说,困惑依旧是困惑。没办法,这就是现实。如果硬要支持一方,还不如自己先给自己一板砖。但是,无论现实如何,钱不能不挣,班不能不上,代码不能不写。好在我们具体工作中往往只局限在某一特定领域,所以,我们的选择固然不能尽善尽美,但日子也还过得去。就像牛顿定律与爱因斯坦的相对论,虽然相对论更精确,但平常用用牛顿定律也就够了。”
那么,对于语言及工具的选择,我们该如何把握呢?
l 时尚型软件
这部分软件,拥有很强的时尚特性,如聊天工具, 游戏,各类娱乐性软件等等。从事这部分开发建议紧跟着微软脚步走,使用最新的IDE、SDK,以求在第一时间让用户获得最新观感和体验。
l 在原有技术积累上开发的软件
这部分软件涵盖就更广泛了,比如财务软件,银行系统,各类ERP等等。对于这部分开发,如果不完全重新代码,就不用急着换语言和工具,原来用什么就还用什么。因为这部分软件大多用在企事业单位中,这一领域的各方面的更新换代并不像个人用户领域那么快。比如说,如果 Visual C++ 6.0还能应付工作,就先接着用。即使Borland破产了,Delphi也不用急着扔掉。毕竟,更换IDE的代价有时是非常巨大的,除非你已经完全想清楚了。
l 全新的软件
这部分的选择余地就比较大了。如果你能决定选择, 那么你的选择应该取决于你的喜好。所以,这是不需要听从任何建议,只要按照自己喜欢的选择就没错。
团队开发经验
“最后,谈一谈我的选择,仅供大家参考。”
多年以来,我和我的技术团队一直使用Visual C++和C++ Builder两种IDE进行界面开发。 其中VC版本曾进行过一次升级,从VC6升级到VC2003,C++ Builder一直使用6.0版。
今年,由于对C++ Builder未来的前景的担忧,并且长期以来同时维护用两个不同IDE开发的产品所产生的复杂性,我们已经逐渐放弃了C++ Builder的使用。但完全使用VC界面开发也有问题,最大的问题在于VC门槛太高,培训困难,而且界面开发效率不高,对于时间紧迫的项目经常遭遇人 手不足的问题。
通过反复比较,最终我们将目标锁定在Python身上。首先,Python是google的三大主要开发语言之一,另外两者自然是C++和Java,就连当今炙手可热的Ruby都被google拒之门外了。按照当前google的发展状况,已经成为了微软极为强大的竞争对手。因此,Python的前途决不可小觑。尤其是即将推出的Python 3.0版,对Python的品质肯定会有质的提升。
其次,经过反复比较测试发现,Python是比C++、Java和C#这类静态语言更适合做界面开发的语言。我 们从事的软件主要用于银行领域,软件中会涉及大量业务逻辑,界面修改经常需要随着业务模式的改变而改变。甚至有时连界面框架都要修改。比如说,由对话框模 式全部变成文档模式。这种含有大量业务逻辑的软件,用C++这类静态语言开发是非常痛苦的。
再次,Python本身使用C语言开发的,很容易用C/C++进行扩展,根本不用担心效率问题。这样,虽然引入了新的语言,公司原有的多年积累很容易用在新的项目中。
最后,Python的上手非常容易。公司原有大 量技术支持人员,以前根本无法胜任C++语言的产品开发,但现在却在使用Python开发的项目中大显身手。
由于Python本身自带的界面库功能并不强大,我们使用Python+wxPython作为界面开发平台,在 公司新的项目中进行界面开发。开发过程使用Eclipse+PyDev 作为集成开发环境。产品发布时使用Py2exe进行打包。如今,在我的团队中,Python已经完全取代了之前C++ Builder的位置,VC也主要用于开发不带界面的内核或逻辑模块。【记者:呐不喊】
张维佳:
现任北京紫枫科技开发有限公司总经理,毕业于北京航空航天大学,自1999年开始创业,曾多年担任技术总监,拥有极其丰富的一线作战经验,涵盖操作系统、编程语言,数据库以及网络通讯等各个方面。擅长系统架构设计,精通多种编程语言,包括C/C++、Python、Java等等,对软件开发及团队管理有着极为深刻的理解。
posted @ 2008-05-29 14:32 kenlistian 阅读(456) | 评论 (0)编辑 收藏

public class unicodetest
{
  
public static void main(string args[])
  
{
   unicodetest ut 
= new unicodetest();
   ut.test1();
  }


  
public void test1()
 
{
   string str 
= "测试信息abc123";
   
try
 
{
     
byte[] b = str.getbytes("gbk");
     system.out.println(str 
+ " -(gbk)编码: " + bytestohexstr(b));
     system.out.println(
"");

     str 
= new string(b, "gbk");
     system.out.println(
"从gbk编码 " + bytestohexstr(b) + " 重新转换为字串: " + str);
     system.out.println(
"");

     b 
= str.getbytes("unicodebigunmarked");
     system.out.println(str 
+ " -(ucs2)编码: " + bytestohexstr(b));
     system.out.println(
"");

     str 
= new string(b, "unicodebigunmarked");
     system.out.println(
"从(ucs2)编码 " + bytestohexstr(b) + " 重新转换为字串: " + str);
     system.out.println(
"");

     b 
= str.getbytes("ascii");
     system.out.println(str 
+ " -(ascii)编码: " + bytestohexstr(b));
     system.out.println(
"");
   }

   
catch(exception e){}
  }


  
private string bytestohexstr(byte[] b)
  
{
   
if (b == nullreturn "";
   stringbuffer strbuffer 
= new stringbuffer(b.length * 3);
   
for(int i = 0; i < b.length; i++)
 
{
     strbuffer.append(integer.tohexstring(b 
& 0xff));
     strbuffer.append(
" ");
   }

   
return strbuffer.tostring();
  }

}
posted @ 2008-05-29 10:12 kenlistian 阅读(227) | 评论 (0)编辑 收藏


修改系统环境变量在NT系列的注册表下有:

1、系统环境变量空间的注册表项
   HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment

2、代表当前用户环境变量空间的注册表项
    HKEY_CURRENT_USER\Environment


采用vbs则是能立即生效的系统参数,其方法如下:

on error resume next
set sysenv = CreateObject("WScript.Shell").Environment("system") '系统环境变量的数组对象
sysenv.Remove("ztest2")                      '删除变量
sysenv("ztest3")="test value"                '添加变量

posted @ 2008-05-22 19:13 kenlistian 阅读(467) | 评论 (0)编辑 收藏

一、基础知识
战棋游戏现在已经是我们相当常见的一种游戏方式了,在国际上最有知明度的当属SSI的元帅系列,
(《魔幻元帅》、《星际元帅》、《装甲元帅》、《太平洋元帅》、《人民元帅》)其次还有诸如
MICPROSE的《幽浮》系列和最老资格的《鱼叉》系列。(其他与军事无关的所谓战棋游戏这里不讨
论)


而在国内方面,比较之名的战棋游戏就更多了,限于篇幅,不一一列举。

战棋游戏的游戏方式和下陆战棋差不多,同样是双方你一回合我一回合一下走一步,
所不同的是陆战棋所比的是单纯的官大官小,官小的立马出局,而战棋游戏则不同,
你需要考虑各种方面的情况,比如自然、天气(这两项多见于欧美战棋游戏)等级等等,
这项我们在后面的战棋环境在说。我们可以施法,人物也可以成长,这也算是战棋游戏最
大的特色了。

附:战棋游戏的规则:

在一幅地图上,双方各执一方,由甲方先走,甲方可以考虑在可移动范围内移动,移动完毕后
可以考虑是否攻击,完后休息待命,轮到乙方行动,这时候乙方也可以先行走,然后在攻击,
接下来,乙方也待命,轮到甲方走。如此这般。这就形成了战棋游戏的基本规则。


二、什么叫战棋
其实战棋最早不叫战棋,而是叫兵棋,英文名WAR GAME,就是战争游戏的意思,多年来,
国内一直翻译其为作战模拟,也许是想将其与计算机作战模拟连接起来,但是对理论性、
系统性的刻意追求,却间接的导致了许多我军许多官兵听其高深的名字望而生畏,从而放
弃对其的研究.....

无论是说戚继光当年在马背上默弈,还是陈老总在准海战役的前线下棋,说来说去总是为了说兵,
而并非说棋,这棋似乎总是兵的陪衬,或者是为了说说棋,而拿兵来虚张一下声势,在国人眼里,
兵与棋是有一定的共通之处,但是他毕竟不是一路呀。

然而在地球的那一边,却上演了一出用兵必下棋,下棋再用兵,兵、棋形影不离,二者融为一体
的的活话剧,


三、最早的战棋
现代类型的战棋是由普鲁士的宫庭战争顾问冯.莱斯维茨于1811年年首先发明的,
它由一幅地图,一套代表军队的硬方块,一本详细规则 ,一张概率表和一个骰子
组成,用这套战棋,可以逼真地淙当时战场擤的实际作战活动,所以它一问世,就受
到各列强军队的欢迎,被迅速普及和不断加以改进,在第一次和第二次世界大战中,
各发达国家用兵棋模拟的方法来试验和检验作战计划已达到了相当水平,其中,下兵
棋已列为德军各级指挥机关制定作战计划的正规程序。
例如:1939年12月,在德军总部的作战室里,由所有执行进攻法国作战计划的部队指挥
官,对通过阿登森林突破马其诺防线的计划用战棋做了实验,棋盘上的预演证明了该计
划是可行的,于是付诸战场后,果然取得了巨大的胜利。
1940年,尝到了战棋甜头的德军指挥官再次在棋盘上试验了入侵英国的“海狮计划”。
通过战棋,暴出许多问题,结果这个计划没有实施。

同年8月,德军总部又用战棋检验了进攻苏联的巴巴罗萨计划,战棋表明基本可行,
但是仅从北翼包抄第聂伯河以西的苏军是十分困难的,后来在实上,这一方向的德
军陷入了泥沼而导致伤亡惨重。

1944年11月2日,德国A集团军司令莫德尔正在作战室里进行战棋模拟,前线突然传来战报:
一个美军新的危胁出现在赫登--哥梅特地区,莫德尔将这一情况加入棋局后,棋盘上的推
演预示几小时后德军第116装甲师将处于被动地位,该师师长冯.范登堡当即在棋桌边给他的
下属下达了作战命令,使部队独占先机,避免了损失。
不仅是德国陆军,德国海军也非常重视战棋的作用,1938--1939年冬天,卡尔.邓尼茨海军
上将通过战棋进行模拟,结果发明了著名的潜艇打击盟军护卫舰队的“狼群战术”。

而日本也同样重视战棋的发展,1941年9月2日至13日,日本海军军事学院和陆军军事学院的
兵棋预设,分析了偷袭珍珠港的计划,计划表明基本可行,但鱼雷机需要加大打击效力,于
是日本海军立即根据此改变了自己的计划,从而使得美军的太平洋舰队受到了重创。而在随
后的1942年等等几年中,日本又利用战棋模拟,检验了空袭澳大利亚的西南部、攻占约翰森
群岛、夏威夷岛的计划。在一连串的检验中,只有中途岛海战的计划没有成功,当时按照战
棋的预演表明,南云的航空母航将受到美军陆基空军的空袭,被击中九次,赤诚和嘉赫两艘
航母当即沉灭,但是这次指导战棋预演的最高指挥官官宇垣抗议裁决,将击中次数改为三,
航母沉灭数减为一,结果在实战当中,日军四艘航母全部沉灭,日本海军也从此走像了衰亡。

而英国人在二次世界大战的时候也使用了战棋,当时的陆军中将蒙哥马利将军在对付德军非洲
军团的北非战役时,时常将战棋拿出来预设一番,他让参谋以敌人的身份拿起一个标志物向他
发起进攻,模拟出“沙漠之狐”隆美尔的一个又一个可能的行动,从而使英军获得了后来阿拉
曼战役的成功,击败了隆美尔的非洲兵团。

而在1944年3月7日,在伦敦对保罗学校的地板上,蒙哥马利铺开了一幅大的海滩地图,像艾森毫
威尔和邱吉尔讲解他的战棋预演结果,这一战棋结果模拟的不是别的战役,就是日后盟军击败德
军取得决定性胜利的诺曼底登陆。

以上只是最基本的战棋,换句话说,他们或许不能称这之为战棋,只能称之为兵棋,因为他们没
有现代战棋游戏所拥有的一些其他东西,真正将兵棋转换成战棋的还是美军。

那是二次世界大战时期,当时美国海军部成立了一个以著名发明家爱迪生为领导的海军研究实验室,
1942年3月1日,由约翰生领导的运筹小组诞生,珍珠港遭袭击后,美军决定对日军展开水雷战,该组
反复在棋盘上操作进行双方的扫雷布雷战,使战棋布局不断演化出天气、经济、战略、战术等等对战
争的影响,约翰生也因此被美军委派制订作战计划,他在后来的作战报告中写到:“我发现,日军用
来对付强大的水雷攻击的手段,几乎都在每个战棋棋局中出现过。”最后,日军 670艘舰船被水雷击
沉的事例说明了约翰生战略的成功。

4、战棋的规格
是什么使战棋游戏有了未卜先知的能力呢?
答日:数学。马克思说过:“理论 只有在能够使用数学语言加以描述时,它才真正升为科学。

战争理论以及整个军事科学也不例外,数学更深刻的把握住了战争逻辑,将兵棋的整个模拟过程量化了,
从而使战棋模拟与一般性的沙盘作业和图上推演完全区别开来。

尽管战场因素错综复杂, 是一个充满偶然性的领域,但它也与世间的一切事物一样,可以被分解成一些
个体和单方面分别加以认识,然后再按照个体和单个方面之间的联系规律,把局部的认识综合起来,就
能够把握整个作战过程的总体规律,现代战棋游戏正是按这一思路设计的。一副模拟现代空地一体战的
战棋,地图为 256*256,首先规定棋中每走一格代表实地距离200米,每走一步代表作战时间五分钟。
这样,在战棋中机动力最差的步兵单位一步最多走几格就停下来了,而这种移动格数的规定与实战一样,
依地型,道路条件而异。然后在规定的这一步中,依靠胜余机会力的大小,规定这只步兵队能够攻击几次,
依据其命中、摧毁概率来计划成果,然后再加上所处地形的防御、天候、视野、士气、战斗力等等数值,
以及指挥、通信、空袭、后方炮击、空投、侦察等等制约,这样一套战棋游戏就活灵活现的出来了。


5、战棋的AI
在一个外行人眼里看来,战棋游戏不过是让自己的机动单位能走多远走多远,然后迅速的将敌人消灭的
普通游戏,其实是不然的,严格的来讲,战棋游戏(特别是六角格战棋游戏)较之即时战略游戏,是更
能体现现代战争的风貌的,在战棋游戏里,你不能一味味傻傻在往前冲,你要考虑到敌人的机动力,自
己的攻击能力等等,将这些多方面的因素综合的考虑起来,你才可以取得最后的胜利。


6、战棋的地图风格

一般的来讲,一个战棋游戏他的地图是分是以下的规格的,分别有60*60 80*80 120*120 160*160 256*256
等等,分别用于表现多种不同的战役模式,比如说如果要表现诺曼底登陆,如果用宏观的表现方法
本着越大越好的原则那肯定是不现实的,而且地图太大,反面会使玩家手忙脚乱,到不如用一幅
160*160的图表现一下。

战棋游戏的地图风格根据地区的不同也会划分成几个不同的风格,比如说欧美,战棋游戏大多数是
以历史上的真实战役为蓝本,再要不然就是让某一个国家去完成统一的大任,再加上他们是六角格
战棋游戏,用Q版来表现肯定是不现实的,所以在欧美的战棋游戏中,你一般看见的地图风格都是
按照实际地图比例1:X压缩而成的,我们可以在地图上看到城市、乡村、河流、山脉等等。


近年来在欧美,战棋游戏题材越做越敏感,使得几乎世界各国的领土都出现过在战棋游戏中的地图上,
比如《装甲元帅》里有斯大林格勒战役、《西线风云》里有阿登战役、而《人民元帅》里更是因为
意识形态的原因弄出了一些预测未来的荒唐的战役大肆渲染中国威胁论。

据说SSI的游戏《人民元帅》曾被我国禁止(并没有见到相关的公文),这里在讨论涉及该游戏并不
表示赞同游戏中的观点。随着接下来几年世界局势的变幻以及游戏制作组的倾向等等原因,这种战
役设定也许会逐步的多起来,或许预测未来的战役才更符合并棋推演的初衷。

   我国自古以来就有用棋戏的方法研究战争,然而到了进代却由于不重视,却逐渐失传,而如今,
   时代发展了,条件变化了,研究战争的方法也要变化,要在和平环境中不断增加应付下一场战争
   的战争的经验,战棋无疑是一个好的选择,我们需要脚踏实地去迎接已经席卷世界的这一套战棋
   游戏,在地球的另一半世界里,我们将证明无愧于自己的祖先!

本文参考文献:
杨南征先生《兵与棋》
于翔的战棋(SLG)游戏可行性研究报告
posted @ 2008-05-19 17:38 kenlistian 阅读(494) | 评论 (0)编辑 收藏

 

flash lite actionscript 1.x   功能实现部分


1.获取和设置影片剪辑属性
   也可用点语法,请指定影片剪辑实例名称,后面跟随一个点 (.),然后指定属性名称。

   setProperty()
   getProperty()
   tellTarget()

2.控制其它时间轴
   tellTarget()

3.使用变量
   在某个时间轴上指定一个变量,
   使用斜杠语法 (/) 和点 (..)
   以及冒号 (:)。也可以使用点记号。

4.模拟数组
 
   伪数组通常由两个或多个变量构成,这些变量共享同一个基名称,
   后面跟随一个数字后缀。该后缀是每个数组元素的索引。

如,创建了以下变量:
color_1 = "orange";
color_2 = "green";
color_3 = "blue";
color_4 = "red";

则可如下编写:
for (i = 1; i <=4; i++) {
    trace (eval ("color_" add i));
}

eval 还具有类似指针的功能,
可以使用 eval() 函数,以便在运行时创建变量。
如,创建变量higthScore1..,并赋值给它


  eval("highScore" add scoreIndex) = currentScore;
  scoreIndex++;

 

5.使用文本和字符串
连接字符串,用 add 运算符,如
v1 = "1";
v2= "2";
sum = v1 add v2;  //sum = "12"

其中对于使用动态和输入文本字段的 scroll 属性来获取或设置字段的当前滚动位置。
及用 maxscroll 确定文本字段相对于最大滚动位置的当前滚动位置。

6.使用 call() 函数来创建函数

   call() 参数可以是帧号或帧标签。
          当call时,立即执行完后,才会向下执行。

   例,
   调用位于帧标签为 moveUp 的代码: call("moveUp");
   调用第10号帧动作,             call(10)
  
   若调用另一时间轴(如影片剪辑的时间轴)上的代码
   则先指定影片剪辑实例名称,后跟冒号,再指定帧编号或帧标签。

   如,调用名为 callClip 的影片剪辑实例中的标签为 moveUp 的帧上代码:
         call("callClip:moveUp");

7.使用 eval() 函数
  
   eval() 函数太常用了,在脚本语言基本都有,不再赘述。

如,
name = "Jack";
nameValue = eval("name");    // 结果:nameValue = "Jack"

也可用 eval() 来按名称引用影片剪辑实例。
如,假设您有三个影片剪辑,名称分别为 clip1、clip2 和 clip3。

for() 循环会使每个剪辑的 x 位置递增 10 像素:

for(index = 1; index <= 3; index++) {
    eval("clip" add index)._x += 10
}

 


 

posted @ 2008-05-09 12:11 kenlistian 阅读(216) | 评论 (0)编辑 收藏



flash lite actionscript 1.0 and 1.1


Flash Lite 1.x ActionScript 由几部分组成:

1.Flash Player 4 ActionScript
2.包含电话集成命令和属性。
3.支持设备平台功能变量(1.0不支持)
4. fscommand2() (1.0不支持)和 fscommand()


说明下:
a.1.x版本由于采用flash4的引擎,故支持
运算符(如比较运算符和赋值运算符)
影片剪辑属性(如 _height、_x 和 _y)
时间轴控制函数(如 gotoAndPlay() 或 stop())
网络函数(如 loadVariables() 和 loadMovie() 函数)(仅限 Flash Lite 1.1)。

不支持的Flash 4 ActionScript的函数有:
startDrag(),stopDrag(),_dropTarget ,_soundBufTime,_url,String()

b. 1.0 和 1.1 的差异

1.1功能在1.0 中不可用有:

1.网络访问或网络状态信息。
    如,在 Flash Lite 1.0 中,不能使用 loadVariables() 或 loadMovie()
    函数来加载外部数据或 SWF 文件,也不能使用各种 fscommand2() 命令
    来确定设备的连接信号强度或网络请求的状态。

2.获取设备的时间和日期信息。
  提供有关 Flash Lite 平台以及设备的功能信息的平台功能变量。

3.fscommand2() 函数及其相关联的命令,fscommand2()函数是对fscommand() 的增强
   
4.scroll 和 maxscroll 文本字段属性。

c. 1.x 中不可用的编程功能有:

1. 不支持定义和调用自定义函数的功能。
       但可用 call() 函数来执行位于时间轴中任一帧上的代码。
2. 不支持本机数组数据结构或其它复杂数据类型。
      但可以使用伪数组来模拟数组。
      伪数组是一种需要使用 eval() 函数来动态计算相连字符串的技术。

3.在运行时加载外部图像文件或声音文件.
   无法加载外部 JPEG 文件或 MP3 文件。
   在1.1 中,可以使用 loadMovie() 函数来加载外部SWF文件。


 

posted @ 2008-05-09 11:20 kenlistian 阅读(333) | 评论 (0)编辑 收藏

仅列出标题
共42页: First 30 31 32 33 34 35 36 37 38 Last