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

时间:2017-10-12 13:10:59

标签: javascript node.js express math

如果我向右,向左,向上或向下移动玩家,我会朝那个方向移动5px。 但是,如果我按下并向右,例如,播放器向右移动5px,向下移动5px,这比前一个位置大约7个像素而不是5px。

我可以添加下一个IF语句:if(up和down)然后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;
    }
}

1 个答案:

答案 0 :(得分:2)

您可以使用值with open('mycsvfile.csv', 'w', newline='') as f:-10为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;
};

请注意,当按下左侧和右侧(没有移动,而不是向右移动)或按下向上和向下(无移动,而不是向上移动)时,它的行为与原始行为不同。