球员运动对角线 - 太快|| NodeJS

问题描述:

如果我向右或向左,向上或向下移动播放器,则向该方向移动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; 
    } 
} 

你可以做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