2012-10-23 45 views
0

我正在創建一個簡單的iPhone遊戲(但我所在的課程要求我使用Flash ...),而且我正在嘗試從遊戲中移除對象時遇到了一個主要問題。」錯誤#2025提供的DisplayObject必須是調用者的孩子。「嘗試removeChild();

這款遊戲是一個動態的時間浪費bubblewrap遊戲,有無限的「刷新」的階段。一旦用戶彈出所有的泡泡,就會隨機生成。 (當數組爲空時,請再次撥打setup()。)

現在,我有五種不同顏色的氣泡圖形中的一種,它們是通過代碼從庫中拉出並隨機放置在舞臺上的。不過,我不喜歡重疊,所以我給每個泡泡都設置了一個小方格,因此當它們隨機放置並重疊時,它們會自動彈出。由於某種原因,當我試圖刪除氣泡它給我

錯誤#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(); 

回答

0

解決這個最好的辦法是:

mc.parent.removeChild(mc); 

基本上,removeChild之功能需要從任何顯示對象,你馬上要移除的對象是所謂的

+0

好了,那種工作,換以前的錯誤「錯誤#1009:無法訪問空對象引用的屬性或方法。」 ......但是我所瞭解的東西沒有任何東西是空的,那爲什麼要這麼做? – user1769210

2

你。正在將b,b2,b3等添加到stage,但將它們從任何對象中刪除都會執行此代碼。嘗試改變

stage.addChild(b); 

addChild(b); 

此外,它是檢查的對象是孩子,再取出一個好主意。嘗試改變

if (...) 
    removeChild(b); 

if (contains(b) && ...) 
    removeChild(b); 
+0

謝謝!這工作。 – user1769210

+0

很高興我能幫到你。請接受回答以解決問題。 – 2012-10-24 22:09:49

+0

謝謝 - 這解決了我遇到的同樣的問題! – jdfinch3

相關問題