设为首页收藏本站|繁體中文

Project1

 找回密码
 注册会员
搜索
查看: 1640|回复: 2

[已经解决] 请问:关于光标滚动的问题

[复制链接]

Lv3.寻梦者

梦石
0
星屑
3920
在线时间
254 小时
注册时间
2013-10-13
帖子
790
发表于 2021-10-22 15:05:00 | 显示全部楼层 |阅读模式

加入我们,或者,欢迎回来。

您需要 登录 才可以下载或查看,没有帐号?注册会员

x
  #--------------------------------------------------------------------------
  # ● 更新光标矩形
  #--------------------------------------------------------------------------
  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

请问:关于光标滚动的问题,应该怎么理解光标滚动的原理?

Lv4.逐梦者

梦石
0
星屑
7926
在线时间
1181 小时
注册时间
2007-7-29
帖子
2055
发表于 2021-10-23 13:22:13 | 显示全部楼层
你可以想象window是一个相框,content是一张画纸,这画纸比相框长很多,可是选择框理当只显示在相框内而非相框外。为了满足这样的显示,画纸会像打字机的纸那样往上移,但是我们得明确知道现在已经移到第几行了,所以就有了top_row。有了top_row这个相对坐标一切就好办多了,用当下的index换与top_row换算成对应坐标即可正确显示位置。比如一个window可以显示10行,你的content却有50行,你可以简单的用top_row = 10让滚动瞬间跳到content的第11行。总结:window_selectable操作滚动的关键就在top_row。

点评

谢谢指点  发表于 2021-10-24 15:53

评分

参与人数 1星屑 +50 收起 理由
RyanBern + 50 认可答案

查看全部评分

回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

站长信箱:[email protected]|手机版|小黑屋|无图版|Project1游戏制作

GMT+8, 2024-3-28 19:30

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表