经过2天的尝试并寻找答案后,我仍然没有找到答案。我一直收到错误#2025:提供的DisplayObject必须是调用者的子代。我正在制作一个游戏,如果用户击中敌人,敌人就会被摧毁。代码:
我的主要课程
package classes
{
import flash.display.MovieClip;
import flash.events.Event;
import flash.utils.Timer;
public class Main extends MovieClip
{
var enemyTimer:Timer;
public function Main()
{
var user:ship = new ship();
addChild(user);
user.name = "user";
user.initialize();
enemyTimer = new Timer(2000);
enemyTimer.addEventListener("timer", sendEnemy);
enemyTimer.start();
function sendEnemy(e:Event)
{
var badboy:enemy = new enemy();
addChild(badboy);
badboy.initialize();
}
}
}
}
敌人类
package classes.enemy
{
import flash.display.MovieClip;
import flash.events.Event;
public class Enemy extends MovieClip
{
var speed:Number;
public function initialize()
{
addEventListener("enterFrame", enterFrame);
}
public function Enemy()
{
this.x = 700;
this.y = Math.random()*200 + 50;
speed = Math.random()*5 + 5;
}
function enterFrame(e:Event)
{
this.x -= speed;
if(this.hitTestObject(parent.getChildByName("user")))
{
kill();
}
}
function kill()
{
removeEventListener("enterFrame", enterFrame);
stage.removeChild(this);
}
}
}
文件位于不同的文件夹中(类> Main.as& classes.enemy.Enemy.as),不知道是否与它有任何关系。
任何帮助都将不胜感激。
答案 0 :(得分:4)
这可能是因为你试图从stage
删除Enemy MovieClip,它不是(直接)的孩子。
我建议你改变这个:
stage.removeChild(this);
到此:
this.parent.removeChild(this);
当你有一个DisplayObject的引用时,在这种情况下就像this
一样,你总是可以从它的父对象中删除它,即使你不知道那个父对象是什么。或者更确切地说,如果你知道它在显示列表中,你可以删除它,所以你也可以通过这样做来检查它是否正确:
if(this.parent) {
this.parent.removeChild(this);
}
答案 1 :(得分:1)
我有解决方案:只需复制并粘贴脚本,并在舞台上和库中创建一些必需品符号;然后,检查一下。
import flash.display.MovieClip;
var myArr:Array = [];
abc.startDrag(true);
var mymc:MovieClip = new MovieClip();
addChild(mymc);
init();
function init()
{
for (var i=0; i<25; i++)
{
var par:Particle = new Particle();
par.x = Math.random() * stage.stageWidth;
par.y = Math.random() * stage.stageHeight;
mymc.addChildAt(par,0);
myArr.push(par);
}
this.addEventListener(Event.ENTER_FRAME, hitTes);
}
function hitTes(e:Event):void
{
for (var j=0; j<myArr.length; j++)
{
if (abc.hitTestObject(myArr[j]))
{
if (myArr[j].parent)
{
myArr[j].parent.removeChild(myArr[j]);
}
}
}
}
答案 2 :(得分:0)
我认为你放错了方法。看看这个版本是否有帮助。 (另请注意,这不包括任何对象清理,最终会出现问题。)
package classes
{
import flash.display.MovieClip;
import flash.events.Event;
import flash.utils.Timer;
public class Main extends MovieClip
{
public var enemyTimer:Timer;
public var user:ship = new ship();
public var badboy:enemy = new enemy();
public function Main()
{
user = new ship();
addChild(user);
user.name = "user";
user.initialize();
enemyTimer = new Timer(2000);
enemyTimer.addEventListener("timer", sendEnemy);
enemyTimer.start();
}
// *** I moved this out of the constructor:
public function sendEnemy(e:Event):void
{
badboy = new enemy();
badboy.name = "badboy"; // you probably have to make this unique, though.
addChild(badboy);
badboy.initialize();
}
}
}