0

フラッシュでカウンターを作っています。この効果は、数字 (9、0、1、2、3、4、5、6、7、8) を持つ 2 つのスプライトを含む 1 つの列を持つスロット マシンのようなものです。私はそれらのそれぞれの y 位置をチェックしており、それらが特定の y 値よりも小さい場合は、それを他の値の下に移動して、連続的になるようにします。とにかく-100ミリ秒ごとに実行されるタイマーがあり、起動するたびに値が1ずつ更新されます。次に、数字をその位置までスクロールさせたいのですが、すべてが高速になるため、代わりに前後にジャンプし続けます=シームレスなループはありません。

何か案は?

更新の説明

値は 1 だけ増加するのではなく、「tick」の「inpValue」だけ増加します。たとえば、値が「1.03」になる可能性があり、次回タイマーが起動するときは、次のようになります。 「1.14」。この数値を 3 つの「列」=ティッカーに分割し、各ティッカーに値を設定します。ティッカー1: 1 ティッカー2: 1 ティッカー3: 4

ticker3 が次の「0」値 = 10 を取得すると、ticker2 は「2」に更新されます。問題は、数字をスクロールさせることです。そのため、数字が最初に「4」であり、次回は「2」である場合、実際にはその間のすべての数字をスクロールし、ジャンプして戻ってはいけません。行。

たとえば、値「1.14」でティッカーを停止する場合、それはティッカーが停止する値である必要があります。

編集:コード

package gui {
import flash.events.Event;
import com.greensock.TweenMax;
import com.greensock.easing.Linear;
import com.greensock.TweenLite;

import flash.display.MovieClip;
import flash.display.Sprite;

public class Ticker extends Sprite {

    public var windowBg_mc:MovieClip;

    private var _stepValue:int = 0;

    public var row1:MovieClip;
    public var row2:MovieClip;
    private var _activeRow:MovieClip;

    public var stopBtn:MovieClip;

    public function Ticker() {
        init(0);
    }

    private function init(val:int):void{

        this.addEventListener(Event.ENTER_FRAME, updateConnection);

        _stepValue = val;

        TweenMax.to(row2, 0, {tint: 0xff0000});

        _activeRow = row1;

        var yMoveTarget_num:Number = -(Number(_stepValue) * 34);

        TweenLite.to(_activeRow, 5, {y: yMoveTarget_num, ease: Linear.easeNone});

        updateConnection(null);
    }

    private function updateConnection(e:Event):void{

        if(_activeRow.y <= -342){
            _activeRow.y = 340;
            if( _activeRow == row1 ){
                _activeRow = row2;
            }else{
                _activeRow = row1;
            }
        }

        if( _activeRow == row1 ){
            row2.y = row1.y + 340;
        }else{
            row1.y = row2.y + 340;
        }

    }

    public function tick(inpValue:int):void{

        if(_stepValue == inpValue) return;

        var oldValue : int = _stepValue;
        _stepValue = inpValue;

        if( _stepValue < oldValue ){
            //target must be change here
        }

        var yMoveTarget_num:Number = -(Number(_stepValue) * 34);
        TweenLite.to(_activeRow, .4, {y: yMoveTarget_num, ease: Linear.easeIn});
    }

}
}

そして、「tick」は 100ms ごとに呼び出されるメソッドです。

4

0 に答える 0