0

我正在创建一个简单的 iPhone 游戏(但我所在的课程要求我使用 Flash ......),当我试图从游戏中删除对象时,我遇到了一个重大问题。

该游戏有点像一个动态的浪费时间的泡泡纸游戏,其中有无限的舞台“刷新”。一旦用户弹出所有气泡,就会随机生成更多。(当数组为空时,setup()再次调用。)

现在,我通过代码从库中提取了五种不同颜色的气泡图形中的一种,并随机放置在舞台上。但是,我不喜欢重叠,所以我给了每个气泡一个小的方形命中空间,这样当它们随机放置并显着重叠时,它们会自行弹出。出于某种原因,当我试图去除它给我的气泡时

Error#2025 提供的 DisplayObject 必须是调用者的子对象。

我尝试将 stage 添加到addChildand removeChild,但我得到了同样的错误。

import flash.events.*;
import flash.display.*;

var bubbles:Array = new Array();

var b:BlueBubble = new BlueBubble();
var b2:GreenBubble = new GreenBubble();
var b3:PinkBubble = new PinkBubble();
var b4:PurpleBubble = new PurpleBubble();
var b5:YellowBubble = new YellowBubble();

// values to be tweaked later
var bNum:uint = 1;
var maxSize:uint = 100;
var minSize:uint = 1;
var range:uint = maxSize - minSize;
var tooBig:uint = 100;

function init():void {
setup();
stage.addEventListener(Event.ENTER_FRAME, onEveryFrame);
}

function setup():void {
for (var i:uint=0; i<bNum; i++) {
    // blue
    b.width = Math.ceil(Math.random() * range) + minSize;
    b.height = b.width;
    b.x = Math.random()*(stage.stageWidth - b.width);
    b.y = Math.random()*(stage.stageHeight - b.height);
    bubbles.push(b);
    stage.addChild(b);
    // green
    b2.width = Math.ceil(Math.random() * range) + minSize;
    b2.height = b2.width;
    b2.x = Math.random()*(stage.stageWidth - b2.width);
    b2.y = Math.random()*(stage.stageHeight - b2.height);
    bubbles.push(b2);
    stage.addChild(b2);
    // pink
    b3.width = Math.ceil(Math.random() * range) + minSize;
    b3.height = b3.width;
    b3.x = Math.random()*(stage.stageWidth - b3.width);
    b3.y = Math.random()*(stage.stageHeight - b3.height);
    bubbles.push(b3);
    stage.addChild(b3);
    // purple
    b4.width = Math.ceil(Math.random() * range) + minSize;
    b4.height = b4.width;
    b4.x = Math.random()*(stage.stageWidth - b4.width);
    b4.y = Math.random()*(stage.stageHeight - b4.height);
    bubbles.push(b4);
    stage.addChild(b4);
    // yellow
    b5.width = Math.ceil(Math.random() * range) + minSize;
    b5.height = b5.width;
    b5.x = Math.random()*(stage.stageWidth - b5.width);
    b5.y = Math.random()*(stage.stageHeight - b5.height);
    bubbles.push(b5);
    stage.addChild(b5);

    //add event listeners for bubbles later

}
}
function onEveryFrame(e:Event) {
for (var i:uint=0; i<bubbles.length; i++) {

    bubbles[i].width++;
    bubbles[i].height++;

    if (bubbles[i].height >= tooBig && bubbles[i].width >= tooBig) {
        bubbles[i].height = tooBig;
        bubbles[i].width = tooBig;
    }

    // Blue hit testing
    if (b2.hitGreen.hitTestObject(b.hitBlue)) {
            removeChild(b);
    }
    if (b3.hitPink.hitTestObject(b.hitBlue)) {
            removeChild(b);
    }
    if (b4.hitPurple.hitTestObject(b.hitBlue)) {
            removeChild(b);
    }
    if (b5.hitYellow.hitTestObject(b.hitBlue)) {
            removeChild(b);
    }

    // Other hit testing...

}
}

init();
4

2 回答 2

2

您正在将b, b2,b3等添加到stage, 但将它们从执行此代码的任何对象中删除。尝试改变

stage.addChild(b);

addChild(b);

此外,最好在删除对象之前检查它是否为子对象。尝试改变

if (...)
    removeChild(b);

if (contains(b) && ...)
    removeChild(b);
于 2012-10-23T20:14:57.940 回答
0

解决此问题的最佳方法是:

mc.parent.removeChild(mc);

基本上,需要从您即将被删除的对象所在的任何显示对象调用 removeChild 函数。

于 2012-10-23T19:36:34.293 回答