0

Enter_Frameを実行している関数があり、関数中にトゥイーンします。現在使用しているTweenLiteの代わりにobject.y=object.y+1を使用できることはわかっています。しかし、TweenLiteは私が望んでいた最高の効果をもたらします。今の私の問題は、enter_frame関数が互いに衝突していないときにそれを削除したかったということです。しかし、hitTestObjectをトレースすると、一瞬のように、hitTestObjectの結果が「false」を返します。したがって、トゥイーンは実際には1番目に終了できず、オブジェクトがまだ衝突している間に、enter_frameの実行を早期に削除します。

private function checkCollision (e:Event):void
        {
            //detect collision in array
            for (var j:uint = 0; j < collisionArray.length - 1; j++)
            {
                for (var k:uint = j + 1; k < collisionArray.length; k++)
                {
                    if (collisionArray[j].hitTestObject(collisionArray[k]))
                    {
                        //do something
                        TweenLite.to (objectA,0.2,{y:move2Y});
                        TweenLite.to (objectB,0.2,{y:move3Y});
                    }
                    trace (collisionArray[j].hitTestObject(collisionArray[k]));
                }
            }
        }
4

1 に答える 1

0

問題は、checkCollisionメソッドが呼び出されてから0.2秒後までトゥイーンが終了しないことです。

ENTER_FRAMEでこのメソッドを呼び出すと、既存のトゥイーンが常に上書きされます。考えてみてください-ENTER_FRAMEはcheckCollisionsを呼び出し、checkCollisionsはいくつかのトゥイーンを開始します。トゥイーンが完了する前に、次のENTER_FRAMEが起動し、checkCollisionsを再度呼び出し、同じオブジェクトでトゥイーンを開始します。まだオブジェクト。

ENTER_FRAMEをまったく使用しないのが最善の策かもしれません-checkCollisionsを実行し、交差するオブジェクトのトゥイーンを開始します。交差するオブジェクトがある場合は、0.2秒後にもう一度chechCollisionsを呼び出します(トゥイーンが終了したら)

private function checkCollision (e:Event):void
        {
            var collisionsDetected:Boolean = false;
            //detect collision in array
            for (var j:uint = 0; j < collisionArray.length - 1; j++)
            {
                for (var k:uint = j + 1; k < collisionArray.length; k++)
                {
                    if (collisionArray[j].hitTestObject(collisionArray[k]))
                    {
                        //do something
                        TweenLite.to (objectA,0.2,{y:move2Y});
                        TweenLite.to (objectB,0.2,{y:move3Y});
                        collisionsDetected = true;
                    }
                    trace (collisionArray[j].hitTestObject(collisionArray[k]));
                }
            }

            //you might want to make the timeout a little longer than 200ms,
            //to make sure that the tweens have completed when it fires.
            //you can figure out the best delay based on your framerate
            if(collisionsDetected) setTimeout(checkCollision, 250);
        }
于 2010-08-19T21:37:46.123 に答える