Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/317.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用Java阅读sprite工作表的最佳方式是什么?_Java_Io_2d_Sprite Sheet - Fatal编程技术网

用Java阅读sprite工作表的最佳方式是什么?

用Java阅读sprite工作表的最佳方式是什么?,java,io,2d,sprite-sheet,Java,Io,2d,Sprite Sheet,我正在编写一个基本的sprite引擎,以供自己消遣,并更好地与Java的2d API结合。目前,我正在使用大量带有透明背景的独立.png文件来表示我需要的各种精灵和不同的动画帧。大多数“真实世界”游戏开发项目似乎都使用“精灵表”,在单个文件中包含多个精灵或动画帧。此外,人们通常不使用本机的图像透明度支持,而是将精灵托盘中未出现的任意颜色指定为透明颜色。如何以编程方式管理这样的文件 你怎么知道一个精灵在哪里 开始,下一个开始 你如何处理透明度 可能还有其他我在这里没有想到的因素,所以我可能会在上面

我正在编写一个基本的sprite引擎,以供自己消遣,并更好地与Java的2d API结合。目前,我正在使用大量带有透明背景的独立.png文件来表示我需要的各种精灵和不同的动画帧。大多数“真实世界”游戏开发项目似乎都使用“精灵表”,在单个文件中包含多个精灵或动画帧。此外,人们通常不使用本机的图像透明度支持,而是将精灵托盘中未出现的任意颜色指定为透明颜色。如何以编程方式管理这样的文件

你怎么知道一个精灵在哪里 开始,下一个开始 你如何处理透明度
可能还有其他我在这里没有想到的因素,所以我可能会在上面的列表中添加我想的事情或人们提出的建议,请在评论中这样做。

好吧,因为大多数都是自定义的,这些细节由实现者决定。 您通常会让文件以包含高度/宽度、编码、透明度等细节的标题信息开始


很多时候事情都在一个文件中,因为与打开/读取一个文件相比,打开/读取多个文件非常昂贵。许多游戏引擎使用压缩为0的zip或ziplike文件将单个文件视为文件系统。

我目前使用的XML文件是由一个简单的精灵编辑器生成的,该编辑器将精灵存储为可选动画姿势的集合,而这些姿势又是帧或单元格的集合。帧存储每帧信息,如图纸中帧的x和y偏移、单元格宽度和高度以及任何变换大小/旋转/色调等。。姿势存储单个帧和动画信息,例如速度和姿势名称,以便在程序hero.pose=sprite.pose[standing_right]中轻松识别它们。精灵用作文档根以保持多个姿势,例如每个面向方向的姿势

我之前使用的一个不太灵活的替代方法是为单元格和图纸指定固定大小,并根据这些值计算帧偏移和大小,例如,宽度始终为32像素,因此第三个精灵为32*2。后来,我开始在文件名中指定这些尺寸,例如,对于不适合固定单元格尺寸的精灵,sprite_name_32x64.png。我更喜欢这种新方法,尤其是一个简单的编辑器,它为我填充了大多数值,并允许我使用精灵作为其他精灵的模板


我直接使用PNG图像中存储的alpha和透明度信息,因此我不需要担心将其存储在其他位置,尽管其他方法是为每个精灵选择一个固定值并存储在某个位置,使用姿势中最左边的像素如果你知道它总是空的,使用特定的调色板条目如果你正在使用这些,精灵面具,或者你有什么。

让你的精灵表知道每个序列的大小和数量

抓取工作表的缓冲图像,并使用以下内容:

currentframe=spritesheet.getSubimage(x, y, w, h); 
您的x和y将根据您所在的帧进行更改。保持宽度和高度相同,让事情变得轻松

忘了把整个比赛都放在一张纸上。这简直是胡说八道,很难管理。对每个动画序列使用新的png。如果您不想节省空间,请只创建向右移动的动画,并实时翻转缓冲图像以向左移动

Java将读取带有alpha的png文件,所以不必担心透明度颜色。用PNG绘制所有内容。使用Photoshop或Gimp


在谷歌上搜索java图像类型\u INT\u ARGB

与java无关,但一般来说,您可以使所有精灵的大小相同。因此,您将能够在游戏或应用程序中使用简单的for循环生成精灵


但对于不同大小的精灵,精灵表大小可能会出现问题,它可能会比预期的大。因此,您必须为spritesheet定义一个xml或json文件,以便在代码中查找sprite图像。您可以使用sprite工作表编辑器有很多,我使用的是快速简便的方法来生成sprite工作表和坐标数据。

自定义是什么意思?大多数是普通位图。如果我有一张.jpg或.png格式的sprite表,你如何在不使用隐写术或其他方法的情况下将元数据编码到其中?它们是定制的,因为它们是你的,所以你可以决定文件中的内容。是的,内容可能是一个简单的位图,但您可以在包含精灵大小的位图中创建自定义文件格式或自定义信息。@Artifact这只是我编写的一个自定义.Net工具。你可以找到它