球员运动对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; } }
您可以使用值为-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(不移动,而不是向上移动),则它的行为与原始行为不同。