经过两天的尝试和寻找,我仍然没有找到答案。我一直收到错误#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);
}
}
}这些文件位于不同的文件夹中(classes > Main.as & classes.enemy.Enemy.as),不知道这是否与此有关。
任何帮助都将不胜感激。
发布于 2012-01-02 05:59:33
这可能是因为您试图从stage中删除Enemy MovieClip,它不是(直接)子对象。
我建议你改变这个:
stage.removeChild(this);要这样做:
this.parent.removeChild(this);当您拥有对DisplayObject的引用时,即使您不知道父对象是什么,也可以将其从其父对象中删除,比如本例中的this。或者,如果您知道它在显示列表中,则可以将其删除,因此您还可以通过执行以下操作,首先检查它是否在显示列表中:
if(this.parent) {
this.parent.removeChild(this);
}发布于 2012-06-05 21:51:23
我已经有了解决方案:只需复制并粘贴脚本,并在舞台和库中创建一些基本符号;然后,检查它。
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]);
}
}
}
}发布于 2012-01-02 05:31:35
我想你把一个方法放错地方了。看看这个版本是否有帮助。(还要注意,这不包括对对象的任何清理,这最终将是一个问题。)
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();
}
}
}https://stackoverflow.com/questions/8695326
复制相似问题