0

曲を再生して画像を表示するために書いているプログラムがあります。現在、画像はファイル システムに保存され、左または右から画面にスライドする直前にメモリに読み込まれます。画像が非常に大きいため、これには時間がかかり、UI で遅延が発生します。デバイスの限られたビデオ メモリに数枚の画像しか保存できません。私がやりたいのは、画面上の表示から数ステップ以上離れた画像がメモリからアンロードされる配列を持つことです。ただし、配列を円として扱いたいと思います。ゼロに達すると、停止するのではなく、配列の反対側に移動します。

[unloaded,unloaded,image,image,image (on screen),image,image image,unloaded,unloaded]

上記のように配列の真ん中にいた場合、-3 要素と +3 要素をいつでも削除できます。それをループとして扱うために、ロジックはどのように機能しますか? これを処理するエレガントな if/then 構造を思いつくのに苦労しています。ループとして扱われていない場合、右に移動すると、コードは次のようになります。

if msg=event.right_button_pressed then
    currentindex=currentindex+1
    lowindex=currentindex-3
    highindex=currentindex+3
    array[lowindex]=invalid
    array[highindex]=loadimagefromdisk()
    screen.drawobject(array[currentindex])
end if

配列の範囲を超えている場合に、配列の末尾へのロードおよびアンロードポインターのラップを処理する簡単な方法を誰かが提案できますか?

currentindex は次のようにラップされます:

if currentindex > array.count() -1 then currentindex=0
if currentindex < 0 then currentindex=array.count() - 1
4

1 に答える 1

1

わかりました、コメンターからのインスピレーションのおかげで、これが私の解決策です:同じラップアラウンド関数を介して3つのインデックスポインターすべてを実行します:

playindex = wrap(playindex,playlist.count() - 1)
highindex = wrap(highindex,playlist.count() - 1)
lowindex = wrap(lowindex,playlist.count() - 1)

function wrap(p as integer, count as integer) as integer
    if p > count then p = 0
    if p < 0 then p = count
    return p
end function
于 2013-03-04T10:32:14.257 に答える