我有一个Volcano类。它的目的是随机喷洒lavaMass。 在主要类中,我已经做到了这一点,当我的角色击中熔岩时,一切都被移除,并且调用了deleteLava()函数。
我的问题是,使用deleteLava()函数,我的Volcano类在几个'死亡'之后就停止了熔岩。
现在我解释起来有点复杂。 我发现在deleteLava()函数中我还应该从数组中删除lavaMass,因为无论有多少'死亡',它都会继续制作熔岩。 我使用'lavaSpray.shift();',并试过'拼接'.. 这有效!除了它不会删除所有的lavaMass,所以每次角色死亡时,一些lavaMass对象会在关卡中不停地移动,而不是移动。因此,在许多“死亡”之后,有很多lavaMass对象只是站着不动,没有移动而没有被删除。
这是火山类:
包{
import flash.display.MovieClip;
import flash.events.Event;
public class Volcano extends MovieClip {
var lavaSpray:Array = [];
var lavaNum:Number;
var world:World;
public function LavaThing() {
addEventListener(Event.ENTER_FRAME, makeLava)
}
public function deleteLava()
{
this.parent.removeChild(this)
for (var m = 0; m < lavaSpray.length; m++) {
if (lavaSpray[m].parent) {
lavaSpray[m].parent.removeChild(lavaSpray[m]);
}
}
}
function makeLava (e:Event)
{
lavaNum = Math.random()*70
if (lavaSpray.length<20)
{
if (lavaNum > 68.15)
{
var lavaMass = new LavaMass();
lavaSpray.push(lavaMass);
addChild(lavaMass);
lavaMass.scaleY = 0.5;
lavaMass.scaleX = 0.5;
lavaMass.x += 90;
lavaMass.y += Math.random()*30
lavaMass.y -= Math.random()*30
}
}
for each (lavaMass in lavaSpray)
{
lavaMass.x += 4;
if (lavaMass.parent && lavaMass.x > 800)
{
lavaMass.parent.removeChild(lavaMass);
lavaSpray.shift();
}
}
}
}
}
我希望有人知道我在说什么。提前谢谢。
我提出了一个包含我的问题的视频: https://www.youtube.com/watch?v=rYxYHB7rcgY&feature=youtu.be
答案 0 :(得分:0)
我怀疑问题是:
删除熔岩时,您不会删除ENTER_FRAME
事件监听器。
删除孩子并不意味着你删除了它的听众。
所以你可以移除所有的熔岩,但ENTER_FRAME
仍会创造更多!
你必须把它自己移除。
所以你必须添加
removeEventListener(Event.ENTER_FRAME, makeLava)
作为您职能的第一行deleteLava()
.... 或者你可以添加
addEventListener(Event.REMOVED_FROM_STAGE, onRemoved)
并创建onRemoved(e:Event){}
功能
然后在此函数内删除您添加的任何侦听器,包括ENTER_FRAME
&amp; REMOVED_FROM_STAGE
尝试阅读有关这些主题的更多信息
游戏循环 实体系统框架 池对象模式
我可能只是链接,但我更喜欢谷歌他们,并从不同的资源阅读 - 无论他们用什么语言解释 -
祝你好运答案 1 :(得分:0)
只是为了澄清你的问题..你在volacano类中添加了lavamass?你需要移除lavamass或火山? Dp你在编译期间遇到任何错误?在开发射击游戏时我也遇到了类似这样的事情,删除掉了Bullerts后移除的子弹出现了。我做的是,我只是将子弹添加到空的动画片段中并删除整个剪辑。