2

我在 AS3 项目中使用 Spritesheet,并从使用资源繁重的方法将位图切割成每个帧然后存储它们升级到使用 scrollRect 以便它只显示所需的帧。在节省大量资源的情况下,这几乎可以正常工作。

也就是说,存在一个问题,因为通过 scrollrect 显示的精灵现在像疯了一样跳来跳去。Spritesheets 已经过检查并且没有问题,并且在只有一行精灵的小板上接缝没问题,所以只有 X 轴被移入。

然而,在较大的角色上,比如主角,如果有超过一排,那就更糟了。当精灵被加载时,它被赋予了相关精灵的高度和宽度的值,然后它计算出工作表中有多少精灵(计算后来被忽略的空格)并将值放入一个点数组中。精灵大小合适,所以每帧都是 480 宽 x 631 高(我知道这不是 2 的平方,但我认为这没有问题)。

制作该数组的代码非常简单,如下所示:

'var tempSprite:Point;
for (var k:int = 0; k < h; k++){
for (var j:int = 0; j < i; j++) {
   tempSprite.x = (SpriteWidth) * j;
   tempSprite.y =  (SpriteHeight * k)
   SpriteOffsets.push(tempSprite);
}
  }'

每次更改为新工作表时都会给出位图数据,并且工作正常,它还会检查以确保在不需要时不会将其更改为新工作表。scrollRect 完成了从点数组(SpriteOffsets)传递 X 和 Y 值以及给出精灵的宽度和高度,因此它知道完整大小。然后将其设置为 cacheAsBitmap(以确保)并打开平滑。

问题似乎有点奇怪..好像它试图做一个缩放并且经常搞砸它是一个像素,有时更多。缩放播放器窗口时,它似乎也会以不同的方式影响它的输出量。它似乎只是 Y 轴。

当对位图数据使用透明的 PNG 源时,它似乎也“捕捉”到帧的顶部,而不是显示所有内容,包括空白行。

我用于 Scrollrect 的代码只是:

bitmap.scrollRect = new Rectangle(SpriteOffsets[FrameOrder[AnimSet][AnimFrame]].x, SpriteOffsets[FrameOrder[AnimSet][AnimFrame]].y, RSpriteWidth, RSpriteHeight);
                    

其中 Spriteoffset 位从 SpriteOffset 数组调用,该数组存储(并且我已经检查过)帧开始的正确 X 和 Y 位置,并且 RSpriteWidth 和 RSpriteHeight 是帧的高度和宽度,对于所有帧都是静态的. 因此,我所理解的一切都是相当典型的创造之类的东西。

真的,这是我第一次尝试升级到使用滚动矩形,虽然有很多优点..这个接缝给我带来了一个巨大的问题..

我试图手动计算精灵偏移量并考虑到这一点,它也曾一度出现,矩形实际上太高了 1 个像素,尽管被告知了正确的像素数,所以我试图只是将高度降低 1 但无济于事。

感谢您提供任何帮助或建议。

4

0 回答 0