球员运动对angular线 – 太快|| 的NodeJS

如果我向右或向左或向下移动播放器,则向该方向移动5px。 但是,如果我按下,右侧例如播放器正在向右移动5像素和5像素,从前一个位置,而不是5像素约7像素。

我可以添加下一个IF语句:if(up and down)然后spdX和spdY =(maxSpd – maxSpd√2)/或简单的-25%?

但是我觉得我的代码有点混乱

在这里输入图像描述

任何不错的解决scheme,快速,看起来很简单? 🙂

这是我的代码:

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

       

网上收集的解决方案 "球员运动对angular线 – 太快|| 的NodeJS"

您可以使用值为-1 X和Y方向进行variables:

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

然后调整对angular线移动时:

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

请注意,如果按下左右button(不移动,而不是右移),或者按下上下button(不移动,而不是向上移动),则它的行为与原始行为不同。