リングバッファでやればいいと思います。
リストに、a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u 21駒の画像
で、a,b,c が盤面にあり、スクロールすると、b,c,d になります。更にスクロールすると、c,d,eになります。ここで、先頭の a を リストから取り除き、末尾に追加する。
c,d,e が見えてるときのリストは、b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,a
2駒盤面外に出たら1駒リスト先頭から末尾に移動させる。これを延々繰り返す。なんで、前後1駒余裕を持たせるかというと、盤面が縦3駒表示のとき、一瞬だけ3駒表示ですが、殆どの場合は4駒表示になるためです。
前後一コマ余裕があることで、正回転と逆回転両方に対応できます。
なので正確には、21駒あるとき、1駒目は、bにするのが正しくなりますね。裏で21駒のリストを管理して、表示用の5駒だけ毎回レンダリングさせれば無駄が無いのでは?と思います。
ついき
21駒は、現行?内規、時速何キロだったか思い出せません。
確か一周0.37 秒くらいだったような、、、
なんか、gcについての話なのに全然関係ないこと書いていますが、メモリ節約、既存メモリの使い回しによる有限資源の枯渇を防ぐには色々悩みますね。なので、destroy は破棄みたいな処理でしょうか、破棄ではなくてclear あたりが適当なのでは?と思います。5駒のイメージを1駒スクロールさせて、次の1駒スクロール用の5駒のイメージとスワップする。3リールあれば、5駒のイメージエリアが6つ必要になりますが、必要な資源は予め確保しておいて、動作中はなるべくメモリ確保なふぉは行わないようにできればメモリ利用効率も高くなり、動作も安定するのでは?と思います。クラスインスタンスやリストの確保などもメモリ確保になります。リストも実は内部の閾値を超えたときに新たに倍のメモリを確保する、というのをー延々繰り返します。
List list = new List(); よりも、最大容量がわかってるならば、new List(250); などとした方がメモリの分断も起きにくく、gcも掛かりにくくなります。
メモリ分断とは、
利用中、解放済み、利用中、利用中、解放済み、解放済み、利用中、、、、、、
みたいな状況です。gcはヒープ領域が少なくなると、解放済みエリアを圧縮して再配置することで未使用領域を広げようと頑張ります。頑張る時間だけ処理落ちになるのでメモリ管理は大事です。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/02/09 02:14