如何正确旋转我的球员?JAVA
今天我在做一个基本的坦克游戏,两个玩家控制他们的坦克(一个绿色,一个红色),然后互相射击。在开发基于旋转的移动系统时(意思是玩家旋转指向一个方向,然后朝该方向向前或向后直线移动),我在代码中遇到了一个缺陷 问题在于,我不是旋转每个玩家的图像,然后将它们都放在游戏屏幕上,而是旋转整个JFrame画布。 这会使第一名玩家完美地工作,但第二名玩家在旋转时会环绕第一名玩家。 希望有人知道如何更改我的移动系统来旋转玩家图像,然后放置它,这样每个玩家都可以单独移动而不影响彼此 这是我的玩家代码(玩家1和玩家2的代码实际上是相同的,除了 加载的图像和一些变量的名称) 这是我的主要游戏文件(处理渲染和绘制JFrame等) 非常感谢如何正确旋转我的球员?JAVA,java,swing,Java,Swing,今天我在做一个基本的坦克游戏,两个玩家控制他们的坦克(一个绿色,一个红色),然后互相射击。在开发基于旋转的移动系统时(意思是玩家旋转指向一个方向,然后朝该方向向前或向后直线移动),我在代码中遇到了一个缺陷 问题在于,我不是旋转每个玩家的图像,然后将它们都放在游戏屏幕上,而是旋转整个JFrame画布。 这会使第一名玩家完美地工作,但第二名玩家在旋转时会环绕第一名玩家。 希望有人知道如何更改我的移动系统来旋转玩家图像,然后放置它,这样每个玩家都可以单独移动而不影响彼此 这是我的玩家代码(玩家1和玩家
Ryan Corkery使用
图形创建图形
上下文的副本#创建
并转换/翻译它
public void render(Graphics g)
{
Graphics2D g2d = (Graphics2D)g.create();
g2d.rotate(Math.toRadians(degrees), xPos+16, yPos+16);
g2d.drawImage(player, xPos, yPos, null);
g2d.dispose();
}
或者,如果您不信任render
方法来做正确的事情
Graphics2D g2d = (Graphics2D)g.create();
player.render(g2d);
g2d.dispose();
g2d = (Graphics2D)g.create();
player2.render(g);
g2d.dispose();
(现在,我在想,一个循环真的会很有帮助)您是否尝试过在渲染之间保存图形状态?我认为rotate()是累积的。您可以使用getTransform和setTransform捕获状态,并在每次播放器渲染后恢复状态。正如我所说的,使用
Graphics\create
在Graphics
上下文中创建副本。在副本上执行您想要的任何转换,并在完成后调用Graphics#dispose
on。这将确保对原作所做的唯一更改是您所画的(而不是您对原作所做的翻译/转换或其他更改),非常感谢,您的第一次响应对我来说是有意义的,但我不太明白如何正确创建图形图像,如您在上面的代码中所示,现在效果很好!
public void render(Graphics g)
{
Graphics2D g2d = (Graphics2D)g.create();
g2d.rotate(Math.toRadians(degrees), xPos+16, yPos+16);
g2d.drawImage(player, xPos, yPos, null);
g2d.dispose();
}
Graphics2D g2d = (Graphics2D)g.create();
player.render(g2d);
g2d.dispose();
g2d = (Graphics2D)g.create();
player2.render(g);
g2d.dispose();