2012-02-07 69 views
0

我一直在網上尋找嘗試找到一個完整的解決方案,但到目前爲止,我只能找到不適合在一起的作品。隔離動畫和顯示器的精靈片子圖像

我正在尋找一個程序,可以看一個圖像文件,通過文件循環,並隔離精靈,然後保存它們。之後,我需要一種方法重新訪問該精靈信息,以便我可以顯示它,但是我希望能夠基於我自己的公式顯示這些圖塊。想象一場像小地形磚一樣的高級戰爭遊戲。我希望能夠半隨機地顯示這些圖塊,但在我自己的參數內。

我還希望能夠加載一個與上面的圖像具有相同大小精靈的不同圖像文件,但將這些圖像用於動畫。

所以我有2個精靈表有一堆64x64像素精靈。其中一個圖像文件就是我的所有地形圖塊。另一個是我的單位瓦片。我希望能夠讀取精靈並以任何方式展示給我。

我不能爲我的生活弄清楚這種方法。我研究過Subimaging和drawImage,但我無法讓他們正確地存儲或重新顯示信息。

謝謝。

編輯:所以我簡化了我的問題,爲我自己和爲了其他人的緣故。

爲什麼不能運行下面的代碼?

package animation; 

import java.awt.Graphics; 
import java.awt.image.BufferedImage; 
import java.io.File; 
import java.io.IOException; 

import javax.imageio.ImageIO; 
import javax.swing.JFrame; 
import javax.swing.JPanel; 

public class AnimTest 
{ 
public static void main(String[] args) 
{ 
    AnimTest test = new AnimTest(); 
    test.go(); 
} 

public void go() 
{ 
    JFrame frame = new JFrame(); 
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    MyDrawP drawP = new MyDrawP(); 
    frame.getContentPane().add(drawP); 
    frame.setSize(500,500); 
    frame.setVisible(true); 
} 
    } 

    class MyDrawP extends JPanel 
    { 

public void drawSprite(Graphics g) 
{ 
    try { 
     BufferedImage bigImg = ImageIO.read(new File("C:/Users/scott/Desktop/Personal Work/Pixel Art/terrain.png")); 

     final int width = 64; 
     final int height = 64; 

     int x = 0; 
     int y = 0; 

     bigImg.getSubimage(x, y, width, height); 
     g.drawImage(bigImg, 5, 5, this); 

    } catch (IOException e) { 
     e.printStackTrace(); 
    } 
} 
    } 

對不起,我不知道如何適當地格式化代碼塊。

現在有了這段代碼,我希望MyDrawP類能夠查看我的文件,從0,0開始抓取它的一個64x64塊,然後保存並在添加到框架中時將其顯示在框架中。林相當肯定問題是,方法drawSprite從來沒有被調用,但我不知道什麼時候調用它,我不知道是否還有其他東西丟失。

同樣,爲什麼上面的代碼不工作?

感謝

+0

['ImageLabelPanel'](http://stackoverflow.com/a/3078354/230513)可以是有幫助的。 – trashgod 2012-02-07 20:53:08

+0

..你有問題嗎? – 2012-02-08 03:23:13

回答

1

您應該覆蓋MyDrawP類中的paintComponent(Graphics)方法,並從那裏調用您的drawSprite

然後,「提取」子圖像和借鑑他們在您的JPanel的方式,應返工:

bigImg.getSubimage(x, y, width, height) 

將在您提供的代碼返回一個子圖像(實際上永遠是一個在0,0 ),所以你應該是這樣的:

Image subImage = bigImg.getSubimage(x,y,width,height) 

當然,下一行應該用子圖像,而不是bigImg ...

你終於有機會實現你的方式「隨機」選你想繪製哪個子圖像,以及你想在你的JPanel上繪製的地方。

http://docs.oracle.com/javase/tutorial/uiswing/painting/step2.html參見

0

當我補習,我們使用精靈張爲遊戲製作動畫的學生。有一些精靈切割程序可以幫助,但沒有做到我想要的,所以我寫了自己的。在Java中,您可以執行一些低級像素處理來確定精靈的開始和結束位置,然後「剪切」出來。

基本上將你的精靈表變成BufferedImage並使用getPixel找出精靈開始和結束的位置。然後,您可以使用getSubimage將每個精靈寫入單獨的圖像。然而,困難的部分是調整精靈,所以你的動畫不會跳過所有的地方。我創建了一個GUI,以便您可以看到動畫並手動進行對齊。如果你給我你的電子郵件,我可以發送源代碼或者我可以在任何地方上傳它。