你很快就可以完成這個游戲了,但還有一點(diǎn)。讓我們繼續(xù)吧 我將會繼續(xù)解釋這些代碼,看看下面重要的部分,我們盡力地找出球與磚那個面發(fā)生了碰撞
if (this._x <= l && this.x >= l) { this.x = l; this.vx *= -1; bounce = 1; }
這個想法很簡單:我們確定球已經(jīng)碰撞了墻壁的左邊面如果球前一刻的位置是在磚左面的左邊,和新的臨時位置是在左邊面的右邊。(注:這里理解是很重要的,文章開始的時候已經(jīng)討論過和墻的碰撞了,原理是一樣的)
出現(xiàn)了上述的情況,我們將球的水平速度取相反方向和將bounce重新定義為1。 我們正確地為其他三個面寫上代碼。
if (!bounce) {//這里的是if(bounce==false) this.vy *= -1 ; trace (this.x + ":" + this._x + ":" + l + ":" + r); trace (this.y + ":" + this._y + ":" + d + ":" + u); }
這是一個返回信息設(shè)計(jì),我們返回部分的信息,因?yàn)橛袝r候,球?qū)]有檢測碰狀就穿過部分的磚塊,結(jié)果將會變成怎樣呢?bounce仍然是為false,那么我們就不能檢測到球和哪個面碰撞了,我改變垂直速度的方向,我這樣做是因?yàn)楹艽蟮臋C(jī)會球會碰撞到磚塊大的面(也就是上,下兩個面),同樣你可以設(shè)想有很大的機(jī)會碰撞到小的面(左,右兩個面),你可以改為先面的代碼:
this.vx *= -1 ; //這里和左,右兩個面發(fā)生了碰撞,水平速度方向改變 pGame.checkEndLevel ();
我們需要確定所有的磚塊都已經(jīng)消失,這個功能怎樣實(shí)現(xiàn)呢?其實(shí)很簡單的
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 ; //這里跳出循環(huán) } } trace ("End of the level") ; this.nextLevel () ; } ; Game.prototype.nextLevel = function () { trace ("NextLevel called") ; this.level ++ ; //難度增加 this.isPlaying = false ; this.init () ; } ;
讓我們看看上面的代碼是怎樣運(yùn)行和工作的: 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),如果我們發(fā)現(xiàn)還有磚塊,數(shù)目還不為0時,我們馬上用return來跳出這個函數(shù)(這樣做就大大降低了運(yùn)算量),這樣就不會調(diào)用nextLevel ()這個方法了,這樣就不會跳到下一個難度。
trace ("End of the level") ; this.nextLevel () ;
如果上面的代碼執(zhí)行了,那么就表明已經(jīng)在brick_board找不到clip(磚塊)了,那么就完成了當(dāng)前的難度了,那么玩家就能跳到下一個難度了。
Game.prototype.nextLevel = function () { trace ("NextLevel called") ; this.level ++ ; this.isPlaying = false ; this.init () ; } ;
我們增加難度,那么我們就告訴FLASH重新初始化磚塊的形狀。 很高興你能耐心的看到這里,最后一件是要做的事,我們要確定當(dāng)改變難度時,我們要檢測下一個難度是否存在,(總得有個勝利吧。┠敲次覀兙鸵诖a中改一點(diǎn)東西。如下:
Game.prototype.init = function () { trace ("Init method called") ; this.drawArena () ; this.initBar () ; var theMap = eval ("map" + this.level) ; //調(diào)用下一個難度, if (theMap != undefined){ //如果下一個難度的定義了,也就是存在這個數(shù)組 this.initBricks ( theMap ) ; }else{ this.endGame () //沒有數(shù)組了,結(jié)束游戲,勝利了!^_^ } this.MouseListener.onMouseDown = function () { trace ("The Mouse has been pressed") ; if (! this.Game.isPlaying) { ball.move (this.Game) ; this.Game.isPlaying = true ; } } } ;
如果找不到地圖,那么玩家勝利了! 游戲完成了,看看你的成果,用它游戲輕松一下吧!因?yàn)槭悄愕男燎趧趧拥某晒?BR>
出處:藍(lán)色理想
責(zé)任編輯:qhwa
上一頁 基于 as1.0 的擋板游戲 [6] 下一頁
◎進(jìn)入論壇Flash專欄版塊參加討論
|