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

Project1

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

[有事请教] 写个教程里的脚本作业写晕了

[复制链接]

Lv2.观梦者

梦石
0
星屑
282
在线时间
45 小时
注册时间
2021-5-25
帖子
49
跳转到指定楼层
1
发表于 2021-11-6 13:58:33 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

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

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

x
教程给了一个实践作业,说制作剧情提示的画面,我按照上面的步骤给它做完了
脚本全文是这样:
RUBY 代码复制
  1. #---
  2. # ∩ 故事阶段提示
  3. #---
  4. #---
  5. # ∩ 设定选项名称与故事内容
  6. #---
  7. module Gushi
  8.   Mingcheng = "故事"
  9.   BLDY = 1 #变量号数
  10.   GSNR = {
  11.  
  12. 1  => "这是一个测试文本。",
  13. 2  => "这也是一个测试文本。"
  14.  
  15. }
  16.  
  17. end
  18. #---
  19. # ∩ 在菜单中添加「故事」选项
  20. #---
  21. class Window_MenuCommand
  22.   alias add_gushi_command add_original_commands
  23.   def add_original_commands
  24.     add_gushi_command
  25.     add_command(Gushi::Mingcheng,     :gushi)
  26.   end
  27. end
  28. #---
  29. # ∩ 添加「故事」选项所调用的端口
  30. #---
  31. class Scene_Menu
  32.   alias create_command_gushi create_command_window
  33.   def create_command_window
  34.     create_command_gushi
  35.     @command_window.set_handler(:gushi,     method(:command_gushi))
  36.   end
  37.   def command_gushi
  38.     SceneManager.call(Scene_Gushi)
  39.   end
  40. end
  41. #---
  42. # ∩ 创建故事场景
  43. #---
  44. class Scene_Gushi < Scene_MenuBase
  45.   def start
  46.     super
  47.     @gushi_window = Window_Gushi.new
  48.     @gushi_window.set_handler(:cancel,     method(:return_scene))
  49.   end
  50. end
  51. #---
  52. # ∩ 绘制故事窗口
  53. #---
  54. class Window_Gushi < Window_Selectable
  55.   def initialize
  56.     super(0, 0, Graphics.width, Graphics.height)
  57.     draw_text_ex(4, 0, Gushi::GSNR[$game_variables[Gushi::BLDY]])
  58.     activate
  59.   end
  60. end

我的问题是,这个窗口是怎么显示出来的,我没有看到显示窗口的语句
比如说Scene_Menu里,它的start中有
RUBY 代码复制
  1. def start
  2.     super
  3.     create_command_window
  4.     create_gold_window
  5.     create_status_window
  6.   end

这里的三个create什么什么的后面都被定义了。我的理解是,这三个函数直接被调动了,所以在Menu场景中显示了命令、金钱与状态三个窗口
可在我写的脚本中,Window_Gushi在描述窗口的属性并且让窗口成为有效状态,而Scene_Gushi就只是super了父类,然后把实例变量@gushi_window变成了Window_Gushi的一个实例,不是没有调动任何函数来显示窗口吗?

还有一个问题就是,我看默认的脚本当中,窗口的很多属性都是在Scene里定义的,比如Scene_Menu:
RUBY 代码复制
  1. #--------------------------------------------------------------------------
  2.   # ● 生成物品窗口
  3.   #--------------------------------------------------------------------------
  4.   def create_item_window
  5.     wy = @category_window.y + @category_window.height
  6.     wh = Graphics.height - wy
  7.     @item_window = Window_ItemList.new(0, wy, Graphics.width, wh)
  8.     @item_window.viewport = @viewport
  9.     @item_window.help_window = @help_window
  10.     @item_window.set_handler(:ok,     method(:on_item_ok))
  11.     @item_window.set_handler(:cancel, method(:on_item_cancel))
  12.     @category_window.item_window = @item_window
  13.   end

为啥我的脚本就都是在window里定义的……

这些问题或许很笨吧,但我是真的晕了,好难啊
实际操作的时候,感觉教程里讲的东西少之又少,随便拿个脚本就通篇都是疑问……
对我来说,想要自己编写好用的脚本,至少也得一年以后吧

Lv2.观梦者

梦石
0
星屑
282
在线时间
45 小时
注册时间
2021-5-25
帖子
49
2
 楼主| 发表于 2021-11-6 14:02:19 | 只看该作者
网上不是有个段子,说:
「你看,这是1,现在我们给它再加上一个1,好了,现在它等于2了,很简单吧。
那么,让我们来挑战一些稍微有点难度的吧:
——请证明哥德巴赫猜想。」
我看完教程自己编写脚本真就这种感觉
回复 支持 反对

使用道具 举报

Lv5.捕梦者

梦石
10
星屑
39587
在线时间
1920 小时
注册时间
2010-11-14
帖子
3320

R考场第七期纪念奖

3
发表于 2021-11-6 15:04:16 | 只看该作者
预期效果是,菜单选项中有一个“故事”选项,选择后进入故事场景(Scene_Gushi)

那么先要找到菜单的指令窗口,添加【故事】这个选项


这里为【故事】这个选项设置了一个符号叫 :gushi,
接下来要告诉指令窗口如果碰到符号为 :gushi这个的请求要怎么处理







RM的窗口设计,涉及OOP,详细的不解释了,结论就是:
为了复用窗口,减少重复编写代码,就要把业务逻辑写在“窗口之外”

RM的做法是为窗口对特定符号绑定处理的方法,这个方法是写在“窗口之外”的,也就是场景(Scene)
这里的符号、绑定就是为了能够用窗口去调用“窗口之外”(场景)的方法

前面为【故事】这个选项设置了符号为 :gushi,35行为 :gushi绑定command_gushi这个方法
command_gushi的内容就是转到故事场景(Scene_Gushi)

这样一来,就实现了【菜单选项中有一个“故事”选项,选择后进入故事场景(Scene_Gushi)】



最后一个问题,RM默认代码在场景里设置窗口,你的代码在窗口里面设置。
原因在前面讲了,RM默认的做法是要最大限度的“通用”,所以窗口里面很简单,所有特性都在窗口之外也就是场景来添加。

而自己新加的代码,通常都是定制化的,也就没有太高的复用需要,因此直接在窗口内部写好就可以让场景的代码变得简洁。
(用OOP的话来说,完成了窗口的封装,场景就不需要关注窗口的细节了)

点评

补充一个:窗口的示例初始化后,能够显示在屏幕上这点,是底层代码的功能(有个Window基类),从外部看有点像几个Sprite合在一起的高级Sprite  发表于 2021-11-6 15:22

评分

参与人数 1+1 收起 理由
应答 + 1 认可答案

查看全部评分

用头画头像,用脚写脚本
回复 支持 反对

使用道具 举报

Lv5.捕梦者 (版主)

梦石
1
星屑
23994
在线时间
3339 小时
注册时间
2011-7-8
帖子
3926

开拓者

4
发表于 2021-11-6 16:09:39 | 只看该作者
rgss有几个特殊的类,会“自动”在窗口上绘制内容。典型特征是initialize时需要传入viewpoint,拥有dispose方法和visible属性。在f1的内部类里也可以看到相应的说法

评分

参与人数 1+1 收起 理由
应答 + 1 认可答案

查看全部评分

熟悉rgss和ruby,xp区版主~
正在填坑:《膜拜组传奇》讲述膜拜组和学霸们的故事。
已上steam:与TXBD合作的Reformers《变革者》
* 战斗调用公共事件 *
* RGSOS 网络脚本 *
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-11-16 14:27

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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