查看: 2893|回复: 8

[已经解决] 关于Game_System的问题

[复制链接]
梦石
0
星屑
15080
在线时间
1581 小时
注册时间
2012-7-24
回帖
1246
发表于 2014-2-12 20:43:10 | 显示全部楼层 |阅读模式

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

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

×
本帖最后由 化螺耕 于 2014-2-13 16:58 编辑

在看的时候有几个地方看不大懂,特来求教各位大大
1.[pre lang="ruby" line="1"]    @map_interpreter = Interpreter.new(0, true)
    @battle_interpreter = Interpreter.new(0, false)
    @timer = 0[/pre]请问这里的0都是什么意思呐??
2.[pre lang="ruby" line="1"]  def update
    # 计时器减 1
    if @timer_working and @timer > 0
      @timer -= 1
    end
  end[/pre]这里在判断计时器是否工作的时候不应该是if @timer_working = true and @timer > 0吗,而且为什么计时器减一就能起到刷新画面的作用呢??

欢迎大家加我
梦石
0
星屑
170
在线时间
809 小时
注册时间
2013-8-23
回帖
773

开拓者

发表于 2014-2-12 22:05:07 | 显示全部楼层
Interpreter.new(0, true)
这里的0是一个参数,下面是interpreter类的初始化,可以看到Interpreter.new需要两个参数,0在interpreter类中参与运算
  def initialize(depth = 0, main = false)
    @depth = depth
    @Main = main
    # 深度超过 100 级
    if depth > 100
      print("调用公用事件超过了限制。")
      exit
    end
    # 清除注释器的内部状态
    clear
  end

评分

参与人数 1星屑 +90 收起 理由
myownroc + 90 认可答案

查看全部评分

遗失的签名。。。
回复

使用道具 举报

梦石
0
星屑
170
在线时间
809 小时
注册时间
2013-8-23
回帖
773

开拓者

发表于 2014-2-12 22:11:02 | 显示全部楼层
scene_map第57行调用Game_System的update方法
这个调用在scene_map的主循环里,也就是说他会不断地被调用,从而实现画面刷新时计时器减一,并不是计时器减一实现了画面的刷新
遗失的签名。。。
回复

使用道具 举报

梦石
0
星屑
15080
在线时间
1581 小时
注册时间
2012-7-24
回帖
1246
 楼主| 发表于 2014-2-12 23:12:28 | 显示全部楼层
冰水金刚 发表于 2014-2-12 22:11
scene_map第57行调用Game_System的update方法
这个调用在scene_map的主循环里,也就是说他会不断地被调用, ...

哦哦,我明白了许多,不过仍旧有些地方不太明白。。。。就是@timer = 0是什么意思,为什么在画面进行刷新时就要将计时器减一呢?呃……还有在我贴的第二段代码里,不是if @timer_working = true呢?而是直接省略了= true…………不好意思,我的疑问多了点

点评

@timer_working是一个变量,它本身可能具有两个值,true或false @time是将0赋值给@time实变量,此时@time的值就为0了  发表于 2014-2-13 10:20

欢迎大家加我
回复

使用道具 举报

梦石
0
星屑
50
在线时间
466 小时
注册时间
2013-2-8
回帖
420
发表于 2014-2-13 00:53:27 来自手机 | 显示全部楼层
= 可是赋值。

点评

就是把true或false赋值给@timer实变量吧。。。。  发表于 2014-2-13 16:55
回复

使用道具 举报

梦石
0
星屑
111
在线时间
395 小时
注册时间
2011-4-24
回帖
272
发表于 2014-2-13 01:18:33 | 显示全部楼层
本帖最后由 ZAndiH 于 2014-2-13 16:05 编辑
化螺耕 发表于 2014-2-12 15:12
哦哦,我明白了许多,不过仍旧有些地方不太明白。。。。就是@timer = 0是什么意思,为什么在画面进行刷新 ...


<del>判断语句中,零为假,非零一律为真。所以可以直接检测@timer是否为零达到判断的效果。</del>

多谢@无脑之人 指正,【Ruby里面只有nil和false是假,其余为真,包括0】

点评

学C的吧,Ruby里面只有nil和false是假,其余为真,包括0  发表于 2014-2-13 17:19

评分

参与人数 1星屑 +90 收起 理由
myownroc + 90 认可答案

查看全部评分

[color=DarkRed][b][url=http://rpg.blue/thread-177237-1-1.html]《RM——梦想与现实之间》[/url][/b][/color]【论坛活动】《RM到底能做什么》
[b]↑想知道如何快速获得[color=Red]60VIP[/color]?请点↑[/b]
回复

使用道具 举报

梦石
0
星屑
76
在线时间
1379 小时
注册时间
2012-7-5
回帖
1643

开拓者

发表于 2014-2-13 09:54:35 | 显示全部楼层
本帖最后由 kuerlulu 于 2014-2-13 21:24 编辑

只要if后面的对象返回的不是nil或false就行= =
a = ""
if a then p "a is true" end # 这里的a返回了""根据规则它也是true的
至于计时器减一并不能刷新画面,真正刷新画面的是Graphics.update,计时器减一是记录下每一次Graphics.update,然后取差值就能计算总时间了。
至于(0, true)属于参数传递,沙发已解释清楚

点评

if后面的表达式可以返回任何值,if判断的是真假而不是true/false  发表于 2014-2-13 17:18

评分

参与人数 1星屑 +90 收起 理由
myownroc + 90 认可答案

查看全部评分


  -fk: -azogi:
回复

使用道具 举报

梦石
0
星屑
2826
在线时间
2634 小时
注册时间
2013-1-16
回帖
5453

贵宾

发表于 2014-2-13 14:12:53 | 显示全部楼层
1.沙发说的很明白了...
2.判断是if a == true(我也经常出错= =)可以写成if a.即if a == true 与 if a 是等价的....

点评

↓好吧,我受VB影响比较深= =  发表于 2014-2-14 13:12
不等价,前者必须是true才能执行,后者不是nil或false就能执行,这个问题很严重,在ruby里面并不是严格返回true和false的,经常返回实例和nil  发表于 2014-2-13 17:18
(Created by @喵kano)


施工现场:hotege.github.io
回复

使用道具 举报

梦石
0
星屑
15080
在线时间
1581 小时
注册时间
2012-7-24
回帖
1246
 楼主| 发表于 2014-2-13 16:57:44 | 显示全部楼层
谢谢楼上几位,我都明白啦{:2_275:}

欢迎大家加我
回复

使用道具 举报

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

本版积分规则

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

在本版发帖返回顶部