Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/actionscript-3/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Actionscript 3 太多精灵导致底部精灵无法绘制_Actionscript 3_Sprite_Layer_Flashdevelop_Overlapping - Fatal编程技术网

Actionscript 3 太多精灵导致底部精灵无法绘制

Actionscript 3 太多精灵导致底部精灵无法绘制,actionscript-3,sprite,layer,flashdevelop,overlapping,Actionscript 3,Sprite,Layer,Flashdevelop,Overlapping,(我使用Flashdevelop在AS3中编写) 我正在制作一个灵感来源于皮克明的2D平台,所以很自然,我的屏幕上同时有大量的精灵。似乎正在发生的事情是,如果有任何超过23个精灵在彼此之上,它们下面的任何东西都不会被吸引 问题的关键。你所看到的:灰球是一堆22个精灵。蓝色背景是精灵。那个看起来像牧羊人的家伙是个精灵。左边总共有23个精灵,右边的牧羊人总共有24个。正如您所看到的,该重叠(底层)中的蓝色没有绘制,尽管其上方所有像素的alpha为零 这仅仅是我不得不忍受的Flash的问题,还是我做错

(我使用Flashdevelop在AS3中编写)

我正在制作一个灵感来源于皮克明的2D平台,所以很自然,我的屏幕上同时有大量的精灵。似乎正在发生的事情是,如果有任何超过23个精灵在彼此之上,它们下面的任何东西都不会被吸引

问题的关键。你所看到的:灰球是一堆22个精灵。蓝色背景是精灵。那个看起来像牧羊人的家伙是个精灵。左边总共有23个精灵,右边的牧羊人总共有24个。正如您所看到的,该重叠(底层)中的蓝色没有绘制,尽管其上方所有像素的alpha为零

这仅仅是我不得不忍受的Flash的问题,还是我做错了什么

编辑:抱歉,我没有足够的代表将其发布为多个链接。把你自己弄昏


第二次编辑:我取消了所有代码,只添加了很多普通精灵,而问题仍然发生在23个精灵上。我的怀疑在认为Flash不能处理那么多重叠的精灵时得到了证实。我将对它进行处理,并尝试找到一种解决方法。

显然,您到处都在使用不透明位图。很可能你的
漫游者
皮肤表在某一帧有白色背景,而不是蓝色,你错误地指责Flash引擎没有在不透明位图下绘制任何东西

下一步:在
GameObject.SetSkin()函数中,您拥有
Skin=新位图(skindata)
,您可以通过将
Skin
bitmapData
属性指定给一个新值(如果它发生变化,就像您正在执行的
copyPixels()
)来执行相同的操作,这样您就可以自由地删除它,在构造函数中分配
Skin
一次,然后使用copypaste

下一步:你有一个全新的
位图
对象,每个
游戏对象
都有完整的皮肤,不管它们是否与现有对象属于同一类。虽然对象数量很少,但它可能会工作,但一旦遇到一定数量的对象,就需要缩短内存使用时间,否则可能会导致闪存崩溃。您可以使用
publicstaticvar SkinSheet:Bitmap
,如果(!SkinSheet)SkinSheet=newproperskinsheet(),则可以在构造函数中使用
其中
ProperSkinSheet
是当前类的皮肤,可以是漫游者、玩家、平铺等。这将使同一类的多个对象使用一个且唯一的皮肤表,从而减少应用程序的内存使用


希望这有点帮助。

这肯定不是flash的错误,而是您自己的问题。不幸的是,你没有发布任何代码,所以我无法给你一个关于它是什么的答案。我假设你所说的扩展是指继承(它们都是不同的),我相当有经验,可以告诉你我可以绘制数千个显示对象,而没有这个问题。因此,发布一些代码将是有用的,因为这些对象是三个不同扩展上几百行代码的组合,并且很难找出一个常见问题。我的最佳选择是找到一个在过去经历过这种情况的人,并且知道从哪里开始寻找。编辑:而且,对象之间没有任何交互,所以在我看来,这更可能与flash处理单个位图/精灵的方式有关,而不是我所做的错误。第二次编辑:是,extension==inheritance使用相关代码的粘贴库更新了OP。如果不清楚,屏幕截图中的蓝色都是瓷砖,灰色的球是流浪者,牧羊人是玩家对象。如果流浪者在某个帧上有一个白色背景(我大约99%确定这不是真的,因为它只有5帧),这不能解释半白色,或者它如何总是在相同数量的对象上出现。(我对它进行了测试,对玩家对象也进行了测试。我在
GameObject.SetSkin()中修复了这一行)
。谢谢你的提示。至于将skinsheet设置为静态,我不确定这对继承自一个类的多个对象类型的效果如何。我现在正在努力实现它。现在查看代码,我认为@Vesper在正确的轨道上使用了copyPixels,而不是将其设置为透明。我将很快就会有答案。因此,如果没有整个项目的调试,我无法确认这一点,但我相信您应该在
copyPixels()
中将mergeAlpha设置为true的情况下尝试这一点。在当前设置中,只要
copyPixels()
我不相信你是在闪动白色背景,我认为你实际上是在清除背景后面的像素。如果你想确认该区域实际上是空的,请尝试更改舞台的颜色或在舞台上添加一些颜色,看看是否仍然绘制白色。我用我自己的透明纹理进行了局部测试,并获得了类似的效果效果。我正在绘制的位图到处都有透明的背景,这不是我想要显示的。当我将mergeAlpha设置为true时,突然每个对象开始与它下面的所有其他对象重叠。这不是alpha问题。如果是,它会逐渐显示,或者每次都会显示,而不是突然显示在特定的恒定点上。