Actionscript 3 RemoveChild不作为3闪存工作
我在这里遇到了一个问题,因为我试图在屏幕上显示祝贺消息时删除矩形的任何实例。代码有点凌乱,但为了弄清楚这一点,我一直在到处乱搞。如果我将Actionscript 3 RemoveChild不作为3闪存工作,actionscript-3,flash,Actionscript 3,Flash,我在这里遇到了一个问题,因为我试图在屏幕上显示祝贺消息时删除矩形的任何实例。代码有点凌乱,但为了弄清楚这一点,我一直在到处乱搞。如果我将addChild更改为stage.addChild,这会由于在shootMob功能中拍摄和删除它们而产生错误。我还将其称为rectangle.parent.removeChild(rectange),但这也不起作用。有什么想法吗 function spawnMob1():void { if (gameLevel==1) { var
addChild
更改为stage.addChild
,这会由于在shootMob
功能中拍摄和删除它们而产生错误。我还将其称为rectangle.parent.removeChild(rectange)
,但这也不起作用。有什么想法吗
function spawnMob1():void
{
if (gameLevel==1)
{
var rectangle:MovieClip = new ball_mc();
rectangle.x = randomRange(583);
rectangle.y = randomRange(100);
addChild(rectangle);
var mobMoveX:Tween = new Tween(rectangle, "x", None.easeOut, rectangle.x, character_mc.x, 6, true);
var mobMoveY:Tween = new Tween(rectangle, "y", None.easeOut, rectangle.y, character_mc.y, 6, true);
rectangle.visible = true;
rectangle.addEventListener(MouseEvent.CLICK, shootMob);
function shootMob(e:MouseEvent): void
{
if (contains(rectangle))
{
removeChild(rectangle);
score_txt.text = String(score);
}
score+=20;
trace("Score:" + score);
}
if (score>=60)
{
trace("Congratulations!");
congratulations1_mc.visible = true;
trace("GameLevel:" + gameLevel);
removeChild(rectangle);
// rectangle.visible = false;
gameLevel = 0;
}
character_mc.addEventListener(Event.ENTER_FRAME, charHit);
function charHit(event:Event): void
{
if (rectangle.hitTestObject(character_mc))
{
if (contains(rectangle))
{
removeChild(rectangle);
if (health>0)
{
health-=5;
health_txt.text = String(health);
trace("boop");
trace("Health:" + health);
} else if (health<=0) {
trace("You have died");
death_mc.visible = true;
gameLevel=0;
}
}
}
}
函数spawnMob1():void
{
如果(游戏级别==1)
{
变量矩形:MovieClip=newball_mc();
矩形.x=随机范围(583);
矩形。y=随机范围(100);
addChild(矩形);
var mobMoveX:Tween=新Tween(矩形,“x”,无.easeOut,矩形.x,字符x,6,true);
var mobMoveY:Tween=新的Tween(矩形,“y”,None.easeOut,矩形.y,character_mc.y,6,true);
矩形。可见=真;
矩形.addEventListener(MouseEvent.CLICK,shootMob);
函数shootMob(e:MouseEvent):void
{
if(包含(矩形))
{
removeChild(矩形);
score_txt.text=字符串(分数);
}
分数+=20分;
跟踪(“分数:+分数);
}
如果(分数>=60)
{
trace(“祝贺你!”);
祝贺1_mc.visible=true;
跟踪(“游戏级别:+GameLevel”);
removeChild(矩形);
//矩形。可见=假;
游戏级别=0;
}
字符\u mc.addEventListener(Event.ENTER\u FRAME,charHit);
函数charHit(事件:事件):void
{
if(rectangle.hitTestObject(character_mc))
{
if(包含(矩形))
{
removeChild(矩形);
如果(运行状况>0)
{
健康-=5;
health_txt.text=字符串(health);
跟踪(“boop”);
跟踪(“健康:+健康”);
}否则,如果(健康您将}
shootMob
放错了位置,则应包含(分数>=60)
块。将一个函数写入另一个函数是一种不好的编码风格。如何改为:
Writing one function inside another function is a bad coding style. What about this instead:
import flash.events.MouseEvent;
import flash.events.Event;
import fl.transitions.Tween;
import flash.text.TextField;
import flash.display.MovieClip;
var score_txt:TextField = new TextField(50,50,0xFFFFF);
var score:Number;
var gameLevel:int = 1;
var rectangle:MovieClip;
//function spawnMob1():void
//{
if (gameLevel==1)
{
rectangle = new ball_mc()
rectangle.x = randomRange(583);
rectangle.y = randomRange(100);
addChild(rectangle);
var mobMoveX:Tween = new Tween(rectangle,"x",None.easeOut,rectangle.x,character_mc.x,6,true);
var mobMoveY:Tween = new Tween(rectangle,"y",None.easeOut,rectangle.y,character_mc.y,6,true);
rectangle.visible = true;
rectangle.addEventListener(MouseEvent.CLICK, shootMob);
}
function shootMob(e:MouseEvent):void
{
if (contains(rectangle))
{
removeChild(rectangle);
score_txt.text = String(score);
}
score += 20;
trace("Score:" + score);
if (score>=60)
{
trace("Congratulations!");
congratulations1_mc.visible = true;
trace("GameLevel:" + gameLevel);
if(rectangle || congratulations1_mc.visible == true)
removeChild(rectangle);
gameLevel = 0;
}
}
character_mc.addEventListener(Event.ENTER_FRAME, charHit);
function charHit(event:Event):void
{
if (rectangle.hitTestObject(character_mc))
{
if (contains(rectangle))
{
removeChild(rectangle);
if (health>0)
{
health -= 5;
health_txt.text = String(health);
trace("boop");
trace("Health:" + health);
}
else if (health<=0)
{
trace("You have died");
death_mc.visible = true;
gameLevel = 0;
}
}
}
}
导入flash.events.MouseEvent;
导入flash.events.Event;
导入fl.transitions.Tween;
导入flash.text.TextField;
导入flash.display.MovieClip;
var score_txt:TextField=新TextField(50,50,0xFFFFF);
var评分:数字;
变量gameLevel:int=1;
var矩形:MovieClip;
//函数1():void
//{
如果(游戏级别==1)
{
矩形=新球_mc()
矩形.x=随机范围(583);
矩形。y=随机范围(100);
addChild(矩形);
var mobMoveX:Tween=新Tween(矩形,“x”,无.easeOut,矩形.x,字符_mc.x,6,true);
var mobMoveY:Tween=新Tween(矩形,“y”,无.easeOut,矩形.y,字符_mc.y,6,true);
矩形。可见=真;
矩形.addEventListener(MouseEvent.CLICK,shootMob);
}
函数shootMob(e:MouseEvent):void
{
if(包含(矩形))
{
removeChild(矩形);
score_txt.text=字符串(分数);
}
分数+=20分;
跟踪(“分数:+分数);
如果(分数>=60)
{
trace(“祝贺你!”);
祝贺1_mc.visible=true;
跟踪(“游戏级别:+GameLevel”);
if(矩形| |祝贺1_mc.visible==true)
removeChild(矩形);
游戏级别=0;
}
}
字符\u mc.addEventListener(Event.ENTER\u FRAME,charHit);
函数charHit(事件:事件):void
{
if(rectangle.hitTestObject(character_mc))
{
if(包含(矩形))
{
removeChild(矩形);
如果(运行状况>0)
{
健康-=5;
health_txt.text=字符串(health);
跟踪(“boop”);
跟踪(“健康:+健康”);
}
否则如果(Health可能是一个作用域问题,这是您使用本地函数的方式;除非您引用的内容有输入错误。我不会引用鼠标事件处理程序中的矩形
实例-您依赖的是函数内部的旧引用。感谢您的回复!我将其移动到了Spawnmob块中,但它仍然是r。)我在舞台上表演。由于游戏级别值和所有内容的变化,怪物停止繁殖,我无法移除现有的(朝目标移动)以离开舞台。我不喜欢将函数放在另一个函数中,但做任何其他事情都会导致引用“矩形”导致空对象错误。谢谢你的回复!我已经尝试过了,到目前为止一切都很好,但是,很明显,这只是添加了一个子项。你建议如何添加更多的子项?我会把它放回现有的gameLevel==1 if语句中吗?不,我只是为了规范你的代码而注释。如果需要,你可以添加子项在条件下。我不明白你在gameLevel==1条件下检查什么。这有什么需要。或者在函数外声明矩形变量,因为你可以到处都可以。对不起,我想问的是,如果我重新引入setInterval方法(甚至计时器),mob的创建必须在函数内。如果这是在函数内,则对“矩形”的其他调用必须在此函数内,因为以前的错误我无法访问“矩形”不在创建它们的函数内部。你不能在函数外部全局声明你的矩形变量。前几天尝试过,这样做似乎会继续重新绘制movieClip实例(使用你的代码)回到x:100y:10,它永远不会成为字符_mc的完整路径。我假设这是因为矩形变量被覆盖