1

ユーザーが左または右に無限に閲覧できるアイコンで構成されるナビゲーションを備えた flashlite3 アプリケーションがあります。

私が使用している基本的なアルゴリズムは現在機能しています (このプロジェクトには十分です) が、ソリューションの一部はアイコンの配列の複製に依存しています。配列内のアイテムの数や要素の内容のサイズによっては、このソリューションの効率が低下する可能性があります。スケーラブルで効率的でありながら同じことを達成できるソリューションまたはアルゴリズム(任意の言語)に興味があります。

「_selectedItem」プロパティを変更するためのセッター関数の関連コードの一部を次に示します。

  1. 現在の「_selectedItem」と新しい「_value」を評価します
  2. ステップ 1 に基づいて pop,unshifts right または shift,pops left
  3. 「_selectedItem」に一致するアイコンが配列の中央に来るまで、ステップ 2 を繰り返します。

このコードは、3 つの配列を使用して実行されます。

  1. [静的] 位置の配列。5 つのアイコンがあり、一度に 3 つが表示されるため、位置 0 はオフ ステージ、位置 1 は 1/3、位置 2 は 1/2 です。
  2. アイコンをインスタンス化すると、_viewArray と _icons の 2 つの配列が作成されます。_viewArray の順序は表示される順序を模倣し、_icons はそのままにしてループ条件チェックに使用します

///Actionscript2///

    public function set selectedItem(value:Number)
    {
        var w=Stage.width;

        if(value > _icons.length-1)
        {
            value=0;
        }else if(value < 0)
        {
            value=_icons.length-1;
        }

        if(value > _selectedIndex)
        {
            while(_viewArray[Math.floor(_icons.length*.5)] != _icons[value])
            {
                var element;
                element=_viewArray.pop();
                _viewArray.unshift(element);
            }
        }else if(value < _selectedIndex)
        {
            while(_viewArray[Math.floor(_icons.length*.5)]!=_icons[value])
            {
                var element;
                element=_viewArray.shift();
                _viewArray.push(element);
            }           
        }




        for(var i:Number=0;i<_viewArray.length;i++)
        {
            if(i>=1 && i<= _icons.length-2)
            {
                _viewArray[i]._visible=true;
            }else
            {
                _viewArray[i]._visible=false;
            }
            Tweener.addTween(_viewArray[i],{_x:positions[i],_alpha:80,time:.5,transition:'elasticIn'})
        }


        Tweener.addTween(_icons[(_viewArray.length*.5)-1],{_alpha:100,time:.0,transition:'elasticIn'});
        Tweener.addTween(_selectedServiceIndicator,{_alpha:0,time:.3,transition:'elasticIn',onComplete:function() {Tweener.addTween(this,{_alpha:100,time:.2,transition:'elasticIn'});}});

        var eventObject:Object = {target:this, type:'SelectedItemChange'};
        eventObject.value=value;

        for(var key in _serviceData[value])
        eventObject[key]=_serviceData[value][key];

        dispatchEvent(eventObject);
        _selectedIndex=value;
    }
4

1 に答える 1

1

_viewArray の各要素が、_icons 配列へのインデックスだけでなく、実際にアイコンを格納する必要があるのはなぜですか? このようにして、アイコンを一度だけ保存し、_viewArray は表示順序を保存するだけです。

于 2009-04-25T16:39:03.990 に答える