Flash社交游戏开发攻略连载(二)——基础控制流1
2010-09-29 17:30
393 查看
本来有很多想说的,可一旦真的写了,突然发现无从下手,不过这个感觉就和我第一次开发游戏一样,因此,我就从新手最容易碰到的问题上来说吧。
很多游戏开发新手在这个问题上都会很迷茫,究竟如何去控制整个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中的内容,以达到对你想要控制的内容进行控制
很多游戏开发新手在这个问题上都会很迷茫,究竟如何去控制整个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中的内容,以达到对你想要控制的内容进行控制
相关文章推荐
- Flash社交游戏开发攻略连载(三)——基础控制流2
- Flash社交游戏开发攻略连载(四)——基础控制流3
- Flash社交游戏开发攻略连载(一)
- Flash社交游戏开发攻略连载(五)——反射的应用
- Flash社交游戏开发攻略连载(一)
- Cocos2d-X游戏开发之社交网络平台的使用(EziSocial)(基础介绍)
- Flash 联网游戏开发基础课程
- 社交游戏(Social Game)开发简单教程与粗略总结之基础篇
- 【阅读笔记之十一】《DIRECTX.9.0.3D游戏开发编程基础》:网格(一)闲话ID3DXMesh接口
- 《DirectX 9.0 3D游戏开发编程基础》 第二章 绘制流水线 读书笔记
- 从零开始学社交游戏开发(四)
- 【图形学与游戏编程】开发笔记-基础篇1:熟悉开发环境
- unity基础开发-- 动态加载游戏对象或文件
- 【阅读笔记之二】《DIRECTX.9.0.3D游戏开发编程基础》:基础数学知识
- 【阅读笔记之三】《DIRECTX.9.0.3D游戏开发编程基础》:Direct3D初始化
- 【Visual C++】游戏开发笔记二十一 游戏基础物理建模(三) 摩擦力系统模拟
- C++零基础教程,游戏开发入门
- 游戏开发笔记之十一 基础动画显示(四) 排序贴图
- 【Visual C++】游戏开发笔记之八――基础动画显示(二)游戏循环的使用
- 【Visual C++】游戏开发笔记十七 游戏基础算法(一) 游戏随机系统初步