最近在学习使用flash来实现webgame,看了看《ActionScript 3.0 Game Programming University 2nd Edition》。把一些有用的点记录下来,以后好查。
当你要编写Flash游戏时,有许多东西需要考虑。有时一些容易被遗忘的关键点可能导致游戏无法正确运行。为了帮助你避免这些简单的问题,以下列出一些参考清单。
发布设置和MC设置十分容易被遗忘。
忘记设置这个可能导致movie运行时会直接忽略你所创建的类。
确保你的发布设置中将Flash movie是基于Flash 10和ActionScript 3.0 。
在Flash发布设置中,有一个本地回放安全性(Local Playback Security setting)。它是用于设置是采用仅访问本地文件或者是仅访问网络文件。为例保证Flash movies的安全,你需要选择其中一个。
如果你有本地文件需要访问然而却设置为仅访问网络文件的话就会出现问题。当你使用的是外部文件(external files)并将文件上传到服务器后发现程序并不是像预想的一样,这时你可以首先检查这个选项。
当你命名变量或者函数时,注意是大小写敏感的。所以像myVariable和myvariable是完全两个不一样的变量。同样的对于类的命名也是一样。
如果一个Movie Clip提供一个Actionscript可以调用的名字,那么他就可以通过缺省动态类或者你自己创建一个类来调用它。例如,你可以制作一个叫做EnemyCharacter的mc并且有一个EnemyCharater.as的类文件与之相对应。
然而,这些类容易被忘记或者错误命名。例如Enemycharater.as(小写的c)文件就会被忽略或者是没有连接到EnemyCharater的mc上。
你可能编写了一个movie类的定义如下:
public class myClass extends Sprite {
然而,通过对Sprite而不是MovieClip的扩展,你将只能在movie中使用一帧。指向其他帧的代码将无法使用。
如果你有一个叫做myClass的类,那么它的构造函数的名字就应该为myClass;否则它将无法在类的初始化时运行。但是,如果你并不想让函数立刻执行,可以通过命名为startMyClass并在开始帧之后调用它。
有一些问题再编译时不会报错,也不会每次一开始都出现。但是它们可能会再开发过程中出现并且很难被跟踪到。
例如,当你想要跳转到movie或者一个movie clip中的一个新的帧,并且尝试去设置或访问那里的一个对象的属性时将会产生问题。因为该帧和它的对象都还没有初始化,所以相应的属性也是不存在的。
虽然这样做可能会产生许多问题,但是这是一个很好的做法。就是在你使用完对象以后记得去销毁它们。例如,如果你编写的游戏可以让玩家在屏幕上打子弹,他们可能会一直按着按键并且射出很多发子弹。但这些子弹离开屏幕的可视区域后,你肯定不想让它们还存储在内存中并管理。
为了完成删除这些对象,你需要将所有预期相关的变量或数组中取出对其的引用,以及使用removeChild从显示列表中删除它。
另一个可能不会直接导致问题,但是又可能产生深远影响的东西是变量类型的选择。如果int甚至是uint能够搞定的时候就不要用Number类型。因为前者更快,占用内存少。如果你有上千个数存储在数组中,你会发现使用Number类型要比int类型慢。
最糟糕的 就是用未定义类型。例如objects。它们可以存储number和integer,甚至是其他东西。同样,注意到使用MovieClips时是否可以直接用单帧的Sprites类代替。
用动态的ActionScript来控制text fields是十分棘手的。如果你放置了text fields在stage上后又忘记了将它们所用的字体嵌入进去,你就会看到出错信息。更糟糕的是如果你动态的创建了text fields并且试图使用并没有嵌入到movie中的字体,你将看到的是空白而不是文字。
你可以通过到库面板上,通过使用它右上方的下拉菜单来添加一个字体到库中。从而将字体添加到你的movie种。记住,你需要嵌入多个版本的字体来处理类似于Arial和它的粗体等。
这些主要是指那些发生在你测试或那些你测试步骤中的部分东西。
当你使用键盘输入进行测试的时候,你会发现有些按键并没有响应。这是因为在测试环境中存成一些快捷键占用了这些按键。
你可以关闭这些快捷键来使得你的movie能够像在web上一样进行测试。通过控制->关闭快捷键关闭。
如果你是基于时间编写的动画,那帧率的不同并不会影响到你的程序。动画都能保持同样的速度。但是仍然值得测试一下在低速率如6,12等速度下去查看一下用户在性能差的机子上的情况。
有一个问题就是你的测试都是基于所有的对象在movie开始时都存在。但是事实上Flash movie 是流文件。也就是说他们在所有媒体加载之前就已经开始播放了。
当你在本地进行测试时,所有的媒体直接都在那了。然而但是上传到服务器上进行测试,其中的一些媒体可能在刚开始的几秒或几分钟是缺失的。
当然你可以通过一个加载界面来实现等待所有媒体的加载。