0

カウント後に番号をリセットするにはどうすればよいですか? onComplete 関数のようなものが欲しいです。

説明
アニメーションが現在の位置から 120 ピクセル進み、ステージから飛び出します。ループしていて、進む前に一番下までヨーヨーしてしまいました。自分の数字がヨーヨーしたり、ステージから飛んだりしたくありません。私の番号は、カウントごとに 120 ピクセル前に移動してから戻る必要があります。

代替テキスト http://www.ashcraftband.com/myspace/videodnd/tweener___.jpg

NumbersView.as 'コードは機能しますが、説明したようにめちゃくちゃです'

package   
{ 
    import flash.display.DisplayObject; 
    import flash.display.MovieClip; 
    import flash.utils.Dictionary; 
    import flash.events.Event; 
    import caurina.transitions.Tweener; 

    public class NumbersView extends MovieClip 
    { 
        private var _listItems:Array; 
        private var previousNums:Array; 
        private const numHeight:int = 120; 

        public function NumbersView()  
        { 
            _listItems = new Array(); 
            previousNums = new Array(); 
   //Tweener.init();

            var item:NumberImage; 
            for (var i:Number = 0; i < 9; i++) { 
                item = new NumberImage(); 
                addChild(item); 
                item.x = i * item.width; 
                _listItems.push(item); 
            } 
        } 

        public function setTime($number:String):void { 
            var nums:Array = $number.split(""); 
            //trace("$number = " + $number);
            for (var i:Number = 0; i < nums.length; i++) { 
                if (nums[i] == previousNums[i]) continue; 
                Tweener.removeTweens(_listItems[i]);    

                //newY:int = -numHeight;
    var newY:int = int(nums[i]) * -numHeight;
    trace("newY = " + newY);
                trace("currY = " + _listItems[i].y);

    /*----------------------PROBLEM AREA, RIGHT HERE------------------------*/
                //if (_listItems[i].y < 0) _listItems[i].y = numHeight;//
                //Tweener.addTween(_listItems[i], { y:newY, time:3 } );//
    Tweener.addTween(_listItems[i], { y:_listItems[i].y+newY, time:3 } );//
            } 
            previousNums = nums; 
        } 
    } 
} 

Tweener の例
http://hosted.zeh.com.br/tweener/docs/en-us/parameters/onComplete.html

**おっと!
//がらくたコードはそれを使用しないように注意したものであり、誰かのコードに対するコメントではありません


DOCUMENT CLASS
Publish Settings/Flash/Settings 'Advanced ActionScript 3.0 Settings'/Document class:NumbersView

クラスシンボル 70x1080、数字 70x120
ライブラリ/「右クリック」プロパティ/クラス:NumberImage

4

2 に答える 2

0

頭のてっぺんから考えることができる最も論理的な解決策は、すべての数字を含む画像を拡張して、両端に9があるようにすることです。つまり、8の後に画像の上端に9があります。しかし、0 の前には、画像の下部にある 9 もあります。

次に、イメージがサイクルの各ポイントでステージ上のどの位置にあるかを調べるために、いくつかのテストを行う必要があります。画像の両端に 9 のいずれかを表示するときの位置を知る必要があります。次に、if ステートメントを挿入して、オブジェクトが一番上の 9 を表示していることを意味する位置に到達したときをテストし、それが true の場合、画像の位置を一番下の 9 に等しくします。この変更を行うとき、Tweener を使用しないでください。1 つのフレームで他の 9 の位置にスナップして、視聴者が認識しないようにするためです。

私の言っていることがわかると思います。あなたのコードは私を混乱させるので、あなたがこのロジックをどこに配置するかはわかりませんが (理解するのに時間がかかりすぎない限り)、あなたは知っていると思います.

于 2010-03-17T20:13:37.103 に答える
0

最終結果としてあなたが本当に何を得ようとしているのかを理解するのに少し時間がかかりましたが、私はそれを理解したと思います. この機能を 2 つのクラスに分割しました。NumbersView クラスは引き続きドキュメント クラスですが、ライブラリ内の 0 ~ 9 の数字のムービークリップに追加できる NumberImage クラスも作成しました。コードは次のとおりです。

//NumbersView.as - Your Document Class
package {

    import flash.display.MovieClip;

    public class NumbersView extends MovieClip {

        private var _listItems:Array; 
        private const numHeight:int = 120; 

        public function NumbersView()  
        { 
            _listItems = new Array();

            var item:NumberImage; 
            for (var i:Number = 0; i < 9; i++) { 
                item = new NumberImage(); 
                addChild(item); 
                item.x = i * item.width; 
                _listItems.push(item); 
            }

            setTime('123456789');

        }

        public function setTime($number:String):void { 
            var nums:Array = $number.split(""); 
            trace(nums);

            for (var i:Number = 0; i < nums.length; i++) { 

                _listItems[i].start( int(nums[i]) );

            } 

        } 


    }
}

次のクラスは NumberImage.as クラスで、ライブラリ内の項目を右クリックして [プロパティ...] をクリックし、[ActionScript 用にエクスポート] をオンにして、クラス名に NumberImage を入力すると、ムービークリップに接続できます。

//NumberImage.as - Linked to the NumberImage movieclip in the Library    
package {

    import flash.display.MovieClip;
    import caurina.transitions.Tweener;

    public class NumberImage extends MovieClip {

        public var count:int;

        public function NumberImage() {
            count = 0;
        }

        public function start( num:int = 0 ):void {
            this.y = -120*num;
            count = num;
            moveNumbers();
        }

        public function moveNumbers():void {
            count++;
            if(count % 10 == 0) {
                Tweener.addTween( this, {y: this.y + 1080, time:1, onComplete:moveNumbers});
            } else {
                Tweener.addTween( this, {y: this.y - 120, time:1, onComplete:moveNumbers});
            }
        }

    }
}

NumberImage オブジェクトの機能は、それらを含むクラスではなく、それ自体で処理されるため、これがより理にかなっていて、解読が容易になることを願っています。

于 2010-03-17T20:23:05.317 に答える