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

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;
}
}
}
}

 

posted on 2012-12-10 20:57  橙小风  阅读(495)  评论(0编辑  收藏  举报