| 呵呵,虽然我们的游戏有了一个愉快清晰的开始,但到目前为止还不能供人娱乐,我们要使玩家可以抛出球。我决定当鼠标按下时,球将以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专栏版块参加讨论
	      |