首页 理论教育FlashCS6中文版标准实例教程:创建对手

FlashCS6中文版标准实例教程:创建对手

【摘要】:既然是射击游戏,没有对手还叫什么游戏,接下来就要创建“对手”。将使用duplicateMovieClip来创建多个对手飞船。写一段代码来设置对手飞船的随机初始位置和速度。this._x=600;把对手飞船的X坐标设置为600。this._y=random+100;把对手的Y坐标设置成一个在100~2099之间的随机数。enemySpeed=random+1;设置一个为enemySpeed在1~4范围内的随机数,这是对手飞船每一帧移动的像素数。这样做,唯一的目的是为了使飞船的移动更加真实。这个变量是任何一个时间点舞台上的对手飞船的个数。

既然是射击游戏,没有对手还叫什么游戏,接下来就要创建“对手”。

978-7-111-40639-6-Chapter10-145.jpg在主时间轴添加一层,起名为enemy。按Ctrl+F8键创建一个影片剪辑,起名为enemy。在元件编辑模式下,在enemy的舞台上画一个对手飞船,如图10-39所示。

978-7-111-40639-6-Chapter10-146.jpg

图10-39 enemy

978-7-111-40639-6-Chapter10-147.jpg回到主时间轴。选中enemy层,在库面板中拖一个enemy的实例到这一层。选中舞台上的enemy实例,在属性面板的实例名称文本框中输入enemy1。

游戏按照传统的射击游戏的结构来设计。对手的飞船从屏幕右边移到左边。游戏玩家要么避开对手,要么把对手射中。如果游戏玩家射中对手飞船,对手飞船会爆炸,如果游戏玩家让对手飞船碰到了自己的飞船,那么游戏结束。将使用duplicateMovieClip来创建多个对手飞船。

对手从屏幕右边出现,向左边飞来,但是,如果所有的对手都从同一个位置飞过来,那么这个游戏就太简单了,而且玩一会儿以后就会玩厌了。需要引入一个随机量,让所有的对手飞船从同样的X坐标(也就是屏幕右侧)开始,但是每一个都应该有一个随机的Y坐标。

同样也让对手飞船移动的速度随机化,这样增加一点游戏的难度。写一段代码来设置对手飞船的随机初始位置和速度。用一个自定义函数来实现这个功能。

978-7-111-40639-6-Chapter10-148.jpg选中舞台上的enemy影片剪辑,打开“动作”面板,输入下面的代码:

978-7-111-40639-6-Chapter10-149.jpg

978-7-111-40639-6-Chapter10-150.jpg

上面这段代码做两件事情。首先它定义了一个函数reset,然后运行这个函数。它们是写在load事件中的,所以当影片剪辑第一次加载的时候将运行这段代码。

function reset(){这一行定义了reset函数。接下来的三行是reset函数的内容。

this._x=600;把对手飞船的X坐标设置为600。

this._y=random(2000)+100;把对手的Y坐标设置成一个在100~2099之间的随机数

random是Flash预定义的一个产生随机数的函数,它产生一个在0和给定参数范围之间的随机数,但是不包括给定的参数。例如random(3)将产生一个0~2随机数,(0,1或者2)。在这个随机数的基础上加了100,确保初始的y值不是舞台的最顶端。

enemySpeed=random(4)+1;设置一个为enemySpeed在1~4范围内的随机数,这是对手飞船每一帧移动的像素数。(www.chuimin.cn)

最后,reset();调用reset函数。

读者可能会感觉疑惑不解,为什么要这么麻烦,先定义reset函数,之后再调用它?完全可以只写reset()函数内的三行,不去定义任何自定义函数。这是因为reset()函数内部的代码要多次用到,这种情况下最好的方法就是定义一个自定义函数。

已经创建了enemy影片剪辑,而且也已经设置了它的初始位置,现在让它动起来。

978-7-111-40639-6-Chapter10-151.jpg选中enemy影片剪辑,打开“动作”面板,添加下面的代码:

978-7-111-40639-6-Chapter10-152.jpg

说明:这段代码做两件事情。通过减小对手飞船的X坐标把对手飞船从舞台右边移到舞台左边;如果对手飞船移出了舞台的最左边则调用resets()函数。

首先,if语句检查scrollStart是否为真?如果为真,那么对手飞船的X坐标减去(enemySpeed+_root.mainGround.groundSpeed),注意,不是只减去enemySpeed。

如果地面不在滚动的话,对手飞船减去随机数enemySpeed来向左移动;如果地面正在滚动,那么对手飞船要减去enemySpeed,再减去地面滚动的速度。这样做,唯一的目的是为了使飞船的移动更加真实。这是很简单的相对运动的知识。

第二个if语句检查实例enemy是否已经移出了舞台的左边界。如果为真,那么将调用reset函数。reset函数将影片剪辑重新移到舞台的右边,并且给它设置一个新的随机速度和随机y坐标。

如果读者现在测试影片可以看到,有一个对手飞船从舞台右边移到左边,之后马上重新回到舞台右边的一个随机位置。

仅仅有一个对手的游戏不能算是一个有挑战性的游戏,所以用duplicateMovieClip来增加更多的对手。把复制对手的代码放到主时间轴的一个新的图层。

978-7-111-40639-6-Chapter10-153.jpg在主时间轴上添加一个新层,起名为control。选中control层的第1帧,打开“动作”面板,输入下面的代码:

978-7-111-40639-6-Chapter10-154.jpg

第一行建立一个新的变量numEnemy,并且给它赋初值为3。这个变量是任何一个时间点舞台上的对手飞船的个数。如果想增加游戏的难度,增加numEnemy就可以了。

下面的3行是一个for循环。这个循环复制enemy1影片剪辑。