0

そのため、トゥイーンライブラリを使用せず、イージングを使用せずに、オブジェクトをtargetXおよびtargetYにトゥイーンしたいと思います。

私はいつもすべてのトゥイーンにgreensockを使用してきました。この場合、greensockのDynamicPropsPluginは完璧ですが、それはクラブメンバー専用です......

今回は、動的に変化するターゲットにオブジェクトをトゥイーンする必要があります。

オブジェクトをイージングでトゥイーンする方法は知っていますが、今回はそれなしでオブジェクトをトゥイーンする必要があるため、最初のターゲットに到達した後、次のターゲットにスムーズに進みます。

これは機能するコードですが、問題は緩和です。

package  
{
    import flash.display.*;
    import flash.events.*;

    /**
     * ...
     * @author me
     */
    [SWF(width="1200", height="600", frameRate="30", backgroundColor="#ffffff")]
    public class Test extends Sprite 
    {

        // first target coordinates
        private var targetX:Number=600;
        private var targetY:Number = 450;

        // second target coordinates
        private var targetX2:Number=900;
        private var targetY2:Number = 300;

        // check if first target is reached
        private var _pointReached:Boolean

        // object to tween
        private var _ball:Sprite;

        public function Test() 
        {
            init()
        }

        private function init():void 
        {
            // simple ball 
            _ball = new Sprite();
            _ball.graphics.beginFill(0xff0000);
            _ball.graphics.drawCircle( -50, -50, 50);
            _ball.graphics.endFill();
            addChild(_ball);

            addEventListener(Event.ENTER_FRAME, onLoop);
        }

        private function onLoop(e:Event):void 
        {
            var vx:Number; 
            var vy:Number; 

            if (_pointReached) { // next target
                // easing
                vx = (targetX2 - _ball.x) * .3;
                vy = (targetY2 - _ball.y) * .3;
            }else {
                // easing
                vx = (targetX - _ball.x) * .3;
                vy = (targetY - _ball.y) * .3;
            }

            // check distance
            var dx:Number = targetX - _ball.x;
            var dy:Number = targetY - _ball.y;
            var dist:Number = Math.sqrt(dx * dx + dy * dy);

            if (dist <= 0.6) {
                // first target point reached
                _pointReached = true;
            }

            // tween an object
            _ball.x += vx;
            _ball.y += vy;

        }

    }

}

何かご意見は?

ありがとう!

4

3 に答える 3

0

元のコードでは、次のような行で:

vx = (targetX - _ball.x) * .3;

* .3 の部分を削除します。それがあなたの摩擦または緩和です。その後、コードはイージングなしで機能するはずです。

于 2013-07-31T19:50:04.503 に答える
0

タイマー クラスを使用し、タイマー関数内でオブジェクトをターゲットに向けて移動します。オブジェクトが目標位置に到達するまで行います。

于 2012-06-29T10:43:25.857 に答える
0

これを試してください(未テスト):

private function onLoop(e:Event):void 
    {
        var xDistance:Number; 
        var yDistance:Number; 

        if (_pointReached) { // next target
            xDistance = _ball.x - targetX2;
            yDistance = _ball.y - targetY2;

        }else {
            xDistance = _ball.x - targetX;
            yDistance =  _ball.y - targetY;

        }

        var rotation:Number = Math.atan2(yDistance, xDistance);

        var speed:int = 2;

        // tween an object
        _ball.x -= speed * Math.cos(rotation);
        _ball.y -= speed * Math.cos(rotation);

        if (dist <= 0.6) {
            // first target point reached
            _pointReached = true;
        }

    }
于 2012-06-29T12:53:14.117 に答える