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

Project1

 找回密码
 注册会员
搜索
查看: 5536|回复: 10
打印 上一主题 下一主题

[原创发布] [又撞了]动态光标移动

[复制链接]

Lv1.梦旅人

梦石
0
星屑
55
在线时间
323 小时
注册时间
2010-8-21
帖子
666
跳转到指定楼层
1
发表于 2011-4-24 15:55:51 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

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

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

x
本帖最后由 沙漠点灰 于 2011-4-24 15:57 编辑

写完之后,发现有人发过了(又撞上了),反正没什么技术含量,就没署名地扔了上来
  1. #==============================================================================
  2. # ■ Rect
  3. #------------------------------------------------------------------------------
  4. #  矩形类
  5. #==============================================================================
  6. # 移动帧数,自己改
  7. Cursor_Rect_Move = 10
  8. class Rect
  9.   # 设置
  10.   alias old_set set unless Rect.method_defined? "old_set"
  11.   def set(x,y,w,h,de=false)
  12.     if @target_rect.is_a?(Rect)
  13.       return if @target_rect == Rect.new(x,y,w,h)
  14.     end
  15.     if de
  16.       @cursor_rect_move = Cursor_Rect_Move
  17.       @target_rect = Rect.new(x,y,w,h)
  18.     else
  19.       self.old_set(x,y,w,h)
  20.     end
  21.   end
  22.   # 刷新
  23.   def update
  24.     return unless @target_rect and @cursor_rect_move
  25.     return if @cursor_rect_move <= 0
  26.     x = (@target_rect.x - self.x) / @cursor_rect_move
  27.     y = (@target_rect.y - self.y) / @cursor_rect_move
  28.     w = (@target_rect.width - self.width) / @cursor_rect_move
  29.     h = (@target_rect.height - self.height) / @cursor_rect_move
  30.     @cursor_rect_move -= 1
  31.     self.old_set(x+self.x,y+self.y,w+self.width,h+self.height)
  32.   end
  33. end
  34. #==============================================================================
  35. # ■ Window_Base
  36. #------------------------------------------------------------------------------
  37. #  游戏中全部窗口的超级类。
  38. #==============================================================================

  39. class Window_Base < Window
  40.   #--------------------------------------------------------------------------
  41.   # ● 刷新画面
  42.   #--------------------------------------------------------------------------
  43.   def update
  44.     super
  45.     self.cursor_rect.update
  46.     # 如果窗口的外关被变更了、再设置
  47.     if $game_system.windowskin_name != @windowskin_name
  48.       @windowskin_name = $game_system.windowskin_name
  49.       self.windowskin = RPG::Cache.windowskin(@windowskin_name)
  50.     end
  51.   end
  52. end
  53. #==============================================================================
  54. # ■ Window_Selectable
  55. #------------------------------------------------------------------------------
  56. #  拥有光标的移动以及滚动功能的窗口类。
  57. #==============================================================================

  58. class Window_Selectable < Window_Base
  59.   #--------------------------------------------------------------------------
  60.   # ● 更新光标举行
  61.   #--------------------------------------------------------------------------
  62.   def update_cursor_rect
  63.     # 光标位置不满 0 的情况下
  64.     if @index < 0
  65.       self.cursor_rect.empty
  66.       return
  67.     end
  68.     # 获取当前的行
  69.     row = @index / @column_max
  70.     # 当前行被显示开头行前面的情况下
  71.     if row < self.top_row
  72.       # 从当前行向开头行滚动
  73.       self.top_row = row
  74.     end
  75.     # 当前行被显示末尾行之后的情况下
  76.     if row > self.top_row + (self.page_row_max - 1)
  77.       # 从当前行向末尾滚动
  78.       self.top_row = row - (self.page_row_max - 1)
  79.     end
  80.     # 计算光标的宽
  81.     cursor_width = self.width / @column_max - 32
  82.     # 计算光标坐标
  83.     x = @index % @column_max * (cursor_width + 32)
  84.     y = @index / @column_max * 32 - self.oy
  85.     # 更新国标矩形
  86.     self.cursor_rect.set(x, y, cursor_width, 32,true)
  87.   end
  88. end
  89. #==============================================================================
  90. # ■ Window_Message
  91. #------------------------------------------------------------------------------
  92. #  显示文章的信息窗口。
  93. #==============================================================================

  94. class Window_Message < Window_Selectable

  95.   #--------------------------------------------------------------------------
  96.   # ● 刷新光标矩形
  97.   #--------------------------------------------------------------------------
  98.   def update_cursor_rect
  99.     if @index >= 0
  100.       n = $game_temp.choice_start + @index
  101.       self.cursor_rect.set(8, n * 32, @cursor_width, 32,true)
  102.     else
  103.       self.cursor_rect.empty
  104.     end
  105.   end
  106. end
