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

好的,感谢评论者的启发,这是我的解决方案:通过相同的环绕函数运行所有三个索引指针:

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 回答