您的位置:首页 > 其它

碰撞检测(小球与舞台以及挡板碰撞的判断)

2012-12-10 20:57 393 查看
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;
}
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: