现在的位置: 首页 > 综合 > 正文

Flash社交游戏开发攻略连载(二)——基础控制流1

2012年06月26日 ⁄ 综合 ⁄ 共 1117字 ⁄ 字号 评论关闭
本来有很多想说的,可一旦真的写了,突然发现无从下手,不过这个感觉就和我第一次开发游戏一样,因此,我就从新手最容易碰到的问题上来说吧。

很多游戏开发新手在这个问题上都会很迷茫,究竟如何去控制整个FLASH游戏?

比如,我们要做一个横版飞行游戏,那么我们会设想敌机在空中飞,那么这个飞行肯定是有速度的,新手一般会想到使用Timer类来实现每隔几秒就让某个元件按照一个数学函数来移动一下位置。这的确是最直观的方法。
不过这么做有两个坏处:
1 每个Timer如果都是独立的,那么则无法从全局上控制流程,比如让所有飞机都停止。如果是使用一个Timer来处理,那么对很多速度不相同的飞机就无法很好的控制。
2 我们不能保证每次Timer过后,显示出来的结果都是我们预期的,因为FLASH有相对固定的帧数,比如帧数是每秒1帧,如果你Timer设定10毫秒就移动一个像素,那么你看到的仍然是1秒移动了100像素,但是系统却运算了100次。

因此我们使用在Flash中更为实用的控制流方式,ENTER_FRAME事件作为控制流的入口。这样做的好处如下:
1 只有在进入下一帧的时候才会做出相应运算,也就是说,所有内容的运算次数是最为优化的,因为你的眼睛只能看到每一帧的内容,因此我们只要在每帧的时候进行相应的改变就可以了
2 使用恰当的方式,我们可以由上而下的让所有的类都相对独立,但又可以受到上一级的控制,可以随时暂停任何一个你想暂停的内容。

那么接下来我们就举一个例子看一下实际的代码:
在文档类的构造函数中书写如下代码:
stage.addEventListener(Event.ENTER_FRAME, tick);
lastTickTime = getTimer();
lastTickTime 是个私有属性。
新增加一个私有函数tick
private function tick(e:Event) : void
{
            var timer:int = getTimer();
            var timespan:int = timer - lastTickTime;
            lastTickTime = timer;

tickBase(lastTickTime);
}

这个tickBase函数的作用是,对需要被控制的对象执行相应的控制代码,具体内容大家可以根据需要自己写。
我们需要知道的就是,tickBase可以传2帧的时间间隔给你所需要控制的对象。因为虽然FLASH中我们设定了固定的帧数,但实际帧数会根据运算情况而有所改变,所以我们要使用这样的方式计算两帧的间隔时间。

好了,大家可以尝试一下,或者休息一会,之后我会写如何去更好的实现这个tickBase中的内容,以达到对你想要控制的内容进行控制

抱歉!评论已关闭.