gpt4 book ai didi

javascript - 玩家沿对 Angular 线移动 - 太快了 || Node JS

转载 作者:行者123 更新时间:2023-11-29 21:00:33 25 4
gpt4 key购买 nike

如果我向右、向左、向上或向下移动播放器,我会朝那个方向移动 5 像素。但是,如果我向下和向右按下,例如播放器向右移动 5px 并向下移动 5px,即从之前的位置移动 7 像素而不是 5px。

我可以添加下一个 IF 语句:if (up and down) then spdX and spdY = (maxSpd - maxSpd√2) ​​/or simple -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;
}
}

最佳答案

您可以使用值 -101 创建 X 和 Y 方向的变量:

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

请注意,当同时按下左右键(没有移动,而不是向右移动)或同时按下上下键(没有移动,而不是向上移动)时,这确实与原始行为不同。

关于javascript - 玩家沿对 Angular 线移动 - 太快了 || Node JS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46710509/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com