旋转并绘制动画的单个帧

时间:2014-01-14 15:22:50

标签: java animation

所以我有一个动画类,我想要包括旋转动画的能力。并非我绘制的每个动画都需要旋转,所以如果我能将它作为一个可选的参数,那就太棒了。目前,我只会画一个旋转的框架。

很抱歉,如果这个问题很难看,我是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);
}

1 个答案:

答案 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

希望这会有所帮助

相关问题