【发布时间】:2012-06-12 21:35:38
【问题描述】:
我有一些我正在开发的游戏的 1 行精灵表。我只在drawable-xhdpi 文件夹中提供它们,我让操作系统在其他密度上为我调整大小。
这种方法会出现以下问题:
我有一个1750 宽度精灵表(xhdpi 宽度),其中包含5 状态。所以每个单独的精灵都有宽度1750 / 5 = 350。在hdpi 上,它被调整为1313,因此每个单独的精灵都有1313 / 5 = 262.6 的宽度。然而,这实际上是262,因为android 不允许你在Rect 中使用浮点数,你必须将source 传递给drawBitmap。
这样做的问题是我无法正确提取单个精灵:绘制它们时,每个连续的精灵都会向右移动一点,这是我不想要的。有没有办法解决这个问题?我试过了,如果我手动将它们调整为1315 并在drawable-hdpi 中提供这个调整大小的版本,它会起作用,但这会大大增加 APK 的大小,我不想这样做。
注意 1: 每个单独的精灵在每一侧都被大量的透明度包围(两边的数量相同)。我可以承受失去一两个像素的这种透明度,我只是不能让中间的不透明部分移位。
注意 2: 这不仅发生在 xhdpi -> hdpi 之间。调整到其他密度等级时,同样的问题仍然存在。解决方案必须是通用的:对于任何调整大小系数(或至少 6/8、4/8 和 3/8)、对于任意宽度和任意数量的单个精灵。
为了更好地了解问题,假设这是需要绘制(自动调整大小的精灵)的空间:
| _ _ _ _ _ _ _ _ _ _ |
这是第一帧的绘制方式(取自精灵表中的0 * 262 to 0 + 262,*代表我关心的不透明部分):
| _ _ _ _ * * _ _ _ _ |
这是第二帧的绘制方式(取自精灵表中的1 * 262 to 262 + 262):
| _ _ _ _ _ & & _ _ _ |
什么时候应该:
| _ _ _ _ & & _ _ _ _ |
对于每个连续的帧以此类推(至少我认为每个连续的帧。效果在实际设备上不太明显,但确实存在)。
【问题讨论】:
标签: android algorithm image-processing sprite-sheet