太多精灵导致底部精灵不画画

时间:2014-02-08 01:10:33

标签: actionscript-3 sprite layer flashdevelop overlapping

(我正在使用Flashdevelop在AS3中写这个)

我正在制作一款受Pikmin启发的2D平台游戏,所以很自然地,我在屏幕上同时拥有非常大量的精灵。看起来正在发生的事情是,如果彼此之上有超过23个精灵,那么它们之下的任何东西都不会被绘制出来。

Here's a picture问题。你所看到的:灰色球是一堆22个精灵。蓝色背景是一个精灵。看起来像牧羊人的家伙是一个精灵。左边是共有23个精灵,右边是牧羊人,总共24个。正如你所看到的那样,尽管上面所有像素都是alpha,但重叠的蓝色(底层)并没有画出来。它是零。

这只是Flash中的一件事,我必须忍受,或者我做错了什么?

修改:Here's my code抱歉,我没有足够的代表将其发布为多个链接。把自己弄出来。

第二次编辑:我修复了我的所有代码,并且添加了很多简单的Sprites,问题仍然发生在23个精灵上。我的怀疑在认为Flash无法处理那么多重叠的Sprite时得到了证实。我打算玩它并尝试找到一种解决方法。

1 个答案:

答案 0 :(得分:2)

显然你到处都在使用非透明位图。最有可能的是,您的Wanderer表单在特定帧处具有白色背景,而不是蓝色,并且您错误地指责Flash引擎没有在不透明的位图下绘制任何内容。

下一步:在您GameObject.SetSkin()的{​​{1}}功能中,您可以通过将Skin = new Bitmap(skindata); bitmapData属性分配给新值(如果它发生变化,当你正在做Skin)时,你可以自由地删除它,在构造函数中指定copyPixels()一次,然后使用copypaste。

下一步:你有一个全新的Skin对象,为每个Bitmap分配了完整的皮肤,无论它们是否与现有对象相同。虽然你有少量的对象,它可能会有效,但是一旦你击中了一定数量的对象,你将需要缩短内存使用量或冒着崩溃Flash的风险。您可以使用GameObject并在构造函数中执行public static var SkinSheet:Bitmap,其中if (!SkinSheet) SkinSheet=new ProperSkinSheet();是当前类的外观,无论是Wanderer,Player,Tile等。这将使您的多个对象成为同一个类只使用一个皮肤表,从而减少了应用程序的内存使用量。

希望这有点帮助。