碰撞检测(小球与舞台以及挡板碰撞的判断)
package view { /** * @author zoe * */ import flash.display.Sprite; import flash.events.Event; public class GameScene extends Sprite { private var rect:MoveRect; private var ball:Ball; private var speedX:int; private var speedY:int; private var r:int; public function GameScene() { init(); } private function init():void { rect = new MoveRect(); ball = new Ball(); addChild(rect); addChild(ball) rect.y = 560; ball.x = 300; ball.y = 300; speedX = 5; speedY = 5; r = ball.width/2; } public function useEfHandler():void { addEventListener(Event.ENTER_FRAME,efHandler); } private function efHandler(event:Event):void { rect.x = mouseX - rect.width/2; ball.x += speedX; ball.y += speedY; if(ball.x < r) { speedX = -speedX; } if(ball.x >= this.stage.stageWidth - r) { speedX = -speedX; } if(ball.y < r) { speedY = -speedY; trace(speedY); } if(ball.y >= this.stage.stageHeight - r) { speedY = -speedY; }
//之所以全用if,没有else,是因为如果写成if,else if,else if,有一种情况符合走进去后就会完全跳出,当小球位置在四个角,例如同时符合ball.x < r和ball.y < r,就只会走进一种情况然后跳出方法,为了解决这个bug就全写成if。
isHit();
}
private function isHit():void
{ if(ball.hitTestObject(rect))
{
// speedX = -speedX;因为碰到下面的挡板X坐标不需要取反的,只有y要变动
speedY = -speedY;
}
}
}
}