所以我有一个动画类,我想要包括旋转动画的能力。并非我绘制的每个动画都需要旋转,所以如果我能将它作为一个可选的参数,那就太棒了。目前,我只会画一个旋转的框架。
很抱歉,如果这个问题很难看,我是Java和这个论坛的新手,但我真的很感激有关这个问题的任何建议。与C#相比,Java在执行像这样的简单任务时似乎采用了更不直接的路径,但我确信这是有充分理由的。
对于这段代码或者在java中编写游戏的任何建议都会被铭记在心,谢谢你的时间!
public class Animation {
public BufferedImage animImage;
private int frameWidth;
private int frameHeight;
private int numberOfFrames;
private long frameTime;
private long startingFrameTime;
private long timeForNextFrame;
public int currentFrameNumber;
private boolean loop;
public int x;
public int y;
private int startingXOfFrameInImage;
private int endingXOfFrameInImage;
public boolean active;
private long showDelay;
private long timeOfAnimationCreation;
public int segmentStart;
public int segmentEnd;
public Animation(BufferedImage animImage, int frameWidth, int frameHeight, int numberOfFrames, long frameTime, boolean loop, int x, int y, long showDelay, int startFrame, int endFrame)
{
this.animImage = animImage;
this.frameWidth = frameWidth;
this.frameHeight = frameHeight;
this.numberOfFrames = numberOfFrames;
this.frameTime = frameTime;
this.loop = loop;
this.segmentStart = startFrame;
this.segmentEnd = endFrame;
this.x = x;
this.y = y;
this.showDelay = showDelay;
timeOfAnimationCreation = System.currentTimeMillis();
startingXOfFrameInImage = 0;
endingXOfFrameInImage = frameWidth;
startingFrameTime = System.currentTimeMillis() + showDelay;
timeForNextFrame = startingFrameTime + this.frameTime;
currentFrameNumber = segmentStart;
active = true;
}
public void Update(){
if(timeForNextFrame <= System.currentTimeMillis()){
currentFrameNumber++;
if(currentFrameNumber < segmentStart){
currentFrameNumber = segmentStart;
}
if(currentFrameNumber > segmentEnd){
if(!loop){
active = false;
currentFrameNumber = segmentEnd;
}
else{
currentFrameNumber = segmentStart;
}
}
startingXOfFrameInImage = currentFrameNumber * frameWidth;
endingXOfFrameInImage = startingXOfFrameInImage + frameWidth;
startingFrameTime = System.currentTimeMillis();
timeForNextFrame = startingFrameTime + frameTime;
}
}
public void Draw(Graphics2D g2d){
// Checks if show delay is over.
if(this.timeOfAnimationCreation + this.showDelay <= System.currentTimeMillis())
g2d.drawImage(animImage, x, y, x + frameWidth, y + frameHeight, startingXOfFrameInImage, 0, endingXOfFrameInImage, frameHeight, null);
}
答案 0 :(得分:0)
你可以创建一个方法来获取想要旋转它的图像的角度,然后调用Graphics类附带的rotate方法
public void rotateImage(Graphics2D g2, BufferedImage image)
{
AffineTransform trans = new AffineTransform(0.0, 1.0, -1.0, 0.0, image.getHeight(), 0.0);
g2d.transform(trans);
g2d.drawImage(image, 0, 0, image.getWidth(), image.getHeight(), null);
}
该方法中的代码来自此位置:rotateImage
希望这会有所帮助