2012-05-29 31 views
0

我正在用as3創建一個平臺遊戲,並且需要查看動畫片段_邊界的孩子是否在舞臺上,這樣我可以將它們移除並降低計數器,以便更多會持續生成。到目前爲止,我所擁有的是以下。請幫助,一直困住這幾個星期。看看舞臺上的動畫片段的孩子

var ObjectArray:Array = []; 
var ChildrenColliding:Boolean = false; 
var onStageCount:Number = 0; 
function generateObjects():void{  
    if(_vx > 0 && onStageCount < 20){ 
     var Square:MovieClip; 
     Square = new mcSquare(); 
     Square.x = Math.random() * 1000 + (Math.abs(_boundaries.x) + 50); 
     Square.y = Math.random() * stage.stageHeight/2.5 + (stage.stageHeight/2.5); 
     ObjectArray.push(Square); 
     _boundaries.addChild(Square); 
     onStageCount += 1; 
    } 
    for(var i in ObjectArray){ 
     Square[i] = Square.name; 
     for(var a in ObjectArray){ 
      if(ObjectArray[i].hitTestObject(ObjectArray[a]) && a != i){ChildrenColliding = true;} 
      while(ChildrenColliding){ 
      ObjectArray[i].x += (ObjectArray[a].height + 25); 
      ObjectArray[i].y += (ObjectArray[a].width + 25); 
      ChildrenColliding = false; 
       if(ObjectArray[a].hitTestObject(ObjectArray[i]) && a != i){ChildrenColliding = true;} 
      } 
     } 
    } 
    //CHECK TO SEE IF CHILDREN ARE ON STAGE!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 
    for(var w in ObjectArray){ 
     if(_boundaries){ 
      onStageCount -= 1; 
      trace("removed"); 
      _boundaries.removeChild(ObjectArray[w]); 
      ObjectArray.splice(w, 1); 
     } 
    } 
} 
+0

當你說「在舞臺上」時,你的意思是Square的實例已經加入舞臺,或者它的座標(x,y)在舞臺的邊界內嗎? – Corey

+0

它的座標位於舞臺 – Cory

回答

1

您可能需要使用localToGlobal方法來確定廣場對象的位置。喜歡的東西:

for (var w in ObjectArray) { 
    if (_boundaries) { 
     var sq:MovieClip = ObjectArray[w]; 
     var pnt:Point = _boundaries.localToGlobal(new Point(sq.x, sq.y)); 
     if (pnt.x <= 0 || pnt.x >= _boundaries.stage.stageWidth || 
      pnt.y <= 0 || pnt.y >= _boundaries.stage.stageHeight) { 

      // remove square 
      onStageCount -= 1; 
      trace("removed"); 
      _boundaries.removeChild(ObjectArray[w]); 
      ObjectArray.splice(w, 1); 
     } 
    } 
} 

在一個側面說明了一般的最佳實踐,保留字開頭大寫字母類名(如影片剪輯,雪碧,或MyCustomClass),並使用駝峯的變量名。與其他開發人員一起推廣最佳實踐很有幫助。

希望這會有所幫助。

+0

謝謝你這麼嚇人。這幾個星期以來一直困擾着我。這個解決方案完美地工作 – Cory

+0

嘿,現在,我注意到第二組for循環的問題,那些處理childrencollding的問題,這是由於玩家正在移動時隨機重新生成的對象。任何關於如何獲得代碼的想法只能確保它所放置的代碼不會碰撞,並且移動那些座標然後顯示它,而不是將它們全部隨機地重新生成併產生什麼 – Cory

+0

很難說你的描述。也許嘗試用1或2這樣的整數遞增目標對象的x,y,而不是按被測對象的寬度/高度遞增。此外,你似乎正在增加X的高度和Y的寬度......這邏輯似乎逆轉了我。你可能想要考慮一個更復雜的邏輯,因爲這會一直推動物體向下和向右,即使目標物體大部分位於被測物體的左上角。合理? – Corey

0

試試這個:

//CHECK TO SEE IF CHILDREN ARE ON STAGE!!!!!!!!!! 
for(var w in ObjectArray){ 
    if(_boundaries && _boundaries.contains(ObjectArray[w])){ 
     onStageCount -= 1; 
     trace("removed"); 
     _boundaries.removeChild(ObjectArray[w]); 
     ObjectArray.splice(w, 1); 
    } 
} 
+0

的邊界內,可以看出它們是否在舞臺上,但我想要做的是看看孩子是否在舞臺上,這樣我就可以將其移除,重新生成它的某處 – Cory

+0

嗯......不知道我是否理解這個問題。如果對象不是'_boundaries'的子元素,但是存在於數組中,則可以在其他地方使用它(作爲子元素添加)。 – strah

+0

該對象是movieclip _boundary的子對象,我試圖查看單個對象是否在玩家後面,這樣我只有五十個對象在玩家周圍。 – Cory

相關問題