Java 知道玩家看的方向吗?
我试着找出球员们面对的方向,比如北、南、西、东。我创建了这段代码,但有时不起作用Java 知道玩家看的方向吗?,java,minecraft,bukkit,Java,Minecraft,Bukkit,我试着找出球员们面对的方向,比如北、南、西、东。我创建了这段代码,但有时不起作用 package me.Nightfighter001.GlobalSystem.WorldEditor; import org.bukkit.entity.Player; public enum Yaw { NORTH, SOUTH, EAST, WEST; public static Yaw getYaw(Player p) { float yaw = p.getLocati
package me.Nightfighter001.GlobalSystem.WorldEditor;
import org.bukkit.entity.Player;
public enum Yaw {
NORTH, SOUTH, EAST, WEST;
public static Yaw getYaw(Player p) {
float yaw = p.getLocation().getYaw();
if (yaw > 135 || yaw < -135) {
return Yaw.NORTH;
} else if (yaw < -45) {
return Yaw.EAST;
} else if (yaw > 45) {
return Yaw.WEST;
} else {
return Yaw.SOUTH;
}
}
}
包me.Nightfighter001.GlobalSystem.WorldEditor;
导入org.bukkit.entity.Player;
公共枚举{
北、南、东、西;
公共静态偏航(玩家p){
浮动偏航=p.getLocation().getYaw();
如果(偏航>135 | |偏航<-135){
返回偏航北;
}否则,如果(偏航<-45){
返回偏东方向;
}否则,如果(偏航>45){
返回偏航。向西;
}否则{
返回偏航南部;
}
}
}
有人能帮我吗?对不起,我的英语不好,谢谢:)您可能想试试这个:
private String getDirection(Player player) {
double rot = (player.getLocation().getYaw() - 90) % 360;
if (rot < 0) {
rot += 360.0;
}
if (0 <= rot && rot < 67.5) {
return "N";
} else if (67.5 <= rot && rot < 157.5) {
return "E";
} else if (157.5 <= rot && rot <247.5) {
return "S";
} else if (247.5 <= rot && rot < 360.0) {
return "W";
} else {
return null;
}
}
private String getDirection(播放器){
双旋转=(player.getLocation().getYaw()-90)%360;
if(rot<0){
rot+=360.0;
}
如果(0偏航值的范围为-360到360,那么对于大于135或小于-135的值,您的代码当前显示的基数方向不正确。在您的情况下,据我所知,您可以向任何负偏航值添加360以缩短代码(较少检查)。从0-45度和315度到360度的范围是南,45-135度是西,135-225度是北,225-315度是东。代码看起来像这样,我测试了一会儿,它似乎与f3调试菜单/屏幕的值匹配:
public static CardinalDirection get(Player player) {
float yaw = player.getLocation().getYaw();
if (yaw < 0) {
yaw += 360;
}
if (yaw >= 315 || yaw < 45) {
return CardinalDirection.SOUTH;
} else if (yaw < 135) {
return CardinalDirection.WEST;
} else if (yaw < 225) {
return CardinalDirection.NORTH;
} else if (yaw < 315) {
return CardinalDirection.EAST;
}
return CardinalDirection.NORTH;
}
publicstaticdirectionget(播放器){
浮动偏航=player.getLocation().getYaw();
如果(偏航<0){
偏航+=360;
}
如果(偏航>=315 | |偏航<45){
往南返回;
}否则,如果(偏航<135){
往西返回;
}否则,如果(偏航<225){
返回方向:北;
}否则如果(偏航<315){
向东返回;
}
返回方向:北;
}
您可以执行以下操作:
getPlayer().geteylocation().getDirection()标记为正确的答案是可行的,但理论上偏航也可能有360度以上的值(在文档中有说明),因此仅处理负值可能会在某个点上导致错误
这里的代码是您的精确代码,但它使用真正的模实现来获得0-360度范围内的角度
public static Yaw getYaw(播放器p){
浮动偏航=p.getLocation().getYaw();
偏航=(偏航%360+360)%360;//真模,因为javas模对于负值来说很奇怪
如果(偏航>135 | |偏航<-135){
返回偏航北;
}否则,如果(偏航<-45){
返回偏东方向;
}否则,如果(偏航>45){
返回偏航。向西;
}否则{
返回偏航南部;
}
}
你说的“有时”是什么意思它不工作?有什么错误?旁注:你的软件包有大写字母。你应该把它命名为me.nightfighter001.globalsystem.worldeditor
。问题是它有时给我提供错误的解决方案,所以没有错误或类似的东西。首先感谢你的快速回答!我不得不用“W”替换“N”,用“N”替换“E”,“S”由“E”表示,“W”由“S”表示。但在你的代码中,我还发现了一个问题,即方向在45度时不会改变,而是在70度左右。因此,如果我从北向西移动头部,代码会显示为西,而它仍然是北的……告诉我怎么做的!我想,它只返回一个显示速度的向量。