You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何实现僵尸群朝向玩家旋转?代码问题求助

问题:如何让僵尸朝向玩家旋转?

我一直在折腾游戏里的僵尸朝向逻辑——想让一群僵尸自动转向玩家,但研究了好半天都没搞定。目前我用这段代码计算旋转角度:

public void calculateAngle() { 
    double theta = 0.0d; 
    for(Zombie zombie : entities) { 
        double a = zombie.getX() - player.getX(); 
        double b = zombie.getY() - player.getY(); 
        double c = (int) Math.sqrt(Math.pow(a, 2) + Math.pow(b, 2)); 
        if(zombie.getX() > player.getX() && zombie.getY() > player.getY()) 
            theta = Math.sin(b / c) + 90; 
        else if(zombie.getX() < player.getX() && zombie.getY() > player.getY()) 
            theta = Math.sin(b / a) - 60; 
        else if(zombie.getX() > player.getX() && zombie.getY() < player.getY()) 
            theta = Math.sin(a / c); 
        else 
            theta = Math.sin(a / c); 
        zombie.setDegrees(theta); 
    } 
}

我之前试过别人推荐的Math.atan2()函数,但怎么调试都不生效。现在已经知道僵尸和玩家的坐标位置,请问该怎么解决这个旋转朝向的问题?


更新:问题已解决!

参考评论区Thomas的建议后,代码终于正常运行了!更新后的实现代码如下:

public void calculateAngle() { 
    float theta = 0.0f; 
    for(Zombie zombie : entities) { 
        float a = zombie.getX() - player.getX() - 40; 
        float b = zombie.getMidpointY() - 10 - player.getY() - 10; 
        theta = (float) Math.toDegrees(Math.atan2(b, a)) + 90; 
        zombie.setDegrees(theta); 
    } 
}

这里的-40、-10是用来调整坐标偏移的,目的是让僵尸的旋转中心点能准确对准玩家。我是通过AffineTransform的.rotate(theta, x, y)方法来旋转僵尸图像的。虽然还没搞明白最开始用Math.atan2()为啥无效,但现在功能已经正常了,感谢大家的帮助!

内容的提问来源于stack exchange,提问作者Shane

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.13 07:19:06