今天在看AS3游戏编程,看到一些东西,挺好的,上来总结一下
1、当 int 或者 uint 变量类型可用时,就不要用 Number 类型,这样处理速度会更快一些。如果
你在数组中定义成百上千个 Number 类型的数值,就会发现影片运行的相当慢。还有,比这
更糟糕的就是使用未定义变量,他们在运行时占用很大的内存开销。另还需要注意,在创建
影片剪辑时,能用 sprite 的就不要用 movieclip。
2、完成你的 flash 制作后正确的处理对象,绝对是一个好习惯。例如,你在制作射击游戏时,在一分钟内会有成百上千的子弹射出来,当他们离开屏幕后,还是保留在内存中的。为了移
除这些对象,你需要在变量或数组中删除所有的对象,并用removeChild方法移出显示列表。
3、类扩展类型是否正确
如下面代码所示:
public class myClass extends Sprite{
这里的扩展类型是选择 sprite 还是 movieClip,主要看这个影片主时间轴有几帧。如果是单
帧的话,就使用 sprite,多帧就使用 movieclip。
4、注意区分大小写
当你在给变量,函数等命名时,一定要注意区分大小写。比如,myVariable 和 myvariable 就
是两个完全不同的变量;同样,你如果命名了一个 myClass 类,那么,在调试影片时,软件
将会自动调用名称为 myClass 的构造函数,此时,如果你不小心把该函数名写成了 myclass,
那么在初始化时它就不会被调用。
5、是否需要禁用快捷键
当你在测试影片时用到键盘输入的话,有时候你会发现部分按键不响应。这是因为当前的测
试环境需要使用这些快捷键。换句话说,如果你想让发布到网页上的影片需要自定义快捷键
的话,选择菜单“控制”->“禁用快捷键”选项即可。
6、在发布设置的 flash 标签中,有一个本地访问安全性设置,可以选择通过本地文件访问还
通过网络访问。为确保 flash 影片的安全可靠,你需要根据实际情况选择其中的一项。
7、影片剪辑的应用
如果你在库中有一个影片剪辑,想把它添加到舞台上的话,有两种方法可供选择:
7.1先把这个影片剪辑从库中拖放到舞台上,在属性面板上取一个实例名称,例如
myClipInstance,然后你就可以通过代码来控制舞台上这个影片剪辑的相关属性了。下面代
码定义该影片剪辑的坐标为(300,200)
myClipInstance.x=300
myClipInstance.y=200
7.2 用纯代码来操作。首先,在库中选中影片剪辑,点击“右键”->“链接”后出现链接属性
对话框,选中“链接”->“为 ActionScript 导出”,然后设置一个类名即可,例如 Mascot(注意,
类名首字母一般为大写)。现在我们就用纯代码的形式把库中的这个影片剪辑添加到舞台上。
对此,我们先声明一个变量作为该对象的实例,然后用 addChild 把它添加到显示列表。代
码如下:
var myMovieClip:Mascot=new Mascot()
addChild(myMovieClip)
因为我们没有设置这个影片剪辑的任何属性,所以它默认在舞台上的(0,0)位置显示。我
们可以用这个实例的 x,y 属性来设置它的坐标,用 rotation 属性来设置这个对象的旋转度
数
var myMovieClip:Mascot=new Mascot()
myMovieClip.x=275
myMovieClip.y=150
myMovieClip.rotation=10
addChild(myMovieClip)
用上面的代码把影片剪辑添加到舞台上看起来比较繁琐,但是用代码可以很容易地生成
多个此影片剪辑的副本,并把他们添加到舞台上。下面我们让 Mascot 影片剪辑生成 10 个副
本,从左到右间隔 50 个像素水平排列,并把这个对象缩放为 50%。代码如下:
for(var i=0;i<10;i++){
var mascot:Mascot=new Mascot()
mascot.x=50*i+50
mascot.y=300
mascot.scaleX=.5
mascot.scaleY=.5
addChild(mascot)
}
8、按钮的制作
下面介绍制作按钮的三种方法
8.1第一种方法:(把影片剪辑制作成按钮)
把影片剪辑制作成可点击的按钮,首先,你需要利用前面的知识把该影片剪辑添加到舞
台上,然后在注册一个可接受鼠标事件的侦听器即可。下面的代码将库中类名为Mascot 的
影片剪辑放在舞台的(100,150)处
var myMovieClip:Mascot=new Mascot()
myMovieClip.x=100
myMovieClip.y=150
addChild(myMovieClip)
下面来注册这个侦听器,你需要用到 addEventListener()侦听函数,包括响应侦听事件的
类型,该类型为常量,例如 MovieEvent.CLICK 将要响应一个鼠标点击事件,另外还需要包含
一个处理响应事件的函数
myMovieClip.addEventListener(MouseEvent.CLICK,clickMascot)
function clickMascot(event:MouseEvent)
{
trace("你点击了 mascot")
}
测试代码时,这个 clickMascot 函数就会向输出窗口发送一个事件。但是,在大多数情
况下,我们需要这个影片剪辑看起来更像按钮,这是,就用到了 buttonMode 属性。把它设
置为 true 后,当你的鼠标划过这个影片剪辑的时,鼠标的箭头形状就会变成手型了。
myMovieClip.buttonMode=true
8.2第二种方法:(将按钮添加到舞台)
当然,你还可以创建一个按钮实例,就像我们对影片剪辑的操作一样,在这里,把库中
的按钮链接类名命名为 LibraryButton
var myButton.LibraryButton=new LibraryButton()
myButton.x=450
myButton.y=100
addChild(myButton)
这个按钮的形式与前面影片剪辑最大区别就是,双击按钮,可以看到,在时间轴上按钮
有 4 个不同的帧,第一帧为鼠标划过之前显示的状态;第二帧为鼠标经过时显示的状态;第
三帧为鼠标按下还未释放时显示的状态;最后一帧为按钮的点击区域,该区域在任何时候都
是不可见的。下面,你还可以为这个按钮添加上侦听,代码如下:
myButton.addEventListener(MouseEvent.CLICK,clickLibraryButton)
function cliclLibraryButton(event:MouseEvent)
{
trace(你点击了 Library Button!)
}
8.3第三种方法:
用 SimpleButton 类型创建,这时,你需要有 4 个大小一样的影片剪辑,链接类名为
ButtonUp,ButtonOver,ButtonDown,ButtonHit,然后用 SimpleButton 构造方法,把这四个影片剪辑传递给 SimpleButton 的实例,代码如下:
var mySimpleButton:SimpleButton=new SimpleButton(new ButtonUp(),new ButtonOver(),new
ButtonDown(),new ButtonHit())
mySimpleButton.x=450
mySimpleButton.y=250
addChild(mySimpleButton)
另外,还可以添加一个侦听函数
mySimpleButton.addEventListener(MouseEvent.CLICK,clickSimpleButton)
function clickSimpleButton(event:MouseEvent)
{
trace(你点击了 Simple Button!)
}
9、绘制超链接文本
其中最简单的方法就是用 htmlText 属性,在里面添加 HTML 代码,例如
var myWebLink:TextField=new TextField()
myWebLink.htmlText="点击后面链接访问我的博客<A HREF='http://xiaocui.blogbus.com'>Flash
脚本学习</A>"
addChild(myWebLink)
测试上面代码,我们发现链接能够正常使用了,我们想以下,如果让链接加上下划线,改变字体的颜色应该怎么处理呢?我们来看下面的代码:
var myStyleSheet:StyleSheet=new StyleSheet()
//注意颜色值的格式为#FFFFFF
myStyleSheet.setStyle("A",{textDecoration:"underline",color:"#0000ff"})
var myWebLink:TextField=new TextField()
myWebLink.width=300
myWebLink.styleSheet=myStyleSheet
myWebLink.htmlText="点击后面链接访问我的博客<A HREF='http://xiaocui.blogbus.com
脚本学习</A>"
addChild(myWebLink)
另外,我们还可以不用链接到网页窗口,还可以用侦听的方式,例如:
myLink.htmlText="Click<A HREF='event:testing'>here</A>"
addEventListener(TextEvent.LINK,textLinkClick)
function textLinkClick(event:TextEvent)
{
trace(event.text)
}
10、设置层深
setChildIndex 方法允许你向上或向下移动显示对象在显示列表内的位置。你可以把显示列表
考虑成一个数组,它的索引位置是从第 0 层开始的。如果你创建了 3 个显示对象,那么他们
的位置就是第 0,1,2 层。第二层的对象在外面,第 0 层的在最里面。
如果你想把某一个影片剪辑移动到所有显示对象的最里层,可以用
setChildIndex(myMovieClip,0)
执行这条语句之后,其余的对象将会自动往上提升一层,及他们的索引位置都加上了 1,原
来第 0 层的元素移到了第1 层,第1 层的元素移到了第 2 层……
如果想把某一显示对象移到所有对象的上面,这时就要用到 numChildren 属性,它的含义就
是该容器内显示对象的数目。比如现在某一容器内有三个显示对象,这个 numChildren 的值就是 3,层次列表分别是第 0,1,2 层。那么,最外层的层深就是第 numChildren-1 层。
setChildrenIndex(myMovieClip,numChildren-1)
为了更好的理解设置层深的问题,书中作者给我们提供可一个实例 settingSpriteDepth.fla,
用代码生成圆的三个副本,并把它交错叠放在舞台上,你可以点击其中的任何一个圆,让它
显示在最外面(设置层深为最高)
11、target 表示发生事件的显示对象,而非容器;而 currentTarget 为当前侦听事
件的节点,往往是容器。只有当添加事件侦听的显示对象和发生事件的显示对象为同一个时,
currentTarget 才会于target 相等。此时,currentTarget 才可能是非容器显示对象。那么,上面的代码,我们就可以这样来理解,当鼠标点击到圆形上时,event.target 就指圆形这个显
示对象,而 event.currentTarget 就指圆形这个显示对象的容器。显然,只有容器里面才能够
存放显示对象,用 target 的话系统就会报错。
12、键盘输入
在游戏设计过程中,我们不用担心按键是否被按下,更关心的是这个键一直被按着。比
如,我们在玩驾驶游戏过程中,怎样通过向上的方向键来控制汽车油门的操作。这时,就需
要我们给按键设置一个布尔值,按下时为 true,弹起时为 false。不管在什么时候,我们只
需要通过检测这个布尔值就知道键盘是否被按下了。
13、文本输入
TextField 对象有一种类型为输入文本,它与静态文本和动态文本的区别就是,输入文本是可
选的,并且还可以往里面输入内容。
这样创建的文本在屏幕的左上角,很难找到,也没有边框,我们可以用 TextFormat 属性做
一些改进。
下面的代码把字体设置为 12 号,位置(10,10),高度 18.宽度 200,有边框
var inputFormat:TextFormat = new TextFormat();
inputFormat.font = 'Arial';
inputFormat.size = 12;
var myInput:TextField = new TextField();
myInput.type = TextFieldType.INPUT;
myInput.defaultTextFormat = inputFormat;
myInput.x = 10;
myInput.y = 10;
myInput.height = 18;
myInput.width = 200;
myInput.border = true;
addChild(myInput);
stage.focus = myInput;
最后一行的代码设置文本输入光标在文本域内。