查看: 66|回复: 0

[转载发布] 【教程】【不定期更新】实用型XP脚本编写小技巧#13

[复制链接]
  • TA的每日心情
    开心
    5 天前
  • 签到天数: 33 天

    连续签到: 1 天

    [LV.5]常住居民I

    2022

    主题

    32

    回帖

    7144

    积分

    管理员

    Rank: 9Rank: 9Rank: 9

    VIP
    0
    卡币
    5074
    OK点
    16
    积分
    7144
    发表于 同元一千年八月七日(秋) | 显示全部楼层 |阅读模式
    这个帖子记录了我在编写RMXP脚本时候学会的若干技巧,在编写脚本的时候我会把一些有价值的想法记录在这个帖子中,此帖会不定期更新。
    此帖涉及到的技巧多实用性,没有特别高深的技术,应该很容易就能学会。不过,具体问题具体分析,这个教程里面的脚本一般不能直接拿过来实用,也只是提供了一个处理该类问题的思路,所以请不要问“这脚本怎么不能实现XX效果”这样的问题。
    另外请大家多多提出批评意见。


    技巧1:数据库内容扩展
    【更新】2015.01.17
    【摘要】默认的数据库提供的功能大概不能满足一些人的需要,如果你想要给一个特技定义“冷却时间”的属性,但是数据库并没有相应的设置区域,这时候该如何处理?是打开脚本编辑器直接设置固定值,还是使用外部文件存储这一设定?原则上说,这个本来是数据库的设定,只是数据库的功能不够而已,因此我们希望还可以在数据库中设置自己的自定义属性,而不是把数据编辑转移到脚本编辑器中。以下这个方法经过测试,稳定性较好,并且能满足多数需求。
    【正文】





    技巧2:额外信息的存储
    【更新】2015.01.17
    【摘要】在编写一些XP的脚本系统中,不可避免要涉及到数据的存储问题,特别是用户存档数据的存储。这类问题如果处理不好,那么写出来的脚本的兼容性会很差,而且修改也十分麻烦。这个方法利用默认脚本的一些结构,可以被用作比较简单的额外信息存储,并且实现起来也不是非常麻烦。
    【正文】





    技巧3:让Sprite和Window动起来
    【更新】2015.01.17
    【摘要】在各种场景中,我们希望我们界面中的元素运动起来,而不是静止地呆在原地。例如在菜单场景中,我们希望命令窗口从屏幕外飞入到场景中,要一个动态的效果。我们自然会想到可以通过更改坐标让它动起来。再比如我们需要一个图片淡出画面,而不是一下子从画面上消失,我们就会想通过更改不透明度来实现这个效果。原理是很简单的,但是怎么样处理才比较妥当呢?下面这个技巧通过定义了一些额外的接口,能够让Sprite和Window随心所欲地移动。
    【正文】





    技巧4:装备附带技能——简洁到了极致
    【更新】2015.01.23
    【摘要】装备附带技能是一个很久远的问题,要解决它也不是很困难。但是,实现装备附带技能的方法却非常重要。这个技巧实际上没有什么新鲜的东西,在上文中也不断提及。其核心就是“永远不要更改原始数据”。注意到了这一点,我们就能用很短的篇幅来完成装备附带技能的脚本。
    【正文】





    技巧5:事件和脚本结合——给地图事件做个计时器
    【更新】2015.01.24
    【摘要】相信一定有人想利用RMXP做一个类似于农场的游戏,希望达到的最基本效果是让地图上的某些事件随着游戏时间的变化而变化。例如,玩家在某一时刻种下一颗种子,然后游戏时间经过15分钟后,终于长出了果实,这就是一个简易的农场事件。由于这个效果涉及到了地图上的事件,因此在实现的过程中,必须要考虑地图事件的刷新机制。如果完全通过事件实现,制作起来比较麻烦,而且会带来一些效率上的问题。下面这个技巧,将事件和脚本配合使用,利用脚本制作核心的计时器功能,利用事件完成地图上的刷新,比较有参考价值。
    【正文】





    技巧6:二周目制作
    【更新】2015.02.18
    【摘要】二周目的设计在RPG游戏中是个很不错的设定,它增加了游戏的可玩性,适度延长游戏的时间。但是,RMXP默认的系统中不具有二周目/多周目的设定,因此我们要想办法在玩家一周目通关之后,选择“新游戏”进入游戏,就会进入二周目的剧情。一般来说,二周目的信息不会保存在存档中,因此需要借助其他文件来存储这个信息。这个技巧利用游戏原有数据库文件,巧妙地将二周目信息隐藏在其中。为我们制作游戏提供了新的思路。
    【正文】





    技巧7:多项选择
    【更新】2015.03.19
    【摘要】大家都知道,RMXP的事件指令的第二条就是“显示选择项”,当主角和NPC对话之后,NPC会让主角做个选择。但是这个事件指令的不好的地方就是它只能设置四个选择项,当选择多于这个数目时,就要想各种办法了。例如,通过反复使用“显示选择项”事件指令,牺牲2个选项槽,把这个选项改为“上一页”和“下一页”,然后再考虑多个选项之间的衔接问题。这样做不是很方便,也使得选项过于臃肿。如果单纯利用脚本,那么如何设置选择之后的分歧,也是一个问题。这个技巧运用了脚本事件相结合的办法,能够制作出使用起来比较方便的多项选择系统。
    【正文】





    技巧8:椭圆形状的blt
    【更新】2015.06.28
    【摘要】众所周知,Bitmap类的#blt方法有类似于截图传送的功能,它可以把一张bitmap的部分复制到另一个bitmap当中。这个方法很方便,但是它也有很多的拓展空间。比如说,blt方法只能截取矩形区域,而不能截取其他形状的区域。如果我们对区域有所要求的话,原始的blt就不能满足了。这个技巧为Bitmap类新定义了一个#ellipse_blt方法,它可以将传送源位图的一个椭圆区域截取到目标bitmap上。
    【正文】





    技巧9:地图事件数据的扩展
    【更新】2015.06.29
    【摘要】技巧9实际是对技巧1的进一步补充,在技巧1中,我们对数据库的功能进行了扩展。但是地图上的事件某种意义上讲也是游戏数据的一部分,那么如何在地图事件上附加额外信息呢?下面就要介绍两种附加信息的方法:利用事件的名字和事件当中的注释。
    【正文】





    技巧10:记录事件位置
    【更新】2015.07.01
    【摘要】RGSS1中,切换地图之后,重新进入该地图会导致事件的位置重置。究其原因,是因为游戏并没有储存各个地图的信息,而是在每次进入地图的时候,重新载入原始的地图数据,这导致事件归位。所以,我们必须要在主角移动之前将地图上的事件位置储存起来,这需要利用我们技巧2。当然,并不是所有事件都需要记录位置,我们利用技巧9来对特殊的事件进行设置,让RGSS系统知道哪些事件需要记住位置,哪些事件不需要。
    【正文】



    技巧11:另类的alias实现
    【更新】2015.09.15
    【摘要】在自己编写脚本中使用alias关键字,能够节省插件脚本的篇幅,还有减少脚本冲突的可能性的效果。在这个技巧里面,我则要介绍另一种alias的实现方式,利用这个方法,起到的效果和alias差不多,但是完全不用使用alias关键字,而且也不必想方设法给新方法起不同的名字了(从而达到防止Stack Level Too Deep的错误)。 注:本技巧参考了这里的帖子。
    【正文】



    技巧12:简单的数据库破限
    【更新】2016.07.14
    【摘要】众所周知 RMXP 对数据库元素的数量基本上都有 999 的上限,那么总有这个数量不够的情况。遇到这种情况我们该怎么办呢?你可能想到 DKRM,但是 DKRM 的资源不是那么好找,你也可能想到用脚本将多余的数据补上去,但是总觉得写起来很麻烦。这里介绍了一种在不改动编辑器的条件下轻松突破这个限制的一种办法,可能以前有人已经做过,不过我还是在这里更新一下吧。
    【正文】




    技巧13:简易召唤系统——我们当中出现了一个叛徒
    【更新】2017.01.05
    【摘要】这个技巧巧妙利用了敌人出现/隐身的设定,制作了一个简易的召唤系统。并且需要极少量的脚本代码,非常适合事件党学习(以及出成考场题目)。
    【正文】



                 本帖来自P1论坛作者chd114,因Project1站服务器在国外有时候访问缓慢不方便作者交流学习,经联系P1站长fux2同意署名转载一起分享游戏制作经验,共同为国内独立游戏作者共同创造良好交流环境,原文地址:https://rpg.blue/forum.php?mod=viewthread&tid=375515  若有侵权,发帖作者可联系底部站长QQ在线咨询功能删除,谢谢。

    本帖子中包含更多资源

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

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

    使用道具 举报

    ahome_bigavatar:guest
    ahome_bigavatar:welcomelogin
    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

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

    GMT+8, 2024-5-3 02:06 , Processed in 0.048439 second(s), 44 queries .

    Powered by Discuz! X3.4

    Copyright © 2001-2020, Tencent Cloud.

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