0

私は単純な iPhone ゲームを作成しています (ただし、私が参加しているクラスでは Flash を使用する必要があります...)。ゲームからオブジェクトを削除しようとしているときに大きな問題が発生しています。

このゲームは、ステージの無限の「リフレッシュ」が行われる、時間を浪費するダイナミックなバブルラップ ゲームのようなものです。ユーザーがすべてのバブルをポップしたら、よりランダムに生成します。(配列が空の場合は、setup()再度呼び出します。)

今のところ、コードによってライブラリから 5 つの異なる色のバブル グラフィックを 1 つずつ引き出して、ランダムにステージに配置しています。ただし、オーバーラップが好きではないので、各バブルに小さな正方形のヒットスペースを与えて、ランダムに配置されて大幅にオーバーラップすると、バブルが自分自身をポップするようにしました。何らかの理由で、泡を取り除こうとすると、

Error#2025 指定された DisplayObject は呼び出し元の子でなければなりません。

と にステージを追加しようとしましaddChildremoveChildが、同じエラーが発生します。

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に追加していますが、このコードを実行しているオブジェクトからそれらを削除しています。変更してみるb3stage

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 に答える