2017-10-12 51 views
2

如果我向右或向左,向上或向下移動播放器,則向該方向移動5px。 但是,如果我按下並右鍵例如播放器正在向右移動5像素和向下移動5像素,這是從前一個位置約7像素,而不是5px。球員運動對角線 - 太快|| NodeJS

我可以添加下一個IF語句:if(上下),然後SPDX和SPDY =(maxSpd - maxSpd√2)/或簡單-25%?

但我認爲已經是我的代碼是有點亂......

enter image description here

任何好的解決方案,這是快速,看起來很簡單? :)

這是我的代碼:

self.updateSpd = function(){ 
    if(self.pressingRight){ 
     self.spdX = self.maxSpd; 
     if(self.pressingShift && self.stamina > 0){ 
      self.spdX += self.maxRun; 
      self.stamina --; 
     } 
    } 
    else if(self.pressingLeft){ 
     self.spdX = -self.maxSpd; 
     if(self.pressingShift && self.stamina > 0){ 
      self.spdX -= self.maxRun; 
      self.stamina --; 
     } 
    } 
    else{ 
     self.spdX = 0; 
    } 

    if(self.pressingUp){ 
     self.spdY = -self.maxSpd; 
     if(self.pressingShift && self.stamina > 0){ 
      self.spdY -= self.maxRun; 
      self.stamina --; 
     } 
    } 
    else if(self.pressingDown){ 
     self.spdY = self.maxSpd; 
     if(self.pressingShift && self.stamina > 0){ 
      self.spdY += self.maxRun; 
      self.stamina --; 
     } 
    } 
    else{ 
     self.spdY = 0; 
    } 
} 

回答

2

你可以做X和其值-10 Y方向變量,1

var dirX = -self.pressingLeft + self.pressingRight; 
var dirY = -self.pressingUp + self.pressingDown; 

對角線移動時則調整:

if (dirX !== 0 && dirY !== 0) { 
    dirX *= Math.SQRT1_2; 
    dirY *= Math.SQRT1_2; 
} 

然後應用休息:

var speed = self.maxSpd; 

if (self.pressingShift && self.stamina > 0 && (dirX !== 0 || dirY !== 0)) { 
    speed += self.maxRun; 
    self.stamina--; 
} 

self.spdX = speed * dirX; 
self.spdY = speed * dirY; 

總而言之:

self.updateSpd = function() { 
    var dirX = -self.pressingLeft + self.pressingRight; 
    var dirY = -self.pressingUp + self.pressingDown; 

    if (dirX !== 0 && dirY !== 0) { 
     dirX *= Math.SQRT1_2; 
     dirY *= Math.SQRT1_2; 
    } 

    var speed = self.maxSpd; 

    if (self.pressingShift && self.stamina > 0 && (dirX !== 0 || dirY !== 0)) { 
     speed += self.maxRun; 
     self.stamina--; 
    } 

    self.spdX = speed * dirX; 
    self.spdY = speed * dirY; 
}; 

或許:

self.updateSpd = function() { 
    var dirX = -self.pressingLeft + self.pressingRight; 
    var dirY = -self.pressingUp + self.pressingDown; 

    var speed = self.maxSpd; 

    if (self.pressingShift && self.stamina > 0 && (dirX !== 0 || dirY !== 0)) { 
     speed += self.maxRun; 
     self.stamina--; 
    } 

    if (dirX !== 0 && dirY !== 0) { 
     speed *= Math.SQRT1_2; 
    } 

    self.spdX = speed * dirX; 
    self.spdY = speed * dirY; 
}; 

注意,這並從原來的不同的表現時,左,右按下按鈕(沒有動靜,而不是移動右)或上下按下時(不移動,而不移動)。

+1

看起來不錯,乾淨,什麼是最重要的...我明白了:) 我會嘗試下班後的傍晚,並避免停止與向上/向下按我會關閉它在IF語句走右(右/謝謝@Ryan! – BatOOn

+0

我等不及了,通過TeamViewer檢查工作,所有工作都很好!)謝謝! – BatOOn

+1

@BatOOn:樂於幫忙! – Ryan