2009-04-25 8 views
1

私はflashlite3アプリケーションを持っています。このアイコンは、ユーザーが無限に左右にブラウズできるアイコンで構成されています。コピーを持たない配列スタックアルゴリズム

私が使っている基本的なアルゴリズムはうまく動作しますが(このプロジェクトには適していますが)、解決策の一部はアイコンの配列の複製に依存します。配列内の項目数や要素内容のサイズによっては、このソリューションの効率が低下する可能性があります。私は効率的にスケーラブルな&が実行されている間に同じことを達成できるソリューションまたはアルゴリズム(あらゆる言語で)に興味があります。相続人

「_selectedItem」プロパティを変異用セッター関数に関連するコードの部分、どの:

  1. ステップ1ポップに基づいて、現在の「_selectedItem」および新しい「_value」
  2. を評価し、

    「_selectedItem」に一致するアイコンが配列

の中心になるまで、右、またはシフトunshiftsは、ポップが

  • 繰り返しステップ2を左このコードは、3つのアレイを使用して実行します
    1. [静的]位置の配列です。 5つのアイコンがあり、3つは一度に表示されるため、位置0はオフステージ、位置1は1/3、位置2は1/2です。
    2. アイコンをインスタンス化すると、_viewArray&_iconsが2つ作成されます。 _viewArray模倣の順に表示される順序と_iconsは放置と_viewArrayの各要素が有するない理由

    /// /// 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; 
        } 
    
  • 答えて

    1

    をチェックするループ条件のために使用されます_icons配列にインデックスだけでなく、実際にアイコンを格納するには?この方法では、一度アイコンを保存するだけで、_viewArrayはプレゼンテーションオーダーを保存します。

    +0

    Yevgeny、それは良い点です。その方法を使用すると、DisplayObjectの重複を保存するよりも効率的になります。また、AS2 ... MovieClipsにもあります。 –

    関連する問題