2014-01-14 196 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