楼主: xggzga117

[已经解决] 如何让窗口更新……

[复制链接]
梦石
0
星屑
196
在线时间
229 小时
注册时间
2011-5-19
回帖
647
 楼主| 发表于 2014-3-9 14:27:39 | 显示全部楼层
本帖最后由 xggzga117 于 2014-3-9 14:29 编辑

嗯成功了!把相关脚本发上来……
  #--------------------------------------------------------------------------
  # ● 更新画面
  #--------------------------------------------------------------------------
  def update
    contents.clear if $game_switches[2] == true
    draw_shit1 if $game_switches[2] == true
  end
  #--------------------------------------------------------------------------
  # ● 刷新
  #--------------------------------------------------------------------------
  def refresh
    draw_shit1
  end
……顺手把我自己做的东西也传上来吧。(PS.11号角色的名字就是斜杠)
  #--------------------------------------------------------------------------
  # ● 生成窗口内容
  #--------------------------------------------------------------------------
  def draw_shit1
    draw_text(0, 0, 640, 24, $game_map.display_name)
    draw_text(0, 24, 640, 24, $game_actors[12].name)
    draw_text(64, 24, 640, 24, Vocab::hp_a)
    draw_text(96, 24, 640, 24, $game_actors[12].hp)
    draw_text(136, 24, 640, 24, $game_actors[11].name)
    draw_text(160, 24, 640, 24, $game_actors[12].mhp)
    draw_text(240, 24, 640, 24, Vocab::mp_a)
    draw_text(272, 24, 640, 24, $game_actors[12].mp)
    draw_text(312, 24, 640, 24, $game_actors[11].name)
    draw_text(336, 24, 640, 24, $game_actors[12].mmp)
  end
end
休息中……
回复

使用道具 举报

梦石
0
星屑
50
在线时间
24 小时
注册时间
2014-3-2
回帖
28
发表于 2014-3-9 16:12:00 | 显示全部楼层
本帖最后由 影月千秋 于 2014-3-9 16:13 编辑
xggzga117 发表于 2014-3-9 14:27
嗯成功了!把相关脚本发上来……
  #------------------------------------------------------------------ ...


楼主你发现没有,三个方法update refresh draw_shit1 他们的调用关系是这样的:
001.png

右上角那个蓝色的块是 contents

没有一个方法调用refresh 也就是说 那是一个完全没有用处的方法

怎么会这样呢?

分析一下我们的本意  应该是这样的吧:

外部 => update => refresh => draw_shit1

所以 应该把update调整一下
[pre lang="ruby" line="1"]def update
  contents.clear if $game_switches[2] == true
  refresh if $game_switches[2] == true
end[/pre]


另外 如果只有一个语句,使用if修饰符很简洁,比如 do if need_to_do

但是 需要执行两个语句时 还是合并在一起吧

把update再微调:
[pre lang="ruby" line="1"]def update
  if $game_switches[2] == true
    contents.clear
    refresh
  end
end[/pre]


这样是推荐的一般写法

当然 还有两种写法 比较灵活
其一其二
因为整个update方法只有一个判定:如果满足 执行 不满足 什么也不做
我们可以让这个更直观
如果不满足 什么也不做
这算是比较取巧的做法 不推荐使用 但值得了解
本质是构建数组时进行的求值
[pre lang="ruby" line="1"]def update
  return if $game_switches[2] != true
  contents.clear
  refresh
end[/pre]
[pre lang="ruby" line="1"]def update
  [contents.clear, refresh] if $game_switches[2] == true
end[/pre]



=======================================
还有什么没有说?

我推荐把contents.clear放进refresh里 因为那也是重绘的一部分
整体就是这样
[pre lang="ruby" line="1"]def update
  draw_shit1 if $game_switches[2]
end
def refresh
  contents.clear
  draw_shit1
end
# def contents.clear省略[/pre]

注意到了draw_shit1 if $game_switches[2]吗?
在这里,它和draw_shit1 if $game_switches[2] == true是等价的
但本质上有一点微妙的区别
但是 对于保存真伪值(true false)的变量  影响不是很大  一般都能混用

点评

要不要顺便$game_switches[2] = false直到下次打开。。。  发表于 2014-3-12 07:37
……了解。  发表于 2014-3-9 16:25

评分

参与人数 1梦石 +1 收起 理由
迷糊的安安 + 1 ……了解

查看全部评分

Request Time Out.
回复

使用道具 举报

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

本版积分规则

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

在本版发帖返回顶部