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

Project1

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

[已经解决] refresh和update的具体用法和区别

[复制链接]

Lv3.寻梦者

梦石
0
星屑
2274
在线时间
562 小时
注册时间
2012-5-3
帖子
86

开拓者

跳转到指定楼层
1
发表于 2016-4-7 23:22:13 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

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

x
如题,求高手解答@RyanBern  

评分

参与人数 1星屑 +35 收起 理由
RyanBern + 35 手动认可奖励

查看全部评分

Lv4.逐梦者 (版主)

梦石
0
星屑
9532
在线时间
5073 小时
注册时间
2013-6-21
帖子
3580

开拓者贵宾剧作品鉴家

2
发表于 2016-4-7 23:43:20 | 只看该作者
本帖最后由 RyanBern 于 2016-4-9 08:37 编辑

在RGSS1中,refresh和update是两个常用的方法名称,它们出现在各个脚本当中。从字面含义上来看,refresh有“刷新”的含义,update则翻译成“更新”。似乎不是很好区分。但是,从他们所代表的方法上来看,二者表示的方法的本质是截然不同的,所以有必要做区分。很多脚本新手将需要写在update里的东西写在refresh,或者是反过来,这都是不熟悉RGSS1脚本约定导致的。

一般说来,update里面定义的方法,都是需要每一帧执行的方法。例如输入响应判断,窗口的光标闪烁,图片的位置等等。我们注意到这些语句都必须在每一帧执行,一个游戏必须时刻判断你的输入才能及时作出响应,必须连续更新窗口的光标才会有“闪烁”的效果。道理很简单,我们打开每一个Scene的脚本,都会看到如下的类似结构
RUBY 代码复制
  1. loop do
  2.   Graphics.update
  3.   Input.update
  4.   update
  5.   # ....
  6. end

如果转到update的定义,我们仍然看到的是对众多对象调用update方法。虽然会出现极个别的refresh方法,但是这些特殊情况我们放在后面说。

而在refresh中的语句,一般不需要每帧都执行,他们只是在需要执行的时候才执行。换句话说,refresh的调用不是实时的,一般只有在需要它的时候才会调用一次。如果将一些refresh放在update下,那么游戏会出现明显的卡顿。

各个窗口的定义中,都会有一个refresh方法,这个方法用于描绘窗口的内容。描绘操作需要消耗大量的时间,所以refresh一般只在窗口生成的时候调用一次,在其他时刻一般不调用。

通俗地讲,update是时刻都在调用,refresh是需要才会调用。

因此,这样的一个问题就出现了:如果我想在地图界面上显示一个窗口,窗口的里面描绘某变量的数值。描绘语句应属于refresh,而根据原则,refresh不能实时调用。那么,如果这个变量突然变化,那么这个窗口岂不是无法更新了吗?如果不能直接将refresh放在update中去,那么应该如何设置才能有实时更新的效果,而又不用实时调用refresh呢?

这是一个很好的问题,很多脚本新手应当先学会它。

我们可以给窗口设计一个变量,来表示当前所显示的数字,然后在update方法中,将这个变量不断和游戏全局变量比对,如果发现不等就调用refresh更新窗口。这样,我们不用时刻调用refresh,只要在需要更新的时候调用就行了。总之一句话,update里面不要放置计算量大或者消耗资源的操作,而像这种变量比较之类的,放在update里面一点问题也没有。

下面就是一个简单的例子,请体会update和refresh结合的效果。
RUBY 代码复制
  1. def update
  2.   if @gold != $game_party.gold
  3.     @gold = $game_party.gold
  4.     refresh
  5.   end
  6. end
  7. def refresh
  8.   self.contents.clear
  9.   self.contents.draw_text(4, 0, 64, 32, @gold.to_s)
  10. end

评分

参与人数 1梦石 +1 收起 理由
taroxd + 1 触瞎

查看全部评分

回复 支持 1 反对 0

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-9-22 13:41

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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