无法使删除功能正常工作 AS3
can't get delete function to work properly AS3
我有一座火山class。它的目的是随机喷射 lavaMass。
在主要部分 class 我已经做到了,当我的角色撞到熔岩时,一切都被移除,并调用 deleteLava() 函数。
我的问题是,使用 deleteLava() 函数后,我的火山 class 在 'deaths' 后停止生成熔岩。
现在我解释起来有点复杂。
我发现在 deleteLava() 函数中,我还应该从数组中删除 lavaMass,因为无论有多少 'deaths',它都会继续生成熔岩。
我用了 'lavaSpray.shift();',并尝试了 'splice'..
这奏效了!除了它不会删除所有的 lavaMass 之外,所以每次角色死亡时,一些 lavaMass 对象都会在关卡中徘徊,不会移动。所以在许多 'deaths' 之后,有很多 lavaMass 对象只是静止不动,没有移动也没有被删除。
这里是火山 class:
套餐{
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
我怀疑问题是:
删除熔岩时不会删除 ENTER_FRAME
事件侦听器。
删除子项并不意味着您删除了它的侦听器。
所以你可以移除所有熔岩,但 ENTER_FRAME
仍然会产生更多熔岩!
你必须自己删除它。
所以你必须添加
removeEventListener(Event.ENTER_FRAME, makeLava)
作为函数的第一行 deleteLava()
.....
或者您可以添加
addEventListener(Event.REMOVED_FROM_STAGE, onRemoved)
并创建 onRemoved(e:Event){}
函数
然后在此函数中删除您添加的任何侦听器,包括 ENTER_FRAME
和 REMOVED_FROM_STAGE
尝试阅读更多关于这些主题的内容
游戏循环
实体系统框架
池对象模式
我可能没有链接,但我更喜欢你 Google 它们,并从不同的资源中阅读 - 无论它们是用什么语言解释的 -
祝你好运
只是为了澄清您的问题。您在火山中添加了熔岩 class?你需要移除熔岩或火山? Dp 你在编译过程中有什么错误吗?我在开发射击游戏时也遇到过这样的事情,移除子弹后会出现移除的子弹。我所做的是,我只是将项目符号添加到一个空的影片剪辑中,然后删除了整个剪辑。
我有一座火山class。它的目的是随机喷射 lavaMass。 在主要部分 class 我已经做到了,当我的角色撞到熔岩时,一切都被移除,并调用 deleteLava() 函数。
我的问题是,使用 deleteLava() 函数后,我的火山 class 在 'deaths' 后停止生成熔岩。
现在我解释起来有点复杂。 我发现在 deleteLava() 函数中,我还应该从数组中删除 lavaMass,因为无论有多少 'deaths',它都会继续生成熔岩。 我用了 'lavaSpray.shift();',并尝试了 'splice'.. 这奏效了!除了它不会删除所有的 lavaMass 之外,所以每次角色死亡时,一些 lavaMass 对象都会在关卡中徘徊,不会移动。所以在许多 'deaths' 之后,有很多 lavaMass 对象只是静止不动,没有移动也没有被删除。
这里是火山 class:
套餐{
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
我怀疑问题是:
删除熔岩时不会删除 ENTER_FRAME
事件侦听器。
删除子项并不意味着您删除了它的侦听器。
所以你可以移除所有熔岩,但 ENTER_FRAME
仍然会产生更多熔岩!
你必须自己删除它。
所以你必须添加
removeEventListener(Event.ENTER_FRAME, makeLava)
作为函数的第一行 deleteLava()
..... 或者您可以添加
addEventListener(Event.REMOVED_FROM_STAGE, onRemoved)
并创建 onRemoved(e:Event){}
函数
然后在此函数中删除您添加的任何侦听器,包括 ENTER_FRAME
和 REMOVED_FROM_STAGE
尝试阅读更多关于这些主题的内容
游戏循环 实体系统框架 池对象模式
我可能没有链接,但我更喜欢你 Google 它们,并从不同的资源中阅读 - 无论它们是用什么语言解释的 -
祝你好运
只是为了澄清您的问题。您在火山中添加了熔岩 class?你需要移除熔岩或火山? Dp 你在编译过程中有什么错误吗?我在开发射击游戏时也遇到过这样的事情,移除子弹后会出现移除的子弹。我所做的是,我只是将项目符号添加到一个空的影片剪辑中,然后删除了整个剪辑。