球员运动对角线 - 太快|| NodeJS
问题描述:
如果我向右或向左,向上或向下移动播放器,则向该方向移动5px。 但是,如果我按下并右键例如播放器正在向右移动5像素和向下移动5像素,这是从前一个位置约7像素,而不是5px。球员运动对角线 - 太快|| NodeJS
我可以添加下一个IF语句:if(上下),然后SPDX和SPDY =(maxSpd - maxSpd√2)/或简单-25%?
但我认为已经是我的代码是有点乱......
任何好的解决方案,这是快速,看起来很简单? :)
这是我的代码:
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和其值-1
,0
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;
};
注意,这并从原来的不同的表现时,左,右按下按钮(没有动静,而不是移动右)或上下按下时(不移动,而不移动)。
看起来不错,干净,什么是最重要的...我明白了:) 我会尝试下班后的傍晚,并避免停止与向上/向下按我会关闭它在IF语句走右(右/谢谢@Ryan! – BatOOn
我等不及了,通过TeamViewer检查工作,所有工作都很好!)谢谢! – BatOOn
@BatOOn:乐于帮忙! – Ryan