呵呵,虽然我们的游戏有了一个愉快清晰的开始,但到目前为止还不能供人娱乐,我们要使玩家可以抛出球。我决定当鼠标按下时,球将以45°离开挡板,虽然这不代表什么,但这是我的游戏,我喜欢怎样就怎样 这个想法将有Game类来解决,因此我们要建立一个对象来监听鼠标,同样,我们需要一个变量来告诉我们游戏已经开始,那么玩家就不能再抛出球了。
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 ; } } } ;
红色部分是在原有代码的基础上加上去的,我们现在有了属性:速度(speed),isPlaying,和对象MouseListener(用来监听鼠标动作),看看下面特别的代码: this.MouseListener.Game = this; //你可以把它看作对象里一个属性指向当前的对象 p/s:这里有点难理解 你可以用trace(this)来看看。我想应该清晰点。 你看到的MouseListener 对象,(我们需要在init()方法里调用) 在init()方法中,我们使得对象监听事件--"玩家已经按下鼠标左键",在这样的情况下,如果 isPlaying为false,我们就调用move()这个方法和告知游戏已经开始(isPlaying = true)。你可以注意到,我们还没有定义move()这个方法,那么下面就把他完成吧
我们现在专注于建立move()这个方法,让我们考虑一下我们要做些什么:
1.首先我们要赋予球运动方向和速度 2.然后我们要使得move()不断的循环(onEnterFrame),当球运动的时候,我们要判断2件事:球撞到墙了吗?玩家生命数为0的吗?(game over ~_~!) 下面是一个move()方法函数的草稿:
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循环事件中,我们定义一个临时的位置,然后我们不断地更新这个临时的位置,这个位置现在看上去好像没什么作用,但当你检测碰撞墙壁和碰撞砖块的时候就变得很有用了
出处:蓝色理想
责任编辑:qhwa
上一页 基于 as1.0 的挡板游戏 [2] 下一页 基于 as1.0 的挡板游戏 [4]
◎进入论坛Flash专栏版块参加讨论
|