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

Project1

 找回密码
 注册会员
搜索
12
返回列表 发新帖
楼主: xggzga117
打印 上一主题 下一主题

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

[复制链接]

Lv1.梦旅人

梦石
0
星屑
170
在线时间
227 小时
注册时间
2011-5-19
帖子
736
11
 楼主| 发表于 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
休息中……
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
24 小时
注册时间
2014-3-2
帖子
35
12
发表于 2014-3-9 16:12:00 | 只看该作者
本帖最后由 影月千秋 于 2014-3-9 16:13 编辑
xggzga117 发表于 2014-3-9 14:27
嗯成功了!把相关脚本发上来……
  #------------------------------------------------------------------ ...


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


右上角那个蓝色的块是 contents

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

怎么会这样呢?

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

外部 => update => refresh => draw_shit1

所以 应该把update调整一下
RUBY 代码复制
  1. def update
  2.   contents.clear if $game_switches[2] == true
  3.   refresh if $game_switches[2] == true
  4. end



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

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

把update再微调:
RUBY 代码复制
  1. def update
  2.   if $game_switches[2] == true
  3.     contents.clear
  4.     refresh
  5.   end
  6. end



这样是推荐的一般写法

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



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

我推荐把contents.clear放进refresh里 因为那也是重绘的一部分
整体就是这样
RUBY 代码复制
  1. def update
  2.   draw_shit1 if $game_switches[2]
  3. end
  4. def refresh
  5.   contents.clear
  6.   draw_shit1
  7. end
  8. # def contents.clear省略


注意到了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.
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-12-20 02:49

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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