查看: 2252|回复: 6

[已经解决] [Window类问题]关于cursor_rect

[复制链接]
梦石
0
星屑
49
在线时间
157 小时
注册时间
2013-8-14
回帖
155
发表于 2013-8-24 11:14:25 | 显示全部楼层 |阅读模式

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

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

×
本帖最后由 九靈 于 2013-8-25 16:24 编辑

帮助(F1)中 :
Window类 :
cursor_rect
光标的矩形(Rect)。以(-16,-16)的相对座标指定窗口的左上角。


问题 :
1. cursor_rect 这个矩形是在生成Window类(或其子类)的实例时同时建立(生成)的吗?
   因为到处都没看到哪里有cursor_rect = Rect.new(...) 这个东西......
2. "以(-16,-16)的相对座标指定窗口的左上角。" 这句是啥意思? 还有为啥是(-16,-16)?
3. cursor_rect 有默认大小吗? 有的话是多少?
   我看到的都是 xxx.cursor_rect.set(...)

像是Window_Selectable类中
[pre lang="ruby" line="1"]  #--------------------------------------------------------------------------
  # ● 更新光标举行
  #--------------------------------------------------------------------------
  def update_cursor_rect
          self.cursor_rect.empty
      self.cursor_rect.empty

    # 光标位置不满 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
[/pre]
梦石
0
星屑
122
在线时间
552 小时
注册时间
2012-8-18
回帖
1392
发表于 2013-8-24 11:44:08 | 显示全部楼层
cursor_rect是Window内置的没错……默认大小是0,0,0,0貌似= =每次empty之后也都是0,0,0,0……
设定左上角这个还真是不知道什么情况= =兰触说是是与给定的为位置有-16,-16的偏移
用多了你就会发现Window很坑啦……快去用Sprite……

评分

参与人数 1星屑 +80 收起 理由
︶ㄣ牛排ぶ + 80 认可答案

查看全部评分

我要填坑!我要背单词!我要学日语!我要每天锻炼!
好吧呵呵= =
回复

使用道具 举报

梦石
0
星屑
2826
在线时间
2634 小时
注册时间
2013-1-16
回帖
5453

贵宾

发表于 2013-8-24 12:29:23 | 显示全部楼层
1.是.
2.表示左上角什么的没搞懂,但是没懂好象也没什么问题.
3.在默认脚本Window_Selectable找到115~121行,很明显,长度可变,高度默认情况下是32

发现你问这些问题很勤奋,这么继续下去是可以成功的.
到时候你可以整理一下你的脚本心得,在论坛上和大家分享.

点评

等我学完再找时间分享吧  发表于 2013-8-24 15:24
GJ!  发表于 2013-8-24 14:11
(Created by @喵kano)


施工现场:hotege.github.io
回复

使用道具 举报

梦石
0
星屑
76
在线时间
1379 小时
注册时间
2012-7-5
回帖
1643

开拓者

发表于 2013-8-24 14:54:41 | 显示全部楼层
看到九靈就滚了进来、、
我来组成第二道题目答案:
首先由第三道答案看到默认是32
其实预置脚本中所有关于窗口中画图的(不管是bitmap也好)好像都写了个“32”
这个32指的是游戏中窗口图片的UI的边的宽度16*2(一个方向有两个边),而这样写就能防止矩形对象创建在窗口外部或者不对齐,不对齐就会自动在矩形边缘产生小箭头(截图就不弄了,你可以这样做:把物品栏显示窗口的height改成1/4大小,就看到了)。
确实搞懂了也没什么用。

评分

参与人数 1星屑 +80 收起 理由
︶ㄣ牛排ぶ + 80 认可答案

查看全部评分


  -fk: -azogi:
回复

使用道具 举报

梦石
0
星屑
49
在线时间
157 小时
注册时间
2013-8-14
回帖
155
 楼主| 发表于 2013-8-24 15:25:35 | 显示全部楼层
本帖最后由 九靈 于 2013-8-24 15:30 编辑
kuerlulu 发表于 2013-8-24 14:54
看到九靈就滚了进来、、
我来组成第二道题目答案:
首先由第三道答案看到默认是32


试着画了几张图看看对不对
2013-08-24_140151.png
2013-08-24_142027.png
2013-08-24_142106.png
未标题-1.jpg
还有cursor_rect是指哪个
546.jpg
还是
132.jpg

点评

手绘好评!最后一张图目测是对的,仅目测求正解。  发表于 2013-8-24 15:31
回复

使用道具 举报

孤独守望

梦石
0
星屑
3144
在线时间
1535 小时
注册时间
2006-10-16
回帖
4223

开拓者贵宾

发表于 2013-8-24 16:55:58 | 显示全部楼层
在window里画东西总不能画到边上,把窗口自己的边线图形压到了吧……
所以在XP中,默认了图形有上下左右各16个像素的宽限。
self.contents = Bitmap.new(self.width - 32,self.height - 32)
是常见的做法,使得图像显示不会压到图形的边线,而指定“工作区(ClientRectangle)”
顺带一提上面提到的在四侧的四个小箭头,是表示contents大于上述的约定尺寸,图形没有完全显示,你可以变更窗体的ox和oy来改变显示的角度。

评分

参与人数 1星屑 +80 收起 理由
︶ㄣ牛排ぶ + 80 认可答案

查看全部评分

菩提本非树,明镜本非台。回头自望路漫漫。不求姻缘,但求再见。
本来无一物,何处惹尘埃。风打浪吹雨不来。荒庭遍野,扶摇难接。
不知道多久更新一次的博客
回复

使用道具 举报

梦石
0
星屑
49
在线时间
157 小时
注册时间
2013-8-14
回帖
155
 楼主| 发表于 2013-8-24 17:32:54 | 显示全部楼层
IamI 发表于 2013-8-24 16:55
在window里画东西总不能画到边上,把窗口自己的边线图形压到了吧……
所以在XP中,默认了图形有上下左右各1 ...

事实上我们讨论的是cursor_rect 这个Rect 在生成Window类(或其子类)的实例时,默认会产生一个该实例(窗口)所有的cursor_rect ,
然后这个默认的cursor_rect 的默认位置及大小是什么?
并不在讨论画图的问题,而是cursor_rect 的默认位置及大小的问题。
目前考虑默认在窗口的边上(最后一张图),还没到画图阶段
回复

使用道具 举报

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

本版积分规则

Powered by Discuz! X5.0 © 2001-2026 Discuz! Team.

在本版发帖返回顶部