0

少し問題があります。私は次の機能を持っています:

private function elementsLoadedHandler(e:Event):void
        {
            elementContainer=new Sprite();
            var currentItem:uint;
            for (var i:uint=0; i < numberItems; i++)
            {
                var element:Element=new Element(elementModel.elements[currentItem]);
                element.x=xPos;
                element.alpha=.5;
                addChild(element);
                xPos+=130;
                currentItem++;
                elementsArr.push(element);
                if (currentItem >= elementModel.elements.length)
                {
                    currentItem == 0;
                }
            }
            movementTimer=new Timer(_movementSpeed, 0);
            movementTimer.addEventListener(TimerEvent.TIMER, moveItems);
            movementTimer.start();
            layout();
        }

これが基本的に行うことは、配列の要素を隣同士のステージに配置することです。今、私は彼らが一緒に右に移動したい. 私は次のようにこれを行います:

private function moveItems(e:TimerEvent):void
        {
            var alphaVal:Number=.5;
            movementTimer.delay+=25;
            for (var i:uint=0; i < elementsArr.length; i++)
            {
                xPos=elementsArr[i].x + 130;
                TweenLite.to(elementsArr[i], .5, {x: "130"});
                if (elementsArr[i].x > _width)
                {
                    elementsArr[i].x=0;
                }
            }
        }

アイテムを右に移動してから、最後のアイテムがステージの外にあるかどうかを確認します。そうであれば、その位置を 0 にリセットして左に戻します。このようにして、アイテムが移動する連続ループがあります。右の方へ。問題は、私のやり方では、1 秒あたり 11 のトゥイーンが実行されているため、遅延が発生することです。アイテムをコンテナに入れてコンテナをトゥイーンすることを考えていましたが、そのときは連続した流れが得られないようです。これを解決する方法を知っている人はいますか?

また、最初の関数では、for ループを実行していることがわかります。numberItems変数は 11 を表しますが、アイテムの数はelementModel.elements6 しかないため、他の 5 つの要素については、配列から最初の 5 つのアイテムを再度選択します。問題は、これらの項目をトレースすると 0 になることです。以前のバージョンを上書きせずに、配列から項目を複数回取得するにはどうすればよいですか?

4

1 に答える 1

0

これにはtween liteを使用する必要はありません。moveItems 関数で行う必要があるのは、各項目を少し移動し (たとえば、elemtsArr[i].x += 5)、elementsArr[i].x > _width の場合は 0 に置き換えることだけです。

このようなものが動作するはずです:

function moveItems( e:TimerEvent ):void
{
    for (var i:int = 0; i < elemntsArr.length; i++)
    {
        elementsArr[i].x += 5;
        if (elementsArr[i].x > _width)
            elementsArr[i].x = 0;
    }
}
于 2011-02-15T22:26:55.173 に答える