gpt4 book ai didi

java - 隔离 Sprite 表子图像以进行动画和显示

转载 作者:行者123 更新时间:2023-12-01 15:34:07 26 4
gpt4 key购买 nike

我一直在网上寻找完整的解决方案,但到目前为止,我只能找到不合适的部分。

我正在寻找一个可以查看图像文件、循环遍历文件并隔离 Sprite 然后保存它们的程序。之后,我需要一种方法来重新访问该 Sprite 信息,以便我可以显示它,但我希望能够根据我自己的公式显示图 block 。想象一下像高级 war 这样的游戏,地形 block 很少。我希望能够半随机地显示这些图 block ,但在我自己的参数范围内。

我还希望能够加载与上图具有相同尺寸 Sprite 的不同图像文件,但将这些图像用于动画。

所以我有 2 个 Sprite 表,其中有一堆 64x64 像素 Sprite 。其中一个图像文件是我的所有地形图 block 。另一个是我单位的瓷砖。我希望能够读取 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

然后,您“提取”子图像并将其绘制在 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 表子图像以进行动画和显示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9183617/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com