AS3:使用蒙版与裁剪图像

时间:2014-06-12 01:52:08

标签: actionscript-3

我正在开发一款新游戏的拼贴画。我打算将它们与遮罩层一起使用。我的意思是例如每个spritesheets上有30个不同的tile,要使用我计划更改spritesheet的x和y的每个,所以mask将只显示想要的tile。 但问题是,它可能会迫使cpu。

例如,如果屏幕上有30个图块,并且每个spritesheets有30个不同的图块,那么如果我使用遮罩层而不是裁剪每个图块,则会产生900个图块。

所以问题是,如果我使用掩码层,它会以不好的方式影响cpu,还是仅在cpu上计算掩码下的部分?

我希望我能清楚地定义问题。

谢谢

-Ozan

1 个答案:

答案 0 :(得分:1)

Starling是一个全新的领域,因为它使用Stage3D。这意味着你必须重新考虑你的开发流程 - 一切都必须是纹理,所以有很多限制 - 你不能简单地在Flash IDE中设计一个按钮,给它一个名字并使用它。我不是说这很糟糕,不,我只是说你明智地对你有所帮助,如果你没有任何经验 - 这需要时间来学习。

我认为你做错了一些计算。你说例如,如果屏幕上有30个图块,并且每个spritesheets有30个不同的图块,则会生成900个图块,这意味着你有 30个spritesheets 每个30个瓷砖。这对你的游戏有很多牌,你确定吗? :)

无论如何,常见的方法是使用spritesheet的每个tile作为单独的tile。这就是为什么它被称为spritesheet。而这个含义很简单 - 它将使用的内存。想象一下,你在一个spritesheet中有100个tile(为了便于计算),这个spritesheet是1mb。如果你用较小的块(其中100个)拼接它,它的大小也将接近1mb。因此,如果您执行此操作并删除原始源,则由于这些位图而将占用的RAM将接近原始位置。

然后你想使用一个瓷砖(或者说你的地图只是“水”而你只使用一个瓷砖)。您实例化了同一个类的许多实例,并且由于您只使用了一种类型,因此要显示的内存是原始1mb的1/100。

我的意思是最糟糕的情况是同时使用它们中的100个,这将需要1mb的内存(我只是在谈论图像)。每次使用less时,内存都会减少。

使用掩码的方法更糟糕,因为即使您使用单个磁贴,它也会将所有原始spritesheet放入内存中。单个瓷砖 - 1mb。 它还会绘制一个遮罩对象(Sprite),还需要预先计算该遮罩并删除Bitmap的外部部分。这是更多的内存,更多的CPU计算和更多的图形渲染(因为它会在每次实例化时绘制裁剪的Bitmap)。

我认为这会让你知道为什么会这样使用它! :)如果你有一些奇特的区域,这就是你想要使用掩码的原因,那么使用一些spritesheet packager程序。它将为您提供一个数据文件,描述所使用的spritesheet的区域,因此使用单个类(有很多类)它将解析您的初始Bitmap,为每个chunk创建Bitmap子项并销毁原始。坐标无关紧要。

干杯! :)