Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/325.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 知道玩家看的方向吗?_Java_Minecraft_Bukkit - Fatal编程技术网

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度左右。因此,如果我从北向西移动头部,代码会显示为西,而它仍然是北的……告诉我怎么做的!我想,它只返回一个显示速度的向量。