Project1

标题: 自己写的一段脚本,有毛病,求高手修正。 [打印本页]

作者: cymcrh55    时间: 2009-7-26 14:07
提示: 作者被禁止或删除 内容自动屏蔽
作者: havealook    时间: 2009-7-26 14:09
出的错误是什么.....
好久没用脚本了...堕落了,也懒得一个个看
作者: 奶油Da蛋糕    时间: 2009-7-26 14:13
17行,NOMETHO```
作者: IamI    时间: 2009-7-26 15:16
类里面可不能直接写代码
作者: 后知后觉    时间: 2009-7-26 17:35
本帖最后由 后知后觉 于 2009-7-26 17:37 编辑

1.
class
end
你的窗口类貌似少了个end

2.默认脚本自带命令窗口类 你定义的这个类 就目前的情况来说 没有必要存在
3.Scene类 要有个main方法才行
class Scene_xxx
def main
生成对象
Graphics.transition
loop do
Graphics.update
Input.update
update
break if $scene != self
end
Graphics.freeze
释放对象
end
def update
刷新等数据处理
end
end
以上非汉字部分基本上上就是一个Scene类的固定格式
作者: 奶油Da蛋糕    时间: 2009-7-26 17:40
类里面可不能直接写代码
IamI 发表于 2009-7-26 15:16

还是不懂,到底哪里是"直接用代码"?

PS.楼主是我马甲。
作者: 风雪优游    时间: 2009-7-26 17:42
我一般都是拿着已有的脚本胡乱改的,自己写可不会,LZ继续加油吧
作者: ★_茄孓    时间: 2009-7-26 18:11
class
end
里不能直接写代码,要用到函数!
如你 Window_information 的时候里面有
def initialize(xinxi)
代码..
end
def xinxi
代码..
end
定义class Window_information少了个end
定义class Scene_information
代码要写在函数内.
def main是调用改类时系统自动运行的.可以把代码写在其他函数,然后放在这里面调用.
作者: 奶油Da蛋糕    时间: 2009-7-26 18:15
1.
class
end
你的窗口类貌似少了个end

2.默认脚本自带命令窗口类 你定义的这个类 就目前的情况来说 没有必要存在
3.Scene类 要有个main方法才行
class Scene_xxx
def main
生成对象
Graphics.transition
loop do
...
后知后觉 发表于 2009-7-26 17:35















谢谢,我改成这样了,还遇到一个问题,就是在召唤这个脚本菜单的时候($scene = Scene_information.new)。第37行case @command_window.index发生了NOMETHOD。
可能还需要一些解决措施。
  1. class Window_information < Window_Base
  2. def initialize(xinxi)
  3.   super(0, 0, 480, 480)
  4.   self.contents = Bitmap.new(width - 32, height - 32)
  5.   xinxi
  6. end
  7. end

  8. def xinxi
  9.   s1="剧情任务"
  10.   s2="剧情属性"
  11.   s3="人际交友"
  12.     @command_window = Window_Command.new(160, [s1, s2, s3])
  13.     @command_window.index = @menu_index
  14. end

  15. class Scene_information
  16. def main
  17.    Graphics.transition
  18. loop do
  19. Graphics.update
  20. Input.update
  21. update
  22. break if $scene != self
  23. end
  24. Graphics.freeze
  25. end
  26. def update

  27.   if Input.trigger?(Input::C)
  28.     $game_system.se_play($data_system.decision_se)
  29.     @cs_window = Window_information.new(@command_window.index)
  30.     @cs_window.x = 160
  31.     @command_window.active = false
  32.     return
  33.   end
  34.           case @command_window.index
  35.       when 0
  36.         $scene = Scene_Task.new
  37.       when 1
  38.         $scene = Scene_atb.new
  39.       when 2  
  40.         $scene = Scene_frd.new
  41.       end
  42.       return
  43.     end
  44.   if Input.trigger?(Input::B)
  45.     $game_system.se_play($data_system.cancel_se)
  46.     $scene = Scene_Map.new
  47.     return
  48.   end
  49. else
  50.   if Input.trigger?(Input::B)
  51.     $game_system.se_play($data_system.cancel_se)
  52.     @cs_window.dispose
  53.     @command_window.active = true
  54.     return
  55.   end
  56. end
复制代码

作者: ★_茄孓    时间: 2009-7-26 18:24
你的xinxi函数是写在类外,不过也是可以,至于有什么不好我也不大清楚...
问题是你没有调用xinxi函数,所以(@command_window这个对象没有产生...
在def main里要调用xinxi函数
def main
xinxi
   Graphics.transition

loop do
.....

作者: 奶油Da蛋糕    时间: 2009-7-26 19:12
我只是自定义了一个Window_Base的子类,但是这竟然影响到Windows_Selectable,它说Windows_Selectable的第99行发生了NoMeThod
undefined method '<’ for nil:NilClass
作者: ONEWateR    时间: 2009-7-26 20:15
@command_window.index = @menu_index

@menu_index 没有定义~
作者: 奶油Da蛋糕    时间: 2009-7-26 20:34
@command_window.index = @menu_index

@menu_index 没有定义~
ONEWateR 发表于 2009-7-26 20:15

定义了之后仍然提示Windows_Selectable的第99行发生了NoMeThod
undefined method '<’ for nil:NilClass咋办?
作者: 后知后觉    时间: 2009-7-26 23:28
本帖最后由 后知后觉 于 2009-7-26 23:59 编辑

@menu_index是物品 特技 装备 状态 存档 游戏结束 这几个场景返回菜单场景
的时候传递给Scene_Menu的参数
这个东西是在Scene_Menu里面 你却在自己新定义的scene里使用当然会出错
而且这个东西也没有意义传递给你的这个新定义的scene
这个东西是返回菜单的时候传递给菜单的 你却把它逆向了……
你的def xinxi是定义在 class~end之外的
我上面也说了你的那个窗口类根本就没有存在的价值,就目前的东西来说的确是这样的

最基本的语法你都还没明白
自己还是小修小改熟悉了语法,了结了什么叫【对象】以后在
慢慢的开始【自己编写】脚本吧
学这东西要有耐心,急于求成会走很多弯路浪费很多时间
没有牢固的地基,是建不起高楼的~
  1. class Scene_information
  2.   def main
  3.     s1="剧情任务"
  4.     s2="剧情属性"
  5.     s3="人际交友"
  6.     @command_window = Window_Command.new(160, [s1, s2, s3])
  7.     Graphics.transition
  8.     loop do
  9.     Graphics.update
  10.     Input.update
  11.     update
  12.     break if $scene != self
  13.     end
  14.     Graphics.freeze
  15.     @command_window.dispose
  16.   end
  17.   def update
  18.     @command_window.update
  19.     if Input.trigger?(Input::B)
  20.       $game_system.se_play($data_system.cancel_se)
  21.       $scene = Scene_Map.new
  22.       return
  23.     end
  24.     if Input.trigger?(Input::C)
  25.       $game_system.se_play($data_system.decision_se)
  26.       case @command_window.index
  27.       when 0
  28.         $scene = Scene_Task.new
  29.       when 1
  30.         $scene = Scene_atb.new
  31.       when 2  
  32.         $scene = Scene_frd.new
  33.       end
  34.       return
  35.     end
  36.   end
  37. end
复制代码





欢迎光临 Project1 (https://rpg.blue/) Powered by Discuz! X3.1