【发布时间】:2015-08-23 15:37:11
【问题描述】:
我正在用 Java 做一个格斗游戏,但我在动画方面遇到了一些问题。
问题是当玩家闲置或行走时,我没有问题,因为每个精灵都有固定的宽度(50px),但是当玩家攻击时,只要打得更远,精灵就会变得更宽。并且在游戏中精灵无法正确绘制。
PS:我将每个帧/精灵保存在一个数组列表中,并根据精灵的数量手动更改 MAXFRAMES。
SS 是精灵表。
我正在使用 getSubImage 方法,如下所示。
public void setAnimacionIdleRight(BufferedImage ss) {
this.animation_idle_right = new ArrayList<BufferedImage>();
BufferedImage tmp = ss.getSubimage(0, 0, 350, 100);
BufferedImage subtmp = null;
int k = 1;
for(int i = 1; i < MAXFRAMES; i++) {
subtmp = tmp.getSubimage((CELLWIDTH * i) + k - CELLWIDTH, 1, CELLWIDTH, CELLHEIGHT);
this.animation_idle_right.add(subtmp);
k++;
}
}
SpriteSheet 示例:
有什么想法吗?还是解决方案蛮力加载img?
【问题讨论】:
-
两件事:1- 使每个精灵始终具有完全相同的大小或 2- 创建某种查找表,它可以告诉您精灵在给定位置的大小
-
@MadProgrammer 是绝对正确的。没有别的办法。我认为第二个建议是最好的,因为这样可以节省空间,但是创建 LUT 会涉及很多开销。如果你使用第一种方法,你开发会更快。
-
或者 3- 使用某种类型的图像分析库来分离子图像矩形,那些包含连续图像的矩形......充其量是棘手的。
-
是的,我正在尝试遍历精灵像素列(从'cellwidth'列开始)寻找像素RBG!= 0,这意味着img更宽,然后移动到下一列,直到它们都为 0,然后将单元格宽度设置为该列的值,但这非常棘手.. =/ 如果我不能完成它,我只是手动裁剪精灵。谢谢你的想法:)
标签: java image animation sprite