[ 来源:www.it55.com | 作者: | 时间:2007-07-12 | 收藏 | 推荐 ] 【大 中 小】
基于 Flash ActionScript 1.0 编写的挡板游戏
作者:Pom
翻译:ShuhanKuang
本文章发表已经获得作者的允许,
原文章地址:http://www.kirupa.com
正如你所知,在FLASH中有很多方法检测碰撞的,有一个方法叫hitTest(),在自带字典里有两中解释: 45398 www.it55.com it55学习IT知识,享受IT生活 4dfkjn
myMovieClip.hitTest(target) // 电影剪辑和电影剪辑的检测
myMovieClip.hitTest(x, y, shapeFlag) //点和电影剪辑的检测 45398 www.it55.com it55学习IT知识,享受IT生活 4dfkjn
如果你曾经用过这两个个方法,你肯定会发现它的局限:第一函数,只能检测两个包含剪辑的最小框的碰撞,(图中包含剪辑的蓝色矩形),在我下面做的简单的示例中,你可以得知当剪辑不是规则的矩形的时候,这样的检验是没有什么作用的,(例如两个圆,或两条角度不同的直线)。 sflj www.it55.com kg^&fgd

(图1) vd;k;l www.it55.com rdfg
你可以得到这个结论,FLASH检测了“非”碰撞。(“非”这里是自己想的,毕竟水平有限不知道怎么解释好)
第二个函数能进一步准确地检测碰撞,但它只局限在一个电影剪辑和点的范围内。
下面还有一个关于hitTest()方法的问题。我将它叫做“Where-did-my-hitTest-go?”(消失的碰状?~_~翻译过来不好听的,呵呵),让我们尝试检测一个球和一面墙(这里用垂直的线表示)是否发生了碰状。 www.it55.com

(图2) sflj www.it55.com kg^&fgd
你可以从上面的图看出,在每一帧中都没发生物理的碰状,就算球已经穿过了墙壁,这是因为碰状是基于帧检测的。很幸运地,这个问题可以得到解决,或者至少可以说这个问题不会在我们做游戏过程中带来太多的麻烦。心急了吧?那么让我们开始有趣的部分吧
游戏: it55.com
我们要做的事是创建一个简单的PONG游戏,那么先看看下面的一个简单的例子,你可以测试一下效果 45398 www.it55.com it55学习IT知识,享受IT生活 4dfkjn
IT资讯之家 www.it55.com
当你看到第一个原文件(名字叫pong_00.fla),你可以发现里面只有两层: 免费资源www.it55.com
1:code,里面调用了一个外部的AS文件
2:object ,里面包含了一个名为bar的挡板和名为ball的球
可能有一部分的人不那么熟悉#include的语法,通过运用这个语法好处就是,你能用外部编辑器修改你的代码,例:如Scite|Flash、SE|PY,而不局限在FLASH的动作面板,如果你曾经过这个语法,那么给你带来的结果一定不会让你失望的,当然,如果你不喜欢用这个方法,那么你就要删去#include这一句和复制代码到FLASH的动作面板里面。
www.it55.com
为了保证代码的简洁和容易更新,我们应该为我们的游戏写一些简单的类。(这里用的是as1.0,如果你有时间和想要训练自己,建议你将代码写成2.0的)。但是先不要害怕,你没必要熟悉了oop(面向对象编程)才能看明白这个游戏的代码。 vd;k;l www.it55.com rdfg
游戏类:
这个游戏类只包含了一些游戏中需要到的重要信息和游戏建立的过程中要显示信息,里面的方法解决了游戏的一些基础的游戏规则。这就是第一个代码的草稿(pong_00.as):
trace ("Welcome to Pong!") ; //不要我说这句了吧?
Game = function () { //定义一个Game类
trace ("New Game created") ;
this.timeline = _root ; //初始变量,指向_root的时间轴
this.left = 100 ;
this.right = 400 ;
this.up = 50 ;
this.down = 350 ;
this.barLevel = 330 ;
(阅读次数:)