【发布时间】:2014-11-09 00:03:48
【问题描述】:
我一直在用 Java 开发一款游戏,它具有基于旋转的运动(意味着您旋转以转动,并且只能在您旋转的方向上向前和向后移动)。我几乎可以正常工作,但最后遇到了问题。为了使用 AffineTransform,您使用 g2d.drawImage([image], [name of AffineTransform], null); 这不允许输入放置我的角色的坐标,这意味着我不能在屏幕上移动我的角色,只能旋转它。
如何转换我的玩家图像(旋转它),然后通过我在屏幕上设置的 xPos 和 yPos 变量将其正确放置在我的屏幕上?
如果有帮助,这是我的代码。
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.geom.AffineTransform;
import java.awt.image.BufferedImage;
public class Player
{
imageLoader loader = new imageLoader();
private BufferedImage player = loader.loadImage("/player.png");
private BufferedImage rotater = loader.loadImage("/player.png");
AffineTransform transform = new AffineTransform();
public int xPos = 200;
public int yPos = 200;
public double degrees = 90.0;
public Input input;
public void render(Graphics g) //SOMEWHERE IN THIS RENDER METHOD I HAVE TO ROTATE AND DRAW THE PLAYER TO THE SCREEN.
{
transform.setToIdentity();
transform.translate(player.getWidth() / 2, player.getHeight() / 2);
transform.rotate(Math.toRadians(degrees));
transform.translate(-player.getWidth()/2, -player.getHeight()/2);
Graphics2D g2d = (Graphics2D) g;
g2d.drawImage(player, transform, null);
System.out.println("PLAYER_X = "+xPos+" | " + "PLAYER_Y " + yPos + " | " + "ROTATION " + degrees);
}
public void moveForward()
{
xPos += (int) (Math.sin(degrees * (Math.PI/180)) * 4);
yPos += (int) (Math.cos(degrees * (Math.PI/180)) * -4);
}
public void moveBackward()
{
xPos -= (int) (Math.sin(degrees * (Math.PI/180)) * 4);
yPos -= (int) (Math.cos(degrees * (Math.PI/180)) * -4);
}
public void rotateLeft()
{
degrees = degrees - 4;
}
public void rotateRight()
{
degrees = degrees + 4;
}
}
非常感谢, 我希望你们中的一个可以帮助我。
瑞恩·科克里
【问题讨论】:
-
我的回答对你有帮助吗?
标签: java affinetransform