我需要在画布游戏中处理负角的帮助

问题描述 投票:0回答:1

我正在使用HTML,JS和画布制作顶视图的中世纪游戏。

问题是,我的播放器在不看别人的情况下能够击中别人。我在下面的代码的第三行中提出了一个条件来解决此问题,但由于玩家的视角限制为最大180和最小-180,所以该方法不起作用。玩家位置和受害者位置之间的限制为最大90最小-270。这些限制破坏了我的状况。

我可以接受任何想法或现成的条件或代码。

if(Math.sqrt(Math.pow((this.X-Victim.X),2),Math.pow((this.Y-Victim.Y),2)) <= 100){//<-here calculates distance between victim and player
    var angle = Math.atan2(this.X - Victim.X , this.Y - Victim.Y) * (180 / Math.PI);//<-here calculates angle between victim and player
    if((angle < this.LookAngle + 45)&&(angle > this.LookAngle - 45)){//<- i need help on here
        console.log(angle,this.LookAngle);
        //socket.emit('HitTo',{UserName:Victim.UserName,hitval:20});//<- actually you dont need to know this
    }
}
math game-physics angle pi 360-degrees
1个回答
0
投票

回答我自己的问题

首先,我将垂直翻转角度,因为它必须是反向的。 go to source

180-angle

然后我必须将(视角)和(2个播放器之间的角度)转换为0-360。 go to source

(angle + 360) % 360

然后,我需要检查其他两个角度之间的角度。 go to source

var isbetween = (startangle,midangle,endangle) => {
    endangle = (endangle- startangle) < 0 ? endangle - startangle + 360 : endangle - startangle;
    midangle = (midangle - startangle) < 0 ? midangle - startangle + 360 : midangle- startangle;
    return (midangle <  endangle); 
}

并适用于我的代码

if(Math.sqrt(Math.pow((this.X-Victim.X),2),Math.pow((this.Y-Victim.Y),2)) <= 100){
    var angle = Math.atan2(this.X - Victim.X , this.Y - Victim.Y) * (180 / Math.PI);
    var flippedangle = 180 - angle;
    var fixedangle = (flippedangle + 360) % 360;
    var fixedlook = (this.LookAngle + 360) % 360;
    if(((fixedangle - (fixedlook + 80)) < 0 ? fixedangle - (fixedlook + 80) + 360 : fixedangle - (fixedlook + 80)) > (((fixedlook - 80) - (fixedlook + 80)) < 0 ? (fixedlook - 80) - (fixedlook + 80) + 360 : (fixedlook - 80) - (fixedlook + 80))){
        socket.emit('HitTo',{UserName:Victim.UserName,hitval:20});
    }
}

谢谢

或者,如果这没有帮助,通过搜索“ javascript检查两个角度是否接近”而从Stack Overflow中找到的答案之一,应该为您提供了足够的有用信息来解决它。 –安德鲁·莫顿

[如果您想看游戏,here the link of it.

© www.soinside.com 2019 - 2024. All rights reserved.