复制代码
脚本开头的
Cursor_Rect_Move = 10
自己可以改,这个就是要多少帧移动到目的地。
不过一定请注意下面的事情——
最后的
  1. class Window_Message < Window_Selectable

  2.   #--------------------------------------------------------------------------
  3.   # ● 刷新光标矩形
  4.   #--------------------------------------------------------------------------
  5.   def update_cursor_rect
  6.     if @index >= 0
  7.       n = $game_temp.choice_start + @index
  8.       self.cursor_rect.set(8, n * 32, @cursor_width, 32,true)
  9.     else
  10.       self.cursor_rect.empty
  11.     end
  12.   end
  13. end
复制代码
是事件中的选择项,如果您想使用本脚本,并且用了什么对话框加强的脚本而发生冲突的情况,可以:

1.直接删掉引用的那一段,不过对话框选择就没有动态的效果了

2.在对话框加强的脚本中搜索"self.cursor_rect.set(",找到之后把最后的 ")" 改为 ",true)"  即加一个参数"true"

另:本脚本适合所有拥有选择光标的窗口(因为直接修改Rect,很暴力....), 以上脚本插在Main前
>>猛戳>>MetalSagaR游戏主页<<这里<<
欢迎提供您的意见

Lv3.寻梦者

梦石
0
星屑
1347
在线时间
676 小时
注册时间
2009-11-11
帖子
2790
2
发表于 2011-4-24 17:32:07 | 只看该作者
就是替换原来的Rect 光标是吧,图片光标才是主流啊,研究研究

点评

我以为是图片光标  发表于 2011-4-24 18:45
图片光标? 直接移动x,y坐标就行了....  发表于 2011-4-24 17:39

嘿。嘿。嘿
回复 支持 反对

使用道具 举报

Lv2.观梦者


  • 更新完成啦

梦石
0
星屑
799
在线时间
6267 小时
注册时间
2006-6-7
帖子
8462
3
发表于 2011-4-25 20:31:38 | 只看该作者
赞!效果很好,于是疯狂的移动光标中= =顺便围观签名
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
111 小时
注册时间
2010-7-6
帖子
197
4
发表于 2011-4-25 22:08:13 | 只看该作者
表示读档、存档没效果

点评

读存档是4个窗口....当然没效果...  发表于 2011-4-26 17:06

广告位招租,有意请加QQ:928545621
回复 支持 反对

使用道具 举报

Lv1.梦旅人

弃坑的微博控

梦石
0
星屑
50
在线时间
548 小时
注册时间
2008-6-23
帖子
2114
5
发表于 2011-4-26 12:43:54 | 只看该作者
读档存档,菜单选择人物状态无效果。~~
效果挺好,但是感觉选择物品技能时,从右边移动到左下这点,感觉不是很美观,左右上下移动就很好,斜移动感觉没那么好看。

望修改。。。。。。。。(好吧,我又伸手了。)

点评

阁下认为"斜着"怎么移动好看...?  发表于 2011-4-26 17:15
《灵中那些事》停工很久了。..

回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
90
在线时间
308 小时
注册时间
2010-8-10
帖子
794
6
发表于 2011-4-26 12:48:17 | 只看该作者
能告诉我有什么用吗?我看了半天,没看出什么东东出来
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
1347
在线时间
676 小时
注册时间
2009-11-11
帖子
2790
7
发表于 2011-4-26 13:55:45 | 只看该作者
就是光标是移动的,而不是瞬间移动(七龙珠???)

嘿。嘿。嘿
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
55
在线时间
323 小时
注册时间
2010-8-21
帖子
666
8
 楼主| 发表于 2011-4-26 17:13:59 | 只看该作者
哦!原来很多类都有个set!
解决方法:全局搜索:      self.cursor_rect.set(
把最后的 “)" 改为 ",true)"  (不含引号)  即加一个参数 true

点评

- -  发表于 2011-4-26 18:12
已经有 ",true)" 的不用修改  发表于 2011-4-26 17:16
>>猛戳>>MetalSagaR游戏主页<<这里<<
欢迎提供您的意见
回复 支持 反对

使用道具 举报

Lv1.梦旅人

弃坑的微博控

梦石
0
星屑
50
在线时间
548 小时
注册时间
2008-6-23
帖子
2114
9
发表于 2011-4-26 23:00:49 | 只看该作者
我认为斜着的,应该先和刚调用的时候一样,先缩小,再到位置后再放大,而不是直接就那么大地移动过去。 可以么? - -

点评

理论可以,但实际上..........也可以  发表于 2011-4-27 18:18
《灵中那些事》停工很久了。..

回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
55
在线时间
323 小时
注册时间
2010-8-21
帖子
666
10
 楼主| 发表于 2011-4-27 18:17:45 | 只看该作者
针对斜着移动优化...:
  1. #==============================================================================
  2. # ■ Rect
  3. #------------------------------------------------------------------------------
  4. #  矩形类
  5. #==============================================================================
  6. # 移动帧数,自己改
  7. Cursor_Rect_Move = 10
  8. class Rect
  9.   # 设置
  10.   alias old_set set unless Rect.method_defined? "old_set"
  11.   def set(x,y,w,h,de=false)
  12.     if @target_rect.is_a?(Rect)
  13.       return if @target_rect == Rect.new(x,y,w,h) or @target_rect_i == Rect.new(x,y,w,h)
  14.     end
  15.     if de
  16.       if self.x != x and self.y != y
  17.         # 斜着
  18.         @inclined = true
  19.         @cursor_rect_move = Cursor_Rect_Move
  20.         @target_rect_i = Rect.new(x,y,w,h)
  21.         @target_rect = Rect.new(self.x,self.y,0,0)
  22.         
  23.       else
  24.         @inclined = false
  25.         # 横竖
  26.         @cursor_rect_move = Cursor_Rect_Move
  27.         @target_rect = Rect.new(x,y,w,h)
  28.       end
  29.     else
  30.       self.old_set(x,y,w,h)
  31.     end
  32.   end
  33.   # 刷新
  34.   def update
  35.     return unless @target_rect and @cursor_rect_move
  36.     @cursor_rect_move -= 1
  37.     if @cursor_rect_move <= 0 and @inclined
  38.       @cursor_rect_move = Cursor_Rect_Move
  39.       @target_rect = @target_rect_i.dup
  40.       @target_rect_i = nil
  41.       return @inclined = false
  42.     end
  43.     return if @cursor_rect_move <= 0
  44.     x = (@target_rect.x - self.x) / @cursor_rect_move
  45.     y = (@target_rect.y - self.y) / @cursor_rect_move
  46.     w = (@target_rect.width - self.width) / @cursor_rect_move
  47.     h = (@target_rect.height - self.height) / @cursor_rect_move
  48.     self.old_set(x+self.x,y+self.y,w+self.width,h+self.height)
  49.   end
  50. end
  51. #==============================================================================
  52. # ■ Window_Base
  53. #------------------------------------------------------------------------------
  54. #  游戏中全部窗口的超级类。
  55. #==============================================================================

  56. class Window_Base < Window
  57.   #--------------------------------------------------------------------------
  58.   # ● 刷新画面
  59.   #--------------------------------------------------------------------------
  60.   def update
  61.     super
  62.     self.cursor_rect.update
  63.     # 如果窗口的外关被变更了、再设置
  64.     if $game_system.windowskin_name != @windowskin_name
  65.       @windowskin_name = $game_system.windowskin_name
  66.       self.windowskin = RPG::Cache.windowskin(@windowskin_name)
  67.     end
  68.   end
  69. end
  70. #==============================================================================
  71. # ■ Window_Selectable
  72. #------------------------------------------------------------------------------
  73. #  拥有光标的移动以及滚动功能的窗口类。
  74. #==============================================================================

  75. class Window_Selectable < Window_Base
  76.   #--------------------------------------------------------------------------
  77.   # ● 更新光标举行
  78.   #--------------------------------------------------------------------------
  79.   def update_cursor_rect
  80.     # 光标位置不满 0 的情况下
  81.     if @index < 0
  82.       self.cursor_rect.empty
  83.       return
  84.     end
  85.     # 获取当前的行
  86.     row = @index / @column_max
  87.     # 当前行被显示开头行前面的情况下
  88.     if row < self.top_row
  89.       # 从当前行向开头行滚动
  90.       self.top_row = row
  91.     end
  92.     # 当前行被显示末尾行之后的情况下
  93.     if row > self.top_row + (self.page_row_max - 1)
  94.       # 从当前行向末尾滚动
  95.       self.top_row = row - (self.page_row_max - 1)
  96.     end
  97.     # 计算光标的宽
  98.     cursor_width = self.width / @column_max - 32
  99.     # 计算光标坐标
  100.     x = @index % @column_max * (cursor_width + 32)
  101.     y = @index / @column_max * 32 - self.oy
  102.     # 更新国标矩形
  103.     self.cursor_rect.set(x, y, cursor_width, 32,true)
  104.   end
  105. end
  106. #==============================================================================
  107. # ■ Window_Message
  108. #------------------------------------------------------------------------------
  109. #  显示文章的信息窗口。
  110. #==============================================================================

  111. class Window_Message < Window_Selectable

  112.   #--------------------------------------------------------------------------
  113.   # ● 刷新光标矩形
  114.   #--------------------------------------------------------------------------
  115.   def update_cursor_rect
  116.     if @index >= 0
  117.       n = $game_temp.choice_start + @index
  118.       self.cursor_rect.set(8, n * 32, @cursor_width, 32,true)
  119.     else
  120.       self.cursor_rect.empty
  121.     end
  122.   end
  123. end
复制代码
另:
全局搜索:      self.cursor_rect.set(
把最后的 “)" 改为 ",true)"  (不含引号)  即加一个参数 true
已经是 ",true)" 的不用修改
>>猛戳>>MetalSagaR游戏主页<<这里<<
欢迎提供您的意见
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-11-25 11:50

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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