2014-04-15 122 views
0

玩家不会立即停止,但会进一步进入障碍物10 px(通过它将玩家定位为+ = 10)。AS3 - HitTest不能正常工作

更新功能

function update(evt:Event) { 
    if(rightMovementAllowed) { 
     player.x += 10; 
    } 
    if(lefttMovementAllowed) { 
     player.x -= 10; 
    } 
} 

检查碰撞功能

function checkCollision() { 
    if(player.hitTestObject(enemy)) { 
     rightMovementAllowed = false; 
     leftMovementAllowed = false; 
    } 
} 

回答

0

当玩家与物体相撞,送到他们以前的位置,即位置,他们在之前立即影响。
或者,通过获取玩家和碰撞物体的尺寸(宽度和高度),您可以将玩家置于一个位置,以便只碰碰撞物体。例如,在确定冲突已经发生,你可以添加以下功能,以您的播放器类:

function collision(collisionObject:MovieClip) { 
    if (x>_oldX) { 
     x = collisionObject.x - ((this.width * 0.5) + (collisionObject.width * 0.5)); 
    } else { 
     x = collisionObject.x + ((this.width * 0.5) + (collisionObject.width * 0.5)); 
    } 
    if (y>_oldY) { 
     y = collisionObject.y - ((this.height * 0.5) + (collisionObject.height * 0.5)); 
    } else { 
     y = collisionObject.y + ((this.height * 0.5) + (collisionObject.height * 0.5)); 
    } 
} 

此功能假定您的播放器和collisionObject影片剪辑,在其中心定位为它们的参考点。 _oldX和_oldY也是私人播放器变量,用于跟踪其以前的位置。
请注意,如果触发每一帧,此功能将表现异常。只有在发生碰撞时才应该调用它。