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

Project1

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

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

[复制链接]

Lv1.梦旅人

梦石
0
星屑
170
在线时间
227 小时
注册时间
2011-5-19
帖子
736
跳转到指定楼层
发表于 2014-3-2 20:50:53 | 只看该作者 回帖奖励 |正序浏览 |阅读模式

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

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

x
新建了一个在地图上直接显示状态的窗口……
但是它的内容一直是不变的……怎么更新?

点评

用 update  发表于 2014-3-2 21:04
休息中……

Lv1.梦旅人

梦石
0
星屑
50
在线时间
24 小时
注册时间
2014-3-2
帖子
35
13
发表于 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.
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
170
在线时间
227 小时
注册时间
2011-5-19
帖子
736
12
 楼主| 发表于 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
11
发表于 2014-3-9 12:10:55 | 只看该作者
  1. def update
  2.   super
  3.   refresh if need_refresh?
  4. end

  5. def refresh
  6.   contents.clear
  7.   # 进行绘制操作
  8. end

  9. def need_refresh?
  10.   # 判断什么情况下需要重新绘制
  11.   # 例
  12.   # $game_variables[2] == true
  13. end
复制代码

评分

参与人数 1星屑 +3 收起 理由
xggzga117 + 3

查看全部评分

Request Time Out.
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
466 小时
注册时间
2013-2-8
帖子
424
10
发表于 2014-3-9 01:01:06 手机端发表。 | 只看该作者
本帖最后由 Sion 于 2014-3-9 16:20 编辑

先clear再draw。

评分

参与人数 1星屑 +3 收起 理由
xggzga117 + 3

查看全部评分

回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
170
在线时间
227 小时
注册时间
2011-5-19
帖子
736
9
 楼主| 发表于 2014-3-8 20:15:11 | 只看该作者
  def
  refresh
  if $game_variables[2] == true
    draw_shit1
    $game_switches[2] = false
  end
这样可以么?

点评

refresh if 开关打开,写进update里面  发表于 2014-3-8 20:45
休息中……
回复 支持 反对

使用道具 举报

Lv3.寻梦者 (版主)

…あたしは天使なんかじゃないわ

梦石
0
星屑
2208
在线时间
4033 小时
注册时间
2010-10-4
帖子
10779

开拓者贵宾

8
发表于 2014-3-5 09:39:00 | 只看该作者
(RGSS3)场景会自动更新其所有窗口实例变量,无需手动调用
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
92 小时
注册时间
2013-2-23
帖子
130
7
发表于 2014-3-5 04:13:39 | 只看该作者
Scene里面插这段?
  1. def update
  2.   super
  3.   @xxx(窗口名).refresh
  4. end
复制代码

点评

受教了  发表于 2014-3-5 17:50
非数组形式的窗口无需调用,Scene_base已经写好了,调用也是update不是refresh  发表于 2014-3-5 10:30
梦想是成为触手的新手DE☆SU(<ゝω·)绮罗星 ~☆
回复 支持 反对

使用道具 举报

Lv5.捕梦者 (暗夜天使)

只有笨蛋才会看到

梦石
1
星屑
21800
在线时间
9433 小时
注册时间
2012-6-19
帖子
7120

开拓者短篇九导演组冠军

6
发表于 2014-3-2 21:51:39 | 只看该作者
def update
super
draw_shit1 if 窗口的内容改变了
end

评分

参与人数 1星屑 +3 收起 理由
xggzga117 + 3

查看全部评分

回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
41 小时
注册时间
2014-2-17
帖子
8
5
发表于 2014-3-2 21:44:57 | 只看该作者
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
170
在线时间
227 小时
注册时间
2011-5-19
帖子
736
4
 楼主| 发表于 2014-3-2 21:17:29 | 只看该作者
我像这样加进去……
  #--------------------------------------------------------------------------
  # ● 更新画面
  #--------------------------------------------------------------------------
  def update
    super
    draw_shit1
  end
但是画面变成很多个重在一起,而且游戏变得很卡……怎么解决?
休息中……
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-12-20 03:18

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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