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