Project1
标题:
用脚本新建选项窗口的问题 修改问题
[打印本页]
作者:
jay999
时间:
2009-9-17 01:37
标题:
用脚本新建选项窗口的问题 修改问题
本帖最后由 jay999 于 2009-9-17 12:01 编辑
新建一个类F,定义了 类方法F.update 实例方法dispose 类方法F.main
学面向对象语言时间不长,求指教。谢谢。
谢谢楼下各位的回答,经过修改后,仍有问题
在游戏中执行脚本F.main时出错
没有找到方法.dispose for nil:nilclass
class F
。。。。。。
。。。。。。
def F.update
end
def dispose
end
def F.main
# 执行过渡
Graphics.transition
# 主循环
loop do
# 刷新游戏画面
Graphics.update
# 刷新输入信息
Input.update
# 刷新画面
F.update
# 如果画面被切换就中断循环
if $scene != self
break
end
end
# 装备过渡
Graphics.freeze
# 释放命令窗口
@command_window
.dispose
# 释放标题图形
@sprite.bitmap
.dispose
@sprite
.dispose
end
end
作者:
Eienshinken
时间:
2009-9-17 02:36
def方法名字不能加"."吧
没有定义的方法调用出错 .
会不会是不是那个点的缘故.
作者:
夏季冰川
时间:
2009-9-17 02:48
first.a?
定义的时候要用下划线,这个点MS是不允许的。
作者:
asperta
时间:
2009-9-17 03:06
直接添加一个Scene,默认脚本Scene找个复制一份修改下
然后类名要大写
这里不需要用类方法,实例方法就可以了
作者:
紫苏
时间:
2009-9-17 03:35
……才开始学面向对象,就不要这么快搞这种动态定义方法的东西嘛,不清楚 Ruby 的动态性质的话,很容易摸不着边,不如先仿照默认的脚本从最简单的类/实例方法写起
这其实是一个上下文环境的问题,你在 First.a(类名必须是大写字母开头的,因为要通过一个常量来引用类对象)中定义的方法会有和最外层方法相同的作用域,所以当你调用 First.a 后所定义的 update 和 dispose 方法实际上都是处在类的上下文中,相当于你在 Class ... end 之间直接定义,所以它们是属于对象的实例方法(除非你也在方法名前加上 First 或者 Self 来修饰)。然而你后面直接在类的上下文中就开始了主循环,并调用 update 方法,那自然是找不到的,因为你定义的 update 方法(虽然我没看到你在哪里调用的 First.a)并不在类上下文中。所以你应该把最后一段内容放在一个实例方法中,比如 def main ... end,这样在执行 main 的时候,其上下文就和先前定义的 update 和 dispose 一致了~
至于最后红色的那几个 dispose 跟这个不沾边,那些都是 RGSS 预定义的方法(Window、Sprite、Bitmap 等类的方法),要出错也只有可能是因为前面的接收者指向 nil(除非你刻意去反定义这些类的 dispose 方法)
欢迎光临 Project1 (https://rpg.blue/)
Powered by Discuz! X3.1