设为首页收藏本站同能贴吧 切换语言 繁体中文
开启辅助访问 切换到窄版
返回列表
+ 发新帖
查看: 723|回复: 0

[转载发布] 【教程】如何制作储物箱

[复制链接]
累计送礼:
0 个
累计收礼:
1 个
  • TA的每日心情
    开心
    昨天 01:09
  • 签到天数: 224 天

    连续签到: 1 天

    [LV.7]常住居民III

    9103

    主题

    902

    回帖

    7万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9

    VIP
    7
    卡币
    65063
    OK点
    16
    推广点
    0
    同能卷
    50
    积分
    75098

    灌水之王

    发表于 2024-4-20 01:53:53 | 显示全部楼层 |阅读模式
    相关问题:
    https://rpg.blue/thread-486363-1-1.html

    示意图:


    解决这个问题,通常的做法是创建一个Scene类,然后用事件call这个类,就跟使用商店一样。上面的示意图也就是我们所想要的效果:整个场景分为4部分,当左下或者右下窗口激活时,按下空格来交换队伍里的物品和储物箱里的物品。
    接下来我会仔细的讲解该如何写这个脚本。对于RGSS的初学者来说,可以当作写Scene的教程。这个教程会逐步完善场景类所需的各种内容,并且每完成一小部分就会展示一下效果。

    【第一节:场景类的基本结构】
    首先创建一个模块,以避免跟其他的脚本同名,后续的所有类的定义都是在这个模块里进行。这里使用提问者的名字Taeckle作为模块名。
    接下来创建场景的类Scene_Storage。这个场景的类需要包括:

    1. main方法,在范例里,main方法被拆分成了3部分:create_windows,scene_loop和dispose_windows。
    create_windows 用来创建4个窗口,使用几个比较基础的窗口类作为place holder,这里只是用来检查窗口位置是否正确,此方法会在后面的步骤里被新的定义覆盖:RUBY 代码

    scene_loop 直接照抄RGSS的内容。dispose_windows使用RGSS3的风格,将属于Scene的所有Window类的实例对象关闭。

    由于scene_loop里呼叫了update方法,所以还需要创建一个空的update方法。

    2. 数据的处理,这个场景涉及到RGSS以外的数据。所以需要定义数据的类型Data,以及场景所需的实例变量@data。
    考虑到具体要解决的问题是储物箱,所以该场景要占用一个全局变量来存储数据,把这个变量的ID传给场景的initialize方法。顺便传递了储存箱最大能装的数量作为第2个参数。
    RUBY 代码
    在initialize方法里,会检测传入的全局变量是否为Data类型,如果不是就初始化一下,然后绑定此全局变量。

    储物箱应该要提供存入和取出两个方法。定义store和fetch两个空方法,其参数是要存储的东西和数量(默认为1)

    最终脚本如下:RUBY 代码下载


    【第二节:测试工程】
    创建一个空白的工程,并且将写好的scene_storage_base.rb插入到脚本编辑器的main前。根据具体的需求,创建如下自动事件:

    按F12执行,进入新游戏后,自动执行本事件,就会进入到Scene_Storage里了。这个时候场景里还是一片空白:


    【第三节:数据结构】
    接下来我们需要完善Data类,以及store和fetch两个方法。ruby允许随时打开一个类添加新的内容,也允许覆盖原来的同名方法。

    1. Data类是存储在箱子里的物品、武器等。所以Data类可以直接套用Game_Party的部分内容:
    RUBY 代码复制粘贴Game_Party的item_number, weapon_number, armor_number, gain_item, gain_weapon, gain_armor这6个方法即可。
    由于拥有完全相同的6个方法和对应的数据结构,Game_Party和Data的实例在某些地方可以互相替换。详见后面的@bind_data部分。

    2. store方法,需要根据传入的变量的不同类型(item/weapon/armor),来选择调用指定的方法。此外,当箱子或者队伍的背包已经满了的时候,就不能继续放入物品,定义一个函数来判断这种情况:
    RUBY 代码
    将这段脚本添加到F11脚本编辑器里,效果如图:

    范例如下:


    使用的小技巧:
    1. 由于数据存储在全局变量里,会跟随存档一起存下来。
    2. 场景绑定不同的变量就会对应不同的储物箱。
    3. 如果预先设置好变量的内容,就可以做到储物箱在第一次打开时就有东西了。4. 设置可以存储的物品上限为0,并且在箱子里的每件物品数量恰好为1,此时箱子里的物品只能取出不能放回。
    5. 可以在条件分歧里使用脚本里检查箱子里的内容:
                 本帖来自P1论坛作者xp兔子徒弟,因Project1站服务器在国外有时候访问缓慢不方便作者交流学习,经联系P1站长fux2同意署名转载一起分享游戏制作经验,共同为国内独立游戏作者共同创造良好交流环境,原文地址:https://rpg.blue/forum.php?mod=viewthread&tid=486514  若有侵权,发帖作者可联系底部站长QQ在线咨询功能删除,谢谢。

    本帖子中包含更多资源

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

    x

    帖子地址: 

    天天去同能,天天有童年!
    回复 送礼论坛版权

    使用道具 举报

    文明发言,和谐互动
    文明发言,和谐互动
    高级模式
    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    简体中文
    繁體中文
    English(英语)
    日本語(日语)
    Deutsch(德语)
    Русский язык(俄语)
    بالعربية(阿拉伯语)
    Türkçe(土耳其语)
    Português(葡萄牙语)
    ภาษาไทย(泰国语)
    한어(朝鲜语/韩语)
    Français(法语)
    关闭

    幸运抽奖

    社区每日抽奖来袭,快来试试你是欧皇还是非酋~

    立即查看

    聊天机器人
    Loading...

    QQ|Archiver|手机版|小黑屋|同能RPG制作大师 ( 沪ICP备12027754号-3 )

    GMT+8, 2026-10-27 11:09 , Processed in 0.137312 second(s), 55 queries .

    Powered by Discuz! X3.4

    Copyright © 2001-2020, Tencent Cloud.

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