Project1

标题: [Window类问题]关于cursor_rect [打印本页]

作者: 九靈    时间: 2013-8-24 11:14
标题: [Window类问题]关于cursor_rect
本帖最后由 九靈 于 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类中
RUBY 代码复制
  1. #--------------------------------------------------------------------------
  2.   # ● 更新光标举行
  3.   #--------------------------------------------------------------------------
  4.   def update_cursor_rect
  5.           self.cursor_rect.empty
  6.       self.cursor_rect.empty
  7.  
  8.     # 光标位置不满 0 的情况下
  9.     if [url=home.php?mod=space&uid=370741]@Index[/url] < 0
  10.       self.cursor_rect.empty
  11.       return
  12.     end
  13.     # 获取当前的行
  14.     row = @index / @column_max
  15.     # 当前行被显示开头行前面的情况下
  16.     if row < self.top_row
  17.       # 从当前行向开头行滚动
  18.       self.top_row = row
  19.     end
  20.     # 当前行被显示末尾行之后的情况下
  21.     if row > self.top_row + (self.page_row_max - 1)
  22.       # 从当前行向末尾滚动
  23.       self.top_row = row - (self.page_row_max - 1)
  24.     end
  25.     # 计算光标的宽
  26.     cursor_width = self.width / @column_max - 32
  27.     # 计算光标坐标
  28.     x = @index % @column_max * (cursor_width + 32)
  29.     y = @index / @column_max * 32 - self.oy
  30.     # 更新国标矩形
  31.     self.cursor_rect.set(x, y, cursor_width, 32)
  32.   end

作者: 无脑之人    时间: 2013-8-24 11:44
cursor_rect是Window内置的没错……默认大小是0,0,0,0貌似= =每次empty之后也都是0,0,0,0……
设定左上角这个还真是不知道什么情况= =兰触说是是与给定的为位置有-16,-16的偏移
用多了你就会发现Window很坑啦……快去用Sprite……
作者: myownroc    时间: 2013-8-24 12:29
1.是.
2.表示左上角什么的没搞懂,但是没懂好象也没什么问题.
3.在默认脚本Window_Selectable找到115~121行,很明显,长度可变,高度默认情况下是32

发现你问这些问题很勤奋,这么继续下去是可以成功的.
到时候你可以整理一下你的脚本心得,在论坛上和大家分享.
作者: kuerlulu    时间: 2013-8-24 14:54
看到九靈就滚了进来、、
我来组成第二道题目答案:
首先由第三道答案看到默认是32
其实预置脚本中所有关于窗口中画图的(不管是bitmap也好)好像都写了个“32”
这个32指的是游戏中窗口图片的UI的边的宽度16*2(一个方向有两个边),而这样写就能防止矩形对象创建在窗口外部或者不对齐,不对齐就会自动在矩形边缘产生小箭头(截图就不弄了,你可以这样做:把物品栏显示窗口的height改成1/4大小,就看到了)。
确实搞懂了也没什么用。
作者: 九靈    时间: 2013-8-24 15:25
本帖最后由 九靈 于 2013-8-24 15:30 编辑
kuerlulu 发表于 2013-8-24 14:54
看到九靈就滚了进来、、
我来组成第二道题目答案:
首先由第三道答案看到默认是32


试着画了几张图看看对不对




还有cursor_rect是指哪个

还是

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

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





欢迎光临 Project1 (https://rpg.blue/) Powered by Discuz! X3.1