0

谁能告诉我如何通过满足两个条件来停止计时器:

  1. 舞台上的所有物体都应该击中它们TestObjects
  2. 只有当最后一个物体碰到它的测试物体时,计时器才会停止。

玩家将散落在舞台上的电影剪辑拖放到正确的位置,按照特定的顺序,就像在字母学习游戏中一样,当最后一个字母被放到适当的位置时,计时器停止。

我尝试了几种方法,包括“&&”方法,但它似乎不起作用。

我是as3的新手,所以请不要使用面向对象的编程方法来回答。

4

3 回答 3

0

The simplest way would be to check every frame if the objects are in the correct position and them stopping the timer:

var objects:Vector.<DisplayObject> = new Vector.<DisplayObject>();

private function onEnterFrame(ev:Event):void {
   //check positions of objets
   var allObjectsOK:Boolean = true;
   for each( var do:DisplayObject in objects ) {
       //check if do is in place by checking its x and y properties
       // in this exampel, if x and y are above 10, object is not in place
       if (do.x > 10 && do.y > 10) {
            allObjectsOK = false;
       }
   }

   if (allObjectsOK) {
       timer.stop();
   }
}

stage.addEventListener(Event.ENTER_FRAME, onEnterFrame);
于 2013-10-23T09:39:59.487 回答
0

一种方法是将每个 MovieClip 的目标位置存储为片段的属性。(假设您使用的是动态的 MovieClip,因此您可以向它们添加属性)

每一帧或者您想要测试这种情况的频率,只需循环播放影片剪辑并检查每个影片剪辑的 x,y 是否与您在影片剪辑上创建的 targetX 和 targetY 匹配。

例如 :

public function areWeDoneYet():Boolean
{

     for (var index:int = 0;index < container.numChildren;index++)
     {
         var curLetter:MovieClip = container.getChildAt(index) as MovieClip;

         // test if the curLetter is at target location or close enough for your needs
        // if not return false

     }
     return true; // return true if the loop completed 

     // if it did complete, it means all MovieClips are in right target location.

}

所以每一帧或任何时候你想检查你都可以去:

if (areWeDoneYet())
{
    // do whatever you need to do.
    // stop the timer or whatever
}

此解决方案假定您的所有字母都是容器 MovieClip 的子级。您可以对包含这些 MovieClip 的数组使用相同的概念,并对其进行迭代。

于 2013-10-23T14:19:25.473 回答
0

我会尝试通过 mouseUP 来驱动它,因为当你停止拖动时总是会发生这种情况。可能是这样的:

var timer:Timer = new Timer(10000, 1);

var alphabetMembers:Array = [letterA,
                             letterB,
                             letterC,
                             //Stick the rest of your letter vars in here
                             ]

var correctLocations:Dictionary = new Dictionary();

correctLocations[letterA] = hitTestA;
correctLocations[letterB] = hitTestB;

//do the same for each character

timer.start();

this.addEventListener(MouseEvent.MOUSE_UP, onMouseUp, true);

function onMouseUp(e:MouseEvent):void
{
    var correctLocation:uint = 0;

    for(var i:int = 0; i < alphabetMembers.length; i++)
    {
        if(alphabetMembers[i].hitTestObject(correctLocations[alphabetMembers[i]]))
        {
            correctLocation++;
        }
    }

    if(correctLocation >= alphabetMembers.length)
    {
        timer.stop();
    }
}
于 2013-10-23T10:56:17.213 回答