如果我向右,向左,向上或向下移动玩家,我会朝那个方向移动5px。 但是,如果我按下并向右,例如,播放器向右移动5px,向下移动5px,这比前一个位置大约7个像素而不是5px。
我可以添加下一个IF语句:if(up和down)然后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;
}
}
答案 0 :(得分:2)
您可以使用值with open('mycsvfile.csv', 'w', newline='') as f:
,-1
,0
为X和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;
};
请注意,当按下左侧和右侧(没有移动,而不是向右移动)或按下向上和向下(无移动,而不是向上移动)时,它的行为与原始行为不同。