Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/384.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_Swing - Fatal编程技术网

如何正确旋转我的球员?JAVA

如何正确旋转我的球员?JAVA,java,swing,Java,Swing,今天我在做一个基本的坦克游戏,两个玩家控制他们的坦克(一个绿色,一个红色),然后互相射击。在开发基于旋转的移动系统时(意思是玩家旋转指向一个方向,然后朝该方向向前或向后直线移动),我在代码中遇到了一个缺陷 问题在于,我不是旋转每个玩家的图像,然后将它们都放在游戏屏幕上,而是旋转整个JFrame画布。 这会使第一名玩家完美地工作,但第二名玩家在旋转时会环绕第一名玩家。 希望有人知道如何更改我的移动系统来旋转玩家图像,然后放置它,这样每个玩家都可以单独移动而不影响彼此 这是我的玩家代码(玩家1和玩家

今天我在做一个基本的坦克游戏,两个玩家控制他们的坦克(一个绿色,一个红色),然后互相射击。在开发基于旋转的移动系统时(意思是玩家旋转指向一个方向,然后朝该方向向前或向后直线移动),我在代码中遇到了一个缺陷

问题在于,我不是旋转每个玩家的图像,然后将它们都放在游戏屏幕上,而是旋转整个JFrame画布。

这会使第一名玩家完美地工作,但第二名玩家在旋转时会环绕第一名玩家。

希望有人知道如何更改我的移动系统来旋转玩家图像,然后放置它,这样每个玩家都可以单独移动而不影响彼此

这是我的玩家代码(玩家1和玩家2的代码实际上是相同的,除了 加载的图像和一些变量的名称)

这是我的主要游戏文件(处理渲染和绘制JFrame等)

非常感谢


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();