呵呵,雖然我們的游戲有了一個愉快清晰的開始,但到目前為止還不能供人娛樂,我們要使玩家可以拋出球。我決定當鼠標按下時,球?qū)⒁?5°離開擋板,雖然這不代表什么,但這是我的游戲,我喜歡怎樣就怎樣 這個想法將有Game類來解決,因此我們要建立一個對象來監(jiān)聽鼠標,同樣,我們需要一個變量來告訴我們游戲已經(jīng)開始,那么玩家就不能再拋出球了。
Game = function () { trace ("New Game created") ; this.timeline = _root ; this.left = 100 ; this.right = 400 ; this.up = 50 ; this.down = 350 ; this.barLevel = 330 ; this.lives = 3 ; this.speed = 10 ; this.isPlaying = false ; this.MouseListener = {} ; this.MouseListener.Game = this ; Mouse.addListener (this.MouseListener) ; } ; Game.prototype.init = function () { trace ("Init method called") ; this.drawArena () ; this.initBar () ; this.MouseListener.onMouseDown = function () { trace ("The Mouse has been pressed") ; if (! this.Game.isPlaying) { ball.move () ; this.Game.isPlaying = true ; } } } ;
紅色部分是在原有代碼的基礎(chǔ)上加上去的,我們現(xiàn)在有了屬性:速度(speed),isPlaying,和對象MouseListener(用來監(jiān)聽鼠標動作),看看下面特別的代碼: this.MouseListener.Game = this; //你可以把它看作對象里一個屬性指向當前的對象 p/s:這里有點難理解 你可以用trace(this)來看看。我想應該清晰點。 你看到的MouseListener 對象,(我們需要在init()方法里調(diào)用) 在init()方法中,我們使得對象監(jiān)聽事件--"玩家已經(jīng)按下鼠標左鍵",在這樣的情況下,如果 isPlaying為false,我們就調(diào)用move()這個方法和告知游戲已經(jīng)開始(isPlaying = true)。你可以注意到,我們還沒有定義move()這個方法,那么下面就把他完成吧
我們現(xiàn)在專注于建立move()這個方法,讓我們考慮一下我們要做些什么:
1.首先我們要賦予球運動方向和速度 2.然后我們要使得move()不斷的循環(huán)(onEnterFrame),當球運動的時候,我們要判斷2件事:球撞到墻了嗎?玩家生命數(shù)為0的嗎?(game over ~_~!) 下面是一個move()方法函數(shù)的草稿:
MovieClip.prototype.move = function () { this.vx = pGame.speed * Math.cos (-45 * Math.PI / 180) ; //Math.PI表示弧度 this.vy = pGame.speed * Math.sin (-45 * Math.PI / 180) ; this.x = this._x ; this.y = this._y ; this.onEnterFrame = function () { this.x += this.vx ; this.y += this.vy ; this._x = this.x ; this._y = this.y ; } } ;
首先定義4個變量:垂直和水平的速度(vx 和 vy), 球的臨時位置(x 和 y), (vx 和 vy)可以用簡單的三角法得到,如果你不明白里面的意義可以看看自帶幫助的例子,45是一個角度,取負值是為了球是向上運動而不是向下。 在onEnterFrame循環(huán)事件中,我們定義一個臨時的位置,然后我們不斷地更新這個臨時的位置,這個位置現(xiàn)在看上去好像沒什么作用,但當你檢測碰撞墻壁和碰撞磚塊的時候就變得很有用了
出處:藍色理想
責任編輯:qhwa
上一頁 基于 as1.0 的擋板游戲 [2] 下一頁 基于 as1.0 的擋板游戲 [4]
◎進入論壇Flash專欄版塊參加討論
|