【问题标题】:Properly handling android resizing of sprite sheets正确处理精灵表的android调整大小
【发布时间】: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/84/83/8)、对于任意宽度和任意数量的单个精灵。

为了更好地了解问题,假设这是需要绘制(自动调整大小的精灵)的空间:

| _ _ _ _ _ _ _ _ _ _ |

这是第一帧的绘制方式(取自精灵表中的0 * 262 to 0 + 262*代表我关心的不透明部分):

| _ _ _ _ * * _ _ _ _ |

这是第二帧的绘制方式(取自精灵表中的1 * 262 to 262 + 262):

| _ _ _ _ _ & & _ _ _ |

什么时候应该:

| _ _ _ _ & & _ _ _ _ |

对于每个连续的帧以此类推(至少我认为每个连续的帧。效果在实际设备上不太明显,但确实存在)。

【问题讨论】:

    标签: android algorithm image-processing sprite-sheet


    【解决方案1】:

    即使您手动调整精灵表的大小,您也会遇到这个问题。最简单的方法是为每个构建生成正确大小的精灵表(或者它不存在)。您需要将 spritesheet 的每一帧作为单独的、正确居中且尺寸尽可能大的图像文件。

    现在,您可以使用ImageMagick's CLI。使用 shell 脚本来

    1. Resize每个大图像到精灵表的所需高度(缩放宽度以保持纵横比)
    2. 使用Montage 命令生成您的精灵表。请注意,巧妙编写的脚本甚至可以生成矩形精灵表。

    现在应该没有问题了。 :) 希望这会有所帮助。

    【讨论】:

    • 这是我目前正在做的,但我想避免它,因为它几乎是程序大小的三倍。
    • 理想情况下 - 你会为每个屏幕尺寸生成一个 APK,不是吗?
    • 对于每个屏幕尺寸是的(在我的情况下,中型屏幕手机 + 大和 xlarge 平板电脑),但我也想避免对每个 DPI 都这样做(尽管这可能吗?如果没有解决方案,那不会太糟糕)。另外,我认为这也是一个有趣的问题。
    • 你可以使用浮点值作为精灵表上的精灵矩形吗?如果您使用 OpenGL(或类似的东西)来渲染精灵,那么可能还有另一种解决方案。
    • 不行,精灵矩形只能由整数定义。我没有使用 OpenGL。现在我刚刚删除了精灵表并为每一帧使用了一个文件。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-19
    • 1970-01-01
    • 2021-02-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-03
    相关资源
    最近更新 更多