首页 理论教育游戏最终完善-版本更新

游戏最终完善-版本更新

【摘要】:游戏结束之后,需要一个方法来重新开始新的游戏。在这层的第3帧按F7插入一个空白关键帧。在矩形上方添加一个静态文本框,内容是RESTART,如图10-48所示。图10-48 Restart按钮同时选中矩形和文本框,按F8键把它转换为一个按钮,起名为restart。在scrollStart=false;这一行后面,在“}”之前,添加下面两行:第一行,建立一个名为maxLasers的变量,并赋值为4。这是在屏幕上可以同时显示的laser的最大个数。现在还有最后一件事情,添加当laser移出屏幕时候减小laserCounter的代码。

玩过之后,读者可能会发现有两个地方需要改进。

978-7-111-40639-6-Chapter10-201.jpg游戏结束之后,需要一个方法来重新开始新的游戏。

978-7-111-40639-6-Chapter10-202.jpg读者可以一直发射激光,游戏不是太难,要做的就是限制屏幕上的激光的总量,读者以后要发射激光的时候要先想想了,瞄准没有,瞄准了再发射。

使用一个重新开始按钮来重新开始游戏。

978-7-111-40639-6-Chapter10-203.jpg在主时间轴中,添加另一个新层,起名为restart。在这层的第3帧按F7插入一个空白关键帧

978-7-111-40639-6-Chapter10-204.jpg选中这个空白关键帧,在舞台上画一个填充好颜色的矩形。在矩形上方添加一个静态文本框,内容是RESTART,如图10-48所示。

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

图10-48 Restart按钮

978-7-111-40639-6-Chapter10-206.jpg同时选中矩形和文本框,按F8键把它转换为一个按钮,起名为restart。现在要为这个按钮添加一些代码。

978-7-111-40639-6-Chapter10-207.jpg选中舞台上的restart按钮,打开“动作”面板,输入下面的代码:

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

这段代码的意思就是在按钮按下再放开之后,让Flash回到主时间轴的第1帧,这样就可以重新开始游戏了。

限制laser的数量。将限制在某一个时刻屏幕上laser的数量,下面的代码将限制在屏幕上最多只有4个laser,但是读者可以很容易地改变这个数字。

通过一个计数值来记录当前屏幕上有几个laser,如果已经有4个的话,不再复制新的laser。概念相当简单,当创建一个新的laser实例的时候,计数值加1,当laser移出屏幕的时候,计数值减1,这样就有一个计数值指明当前到底有多少个laser在屏幕上。

复制laser的代码在spaceship的clipEvents处理函数中,所以需要修改spaceship的代码。

978-7-111-40639-6-Chapter10-209.jpg选中舞台上的spaceship实例,打开“动作”面板。首先在onClipEvent(load)函数中添加两个新的变量。在scrollStart=false;这一行后面,在“}”之前,添加下面两行:

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

第一行,建立一个名为maxLasers的变量,并赋值为4。这是在屏幕上可以同时显示的laser的最大个数。如果读者想有更多或者更少的laser,只要改变这个值就可以了。第二行建立一个名为depthCounter的变量,用这个变量来保存duplicated影片剪辑的depth值。

完整的代码如下:

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

978-7-111-40639-6-Chapter10-212.jpg同样,也需要修改onClipEvent(enterFrame)函数的代码。需要改变复制laser的if语句,把这一行(www.chuimin.cn)

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

改成下面的代码:

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

现在,只有在Ctrl键按下,而且laserCounter小于或者等于maxLasers的时候,laser才被复制出来。

978-7-111-40639-6-Chapter10-215.jpg还需要再做一些小的改动,以便使复制出来的laser实例拥有正确的深度值。

把这段代码

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

替换成下面的代码:

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

为什么要这样改动呢?已经有了一个laserCounter来计数laser的个数,每次一个新的laser被复制出来的时候,它都加1。现在也有了一个depthCounter来保存传给复制出来的laser作为深度值的变量,这个depthCounter变量在一个新的laser被复制出来的时候同样也增1,然而当它增到maxLasers的值的时候,它重新被置回1。

完整的onClipEvent(enterFrame)函数如下:

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

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

在Flash中复制一个影片剪辑的时候,读者必须给它一个深度值(depth)。如果读者给了一个影片剪辑一个深度值,而这个深度值和另一个复制出来的影片剪辑的深度值相同,则新的影片剪辑将代替旧的影片剪辑。如果使用laserCoutner作为深度值,将发现,将复制出来的新的laser和还在屏幕上的laser拥有相同的深度值。所以使用一个单独的变量depthCounter。depthCounter在1,2,3,4之间循环,而laserCounter可以是1和4之间的任何值,关键是看屏幕上有多少laser。

现在还有最后一件事情,添加当laser移出屏幕时候减小laserCounter的代码。

978-7-111-40639-6-Chapter10-220.jpg选中laser实例,打开“动作”面板。在if(this._x>600){这行后面并且在this.removeMovieClip();这行前面,添加:

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

这行代码在laser移出屏幕的时候,把laserCounter减1。

完整的代码如下:

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