2014-01-14 83 views
-1

所以我有一个动画类,我想包括旋转动画的能力。并非我绘制的每个动画都需要旋转,所以如果我可以将其设置为可选参数,那将非常棒。此刻,我会解决只是画一个旋转的框架。旋转和绘制动画的单帧

对不起,如果这个问题很难看,我对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

1)为了更好地帮助越早,张贴[MCVE(http://stackoverflow.com/help/mcve)。该代码至少需要导入和'main(String [])'成为我们可以使用的一个例子。 2)请学习常见的[Java命名约定](http://java.sun.com/docs/books/jls/second_edition/html/names.doc.html#73307)(具体用于名称的情况) ,方法和属性名称并一致使用它们。 –

回答

0

您只需创建一个需要你是想通过将它旋转图像的角度,然后调用自带的图形类

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

希望这有助于

+0

解决了一半问题,但是如何绘制新旋转图像的指定部分?我正在使用的动画是长帧图片。我需要知道如何旋转图像(spritesheet),然后只绘制它是我想要的框架的部分。 – user3194559