2015-11-03 117 views
0

因此,當玩家觸摸對象時,我正在進行碰撞檢測。當它碰到物體時,會在碰撞時移動並停止,但例如,如果我按下D鍵向右移動,並按下A鍵並放開,則玩家開始移動物體。as3 - 玩家在對象中移動

這是我的播放器移動代碼。

public function onKeyDown(event: KeyboardEvent): void 
{ 
    if (event.keyCode == Keyboard.D) 
    { 
     isRight = true; 
    } 
    if (event.keyCode == Keyboard.A) 
    { 
     isLeft = true; 
    } 
    if (event.keyCode == Keyboard.W) 
    { 
     isUp = true; 
    } 
    if (event.keyCode == Keyboard.S) 
    { 
     isDown = true; 
    } 
} 

private function onKeyUp(event: KeyboardEvent): void 
    { 
     if (event.keyCode == Keyboard.A || event.keyCode == Keyboard.D) 
     { 
      vx = 0; 
     } 
     else if (event.keyCode == Keyboard.S || event.keyCode == Keyboard.W) 
     { 
      vy = 0; 
     } 
    } 

public function onEnterFrame(event: Event): void 
{ 
    if (isRight) 
    { 
     vx = 5; 
     x += vx; 
    } 
    if (isLeft) 
    { 
     vx = 5; 
     x -= vy; 
    } 
    if (isUp) 
    { 
     vx = 5; 
     y -= vy; 
    } 
    if (isDown) 
    { 
     vx = 5; 
     y += vy; 
    } 

    //collision detection 
     if (player.collisionArea.hitTestObject(wall0)) 
     { 
      player.x -= vx; 
      player.y -= vy; 
     } 
} 
+0

是什麼'vx'和'vy'? – Brian

+0

我重寫了代碼。 – Crook

回答

0

你的問題,是vx總是5。因此,您從x減去5,您添加它的另一個方向。

然而,在你的碰撞if語句中,你總是從玩家的x中減去它(如果向左移動,會繼續移動玩家直到它離開它碰撞的物體)。

此外,在您的isLeft檢查中,您正在減去vy值,但我想你實際上是要減去vx值。在同一張紙條上,在您的isUp/isDown支票上,您將vx var設置爲5,但您應該設置vy

由於目前還不清楚xy對玩家的影響,很難給出一個確切的代碼示例。

最有可能的,你只需要玩家移動到牆邊,並基於選擇關閉播放器的方向一側:

//collision detection 
    if (player.collisionArea.hitTestObject(wall0)) 
    { 

     //if the player x is colliding 
     if(player.x + player.width > wall0.x && player.x < wall0.x + wall0.width){ 
      player.x = isRight ? wall0.x - player.width : wall0.x + wall0.width; 
     }else if(player.y + player.height > wall0.y && player.y < wall0.y + wall0.height){ 
      player.y = isDown ? wall0.y - player.height : wall0.y + wall0.height; 
     } 
    } 
+0

有沒有辦法讓它在撞擊牆的y部分時並排滑動,並在撞擊牆的x側時上下滑動?這樣我們就不會在接觸牆壁時卡住。 – Crook

+0

稍微更新了代碼以解決該問題。儘管它在第一個代碼塊中不會成爲問題。 – BadFeelingAboutThis

+0

這對我不起作用。當玩家與y部分碰撞時,我嘗試在向上或向下按下時移動x位置。它會卡住,我不能移動x位置,反之亦然。 – Crook