如何实现僵尸群朝向玩家旋转?代码问题求助
问题:如何让僵尸朝向玩家旋转?
我一直在折腾游戏里的僵尸朝向逻辑——想让一群僵尸自动转向玩家,但研究了好半天都没搞定。目前我用这段代码计算旋转角度:
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
相关产品推荐
相关产品推荐

