你很快就可以完成这个游戏了,但还有一点。让我们继续吧 我将会继续解释这些代码,看看下面重要的部分,我们尽力地找出球与砖那个面发生了碰撞
if (this._x <= l && this.x >= l) { this.x = l; this.vx *= -1; bounce = 1; }
这个想法很简单:我们确定球已经碰撞了墙壁的左边面如果球前一刻的位置是在砖左面的左边,和新的临时位置是在左边面的右边。(注:这里理解是很重要的,文章开始的时候已经讨论过和墙的碰撞了,原理是一样的)
出现了上述的情况,我们将球的水平速度取相反方向和将bounce重新定义为1。 我们正确地为其他三个面写上代码。
if (!bounce) {//这里的是if(bounce==false) this.vy *= -1 ; trace (this.x + ":" + this._x + ":" + l + ":" + r); trace (this.y + ":" + this._y + ":" + d + ":" + u); }
这是一个返回信息设计,我们返回部分的信息,因为有时候,球将没有检测碰状就穿过部分的砖块,结果将会变成怎样呢?bounce仍然是为false,那么我们就不能检测到球和哪个面碰撞了,我改变垂直速度的方向,我这样做是因为很大的机会球会碰撞到砖块大的面(也就是上,下两个面),同样你可以设想有很大的机会碰撞到小的面(左,右两个面),你可以改为先面的代码:
this.vx *= -1 ; //这里和左,右两个面发生了碰撞,水平速度方向改变 pGame.checkEndLevel ();
我们需要确定所有的砖块都已经消失,这个功能怎样实现呢?其实很简单的
Game.prototype.checkEndLevel = function () { trace ("CheckEndLevel called") ; for (var c in this.timeline.brick_board) { var clip = this.timeline.brick_board[c] ; if (clip instanceof MovieClip) { return ; //这里跳出循环 } } trace ("End of the level") ; this.nextLevel () ; } ; Game.prototype.nextLevel = function () { trace ("NextLevel called") ; this.level ++ ; //难度增加 this.isPlaying = false ; this.init () ; } ;
让我们看看上面的代码是怎样运行和工作的: for (var c in this.timeline.brick_board) { var clip = this.timeline.brick_board[c] ; if (clip instanceof MovieClip) { return ; } } ;
这里再次用到了for..in,这样我们知道了在里brick_board包含了多少砖块(clip),如果我们发现还有砖块,数目还不为0时,我们马上用return来跳出这个函数(这样做就大大降低了运算量),这样就不会调用nextLevel ()这个方法了,这样就不会跳到下一个难度。
trace ("End of the level") ; this.nextLevel () ;
如果上面的代码执行了,那么就表明已经在brick_board找不到clip(砖块)了,那么就完成了当前的难度了,那么玩家就能跳到下一个难度了。
Game.prototype.nextLevel = function () { trace ("NextLevel called") ; this.level ++ ; this.isPlaying = false ; this.init () ; } ;
我们增加难度,那么我们就告诉FLASH重新初始化砖块的形状。 很高兴你能耐心的看到这里,最后一件是要做的事,我们要确定当改变难度时,我们要检测下一个难度是否存在,(总得有个胜利吧!)那么我们就要在代码中改一点东西。如下:
Game.prototype.init = function () { trace ("Init method called") ; this.drawArena () ; this.initBar () ; var theMap = eval ("map" + this.level) ; //调用下一个难度, if (theMap != undefined){ //如果下一个难度的定义了,也就是存在这个数组 this.initBricks ( theMap ) ; }else{ this.endGame () //没有数组了,结束游戏,胜利了!^_^ } this.MouseListener.onMouseDown = function () { trace ("The Mouse has been pressed") ; if (! this.Game.isPlaying) { ball.move (this.Game) ; this.Game.isPlaying = true ; } } } ;
如果找不到地图,那么玩家胜利了! 游戏完成了,看看你的成果,用它游戏轻松一下吧!因为是你的辛勤劳动的成果!
出处:蓝色理想
责任编辑:qhwa
上一页 基于 as1.0 的挡板游戏 [6] 下一页
◎进入论坛Flash专栏版块参加讨论
|