谁能告诉我如何通过满足两个条件来停止计时器:
- 舞台上的所有物体都应该击中它们
TestObjects
- 只有当最后一个物体碰到它的测试物体时,计时器才会停止。
玩家将散落在舞台上的电影剪辑拖放到正确的位置,按照特定的顺序,就像在字母学习游戏中一样,当最后一个字母被放到适当的位置时,计时器停止。
我尝试了几种方法,包括“&&”方法,但它似乎不起作用。
我是as3的新手,所以请不要使用面向对象的编程方法来回答。
谁能告诉我如何通过满足两个条件来停止计时器:
TestObjects
玩家将散落在舞台上的电影剪辑拖放到正确的位置,按照特定的顺序,就像在字母学习游戏中一样,当最后一个字母被放到适当的位置时,计时器停止。
我尝试了几种方法,包括“&&”方法,但它似乎不起作用。
我是as3的新手,所以请不要使用面向对象的编程方法来回答。
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);
一种方法是将每个 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 的数组使用相同的概念,并对其进行迭代。
我会尝试通过 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();
}
}