Project1
标题:
请问:关于光标滚动的问题
[打印本页]
作者:
kvkv97
时间:
2021-10-22 15:05
标题:
请问:关于光标滚动的问题
#--------------------------------------------------------------------------
# ● 更新光标矩形
#--------------------------------------------------------------------------
def update_cursor_rect
# 光标位置不满 0 的情况下
if @index < 0
self.cursor_rect.empty
return
end
# 获取当前的行
row = @index / @column_max
# 当前行被显示开头行前面的情况下
if row < self.top_row
# 从当前行向开头行滚动
self.top_row = row
end
# 当前行被显示末尾行之后的情况下
if row > self.top_row + (self.page_row_max - 1)
# 从当前行向末尾滚动
self.top_row = row - (self.page_row_max - 1)
end
# 计算光标的宽度
cursor_width = self.width / @column_max - 32
# 计算光标坐标
x = @index % @column_max * (cursor_width + 32)
y = @index / @column_max * 32 - self.oy
# 更新光标矩形
self.cursor_rect.set(x, y, cursor_width, 32)
end
请问:关于光标滚动的问题,应该怎么理解光标滚动的原理?
作者:
enghao_lim
时间:
2021-10-23 13:22
你可以想象window是一个相框,content是一张画纸,这画纸比相框长很多,可是选择框理当只显示在相框内而非相框外。为了满足这样的显示,画纸会像打字机的纸那样往上移,但是我们得明确知道现在已经移到第几行了,所以就有了top_row。有了top_row这个相对坐标一切就好办多了,用当下的index换与top_row换算成对应坐标即可正确显示位置。比如一个window可以显示10行,你的content却有50行,你可以简单的用top_row = 10让滚动瞬间跳到content的第11行。总结:window_selectable操作滚动的关键就在top_row。
欢迎光临 Project1 (https://rpg.blue/)
Powered by Discuz! X3.1