2012-05-29 30 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

相关问题