簡體   English   中英

隔離精靈表子圖像以進行動畫和顯示

[英]Isolating sprite sheet subimages for animation and display

我一直在網上尋找完整的解決方案,但到目前為止,我只能找到不匹配的部分。

我正在尋找一個程序,該程序可以查看圖像文件,循環瀏覽文件並隔離精靈,然后保存它們。 之后,我需要一種重新訪問該Sprite信息的方法,以便可以顯示它,但我希望能夠根據自己的公式顯示圖塊。 可以將游戲想象成具有少量地形的高級戰爭。 我希望能夠在我自己的參數范圍內半隨機顯示這些圖塊。

我還希望能夠加載與上述圖像具有相同大小精靈的其他圖像文件,但是將這些圖像用作動畫。

因此,我有2個Sprite工作表,其中包含一堆64x64像素Sprite。 圖像文件之一是我的所有地形圖塊。 另一個是我的單位瓷磚。 我希望能夠閱讀精靈並以我喜歡的任何方式顯示它們。

我無法為自己的一生找出解決方法。 我已經研究了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方法,但是我不確定何時調用它,也不確定是否還有其他內容丟失。

同樣,上述代碼為什么不起作用?

謝謝

您應該在MyDrawP類中重寫paintComponent(Graphics)方法, drawSprite從那里調用drawSprite

然后,應該重新設計“提取”子圖像並將其繪制在JPanel上的方式:

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

將返回一個子圖像(實際上始終是您提供的代碼中0,0處的子圖像),因此您應該具有以下內容:

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

當然,下一行應使用subImage而不是bigImg ...

最后,您必須實現“隨機”選擇要繪制的子圖像以及在JPanel上繪制位置的方式。

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

當我輔導學生時,我們使用精靈表為游戲創建動畫。 有一些精靈切割程序可以提供幫助,但是我沒有想要的功能,因此我編寫了自己的程序。 在Java中,您可以進行一些低級的像素處理,以找出精靈的開始和結束位置,然后將其“剪切”掉。

基本上將您的Sprite工作表轉換為BufferedImage並使用getPixel找出Sprite的開始和結束位置。 然后,您可以使用getSubimage將每個精靈寫入單獨的圖像。 但是,最困難的部分是對齊精靈,這樣動畫就不會在整個地方跳躍。 我創建了一個GUI,以便您可以看到動畫並手動進行對齊。 如果您給我您的電子郵件,我可以發送來源,也可以將其上傳到某個地方。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM