Project1

标题: 请问如何使窗口中显示的变量在每次变量变化时更新? [打印本页]

作者: project999    时间: 2009-7-8 09:43
标题: 请问如何使窗口中显示的变量在每次变量变化时更新?
如金钱窗口改成显示变量,
在VX中好象可以用这个$scene.gold_window.refresh if $scene.is_a?(Scene_Map)
那么在XP中应该用什么?
(虽说XP和VX的Game_Variables似乎是一样的……)
作者: IamI    时间: 2009-7-8 09:45
一样啊……= =
gold_window的attr_accessor写了没有
作者: project999    时间: 2009-7-8 09:47
attr_accessor?
请问能说得清楚些吗,我脚本不怎么懂。
作者: project999    时间: 2009-7-8 09:50
attr_accessor?
请问能说得清楚些吗,我脚本不怎么懂。
project999 发表于 2009-7-8 09:47

(突然发现望了使用编辑功能了。。。以后在上面改)
作者: IamI    时间: 2009-7-8 09:55
写一个范例给你看算了,10min= =
作者: IamI    时间: 2009-7-8 10:08
←此人无良连贴,
不知道你之前的VX方法是怎么工作的……这里随手写了一个“主流”的变量监控,主要的是比较省CPU,因为只有变量改变的时候refresh了一次
PS:写的是在地图上的一个窗口,进入游戏即可看见
  1. #==============================================================================
  2. # ■ Window_Veri
  3. #------------------------------------------------------------------------------
  4. #  显示变量1的窗口。
  5. #==============================================================================
  6. # 说明:基本原理如下。Scene每帧调用一次这里的update方法,
  7. # update检查变量1是否改变,如果改变那么刷新画面。
  8. class Window_Veri < Window_Base
  9.   #--------------------------------------------------------------------------
  10.   # ● 初始化窗口
  11.   #--------------------------------------------------------------------------
  12.   def initialize
  13.     super(0, 0, 160, 64)
  14.     self.contents = Bitmap.new(width - 32, height - 32)
  15.     refresh
  16.   end
  17.   #--------------------------------------------------------------------------
  18.   # ● 刷新
  19.   #--------------------------------------------------------------------------
  20.   def refresh
  21.     #================加入===============
  22.     @lastvalue = $game_variables[1]
  23.     #===================================
  24.     self.contents.clear
  25.     self.contents.draw_text(self.contents.rect,$game_variables[1].to_s)
  26.   end
  27.   #--------------------------------------------------------------------------
  28.   # ● 重要,修改
  29.   #--------------------------------------------------------------------------
  30.   def update
  31.     refresh if @lastvalue != $game_variables[1]
  32.   end
  33.   #===========================================================================
  34. end
  35. # 下面是Scene_Map接入,
  36. # 如果你看不懂这段内容可以不看,
  37. # 注意上面的内容以及下面的Update即可
  38. class Scene_Map
  39.   alias old_main main
  40.   def main
  41.     @veri = Window_Veri.new
  42.     old_main
  43.     @veri.dispose
  44.   end
  45.   alias old_update update
  46.   def update
  47.     old_update
  48.     #==================重要=====================
  49.     @veri.update
  50.     #===========================================
  51.   end
  52. end
复制代码

作者: project999    时间: 2009-7-8 10:26
不行啊,其他地方也被改了,脚本出错
(有在事件里用的刷新方法么……)
作者: IamI    时间: 2009-7-8 10:41
事件刷新法就是按照之前的方法
先加脚本
class Scene_Map
attr_accessor :gold_window
end
然后就如LZ所说公共事件并行调用
$scene.gold_window.refresh if $scene.is_a?(Scene_Map)

不过……你有在Scene_Map里面加gold_window不……= =
作者: project999    时间: 2009-7-8 13:15
加了...




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