在实践篇中,笔者会一边实际改造游戏内容,一边解说必要的知识。
一开始先来个简单的范例,我们的目标是改造通过事件指令[计时器操作]打开的计时器的显示方式。
首先将脚本编辑器关闭后,制作一个测试用的事件。
按照右边的截图,在一个自动执行的事件中设置[计时器操作],让自己能够马上在游戏中测试这个计时器是如何显示的。
在基础篇中,我们一开始设置在最上方的脚本已经没有用,请把它移除。并在最下方标着「▼ 插件脚本」的项目下方新建一个脚本页。给它随便取一个名字即可。
要直接编辑预设的脚本也没关系,不过将自己更改的部分集合在同一个地方,在很多方面会比较方便。也因此,即使没有打算把脚本当成插件发布给其他人,建议也请把它当成一个「插件脚本」来处理。
制作插件脚本的时候,要做的第一件事,是找出修改哪一部分才能得到希望的结果。
因为我们这次想改造的是计时器,所以先用「计时器」这个关键字去搜索全部的脚本。「仅全词匹配」的选项请不要打勾。等到数个搜索结果显示之后,依序往下找就能找到可能和计时器的显示有关的脚本。
在本次的情况 Sprite_Timer 这个类就是我们要的。这个类在精灵管理这个章节一开始的表也有提到呢。锁定自己要改造的脚本并不是每次都可以这么简单,不过如果能够掌握诀窍的话,就能在相对较少的时间内找到。
点进在插件脚本区新建的脚本页后,按照下方输入。
class Sprite_Timer end
在 Ruby 中,已经定义过的类可以在后面更改内容。所以只要在新的类中写进方法,会把它们当作是在原来 Sprite_Timer 这个类中定义一样进行处理。
读读看原本的 Sprite_Timer,我们会发现 create_bitmap 这个方法。该方法新建了一个位图作为精灵的传输元,并设置显示的文字大小与颜色。笔者这次想改造的就是这个部分,因此将这个方法复制粘贴到到插件脚本的类里面。
class Sprite_Timer def create_bitmap self.bitmap = Bitmap.new(96, 48) self.bitmap.font.size = 32 self.bitmap.font.color.set(255, 255, 255) end end
如果定义了相同名字的方法,后定义的方法有较高的优先度,这样一来,我们就能只将 create_bitmap 这个方法的内容作出替换。
接着实际改改看计时器的显示方式吧。
class Sprite_Timer def create_bitmap self.bitmap = Bitmap.new(128, 96) self.bitmap.font.size = 64 self.bitmap.font.color.set(255, 0, 0) end end
像上方一样修改数值,接着进入游戏测试吧。如果计时器变成用大大的红字显示的话就是成功了。
若是有人不清楚这里改变的数值所代表的意义,不妨自己改成别的数值,实验看看会有什么变化吧。而如果想要更多详细的设置内容,请参考以下类的参考资料:Bitmap、Font、Color 。
按照上述方式,这样就算是完成了「用大大的红字显示计时器的插件脚本」,不过若是真的要当成「插件」发布的时候,一旦将原本的方法全部改写,有可能会发生和其他的插件脚本相冲突的状况。所以若是不通过改写,而是想在原本的处理中的前后新增一些处理的话,会使用 alias (别名)功能。
class Sprite_Timer alias xxx001_create_bitmap create_bitmap def create_bitmap xxx001_create_bitmap self.bitmap.font.color.set(255, 0, 0) end end
按照上面定义后,就能在执行原本的 create_bitmap 方法后,单纯改变字体的颜色。
alias xxx001_create_bitmap create_bitmap
我们利用这一行,给了旧的 create_bitmap 一个新的名字 xxx001_create_bitmap,让它避免冲突。因为先写了这一行,所以才能够在这个新的 create_bitmap 中调用旧的处理内容。只不过如果取的别名本身也撞名,那还是会发生冲突。因此为了避免 xxx001 和其他素材撞名,独自取一个名字是有必要的。这一点,在自己的多个插件脚本中重定义同一部分时也是一样的。
这个部分容易搞混,重新定义 create_bitmap 方法,并不因此代表旧的 create_bitmap 方法的内容遭到取代。比较像是把另一个方法用同样的名字定义,只是我们从外部直接观察结果的时候,看起来就是这个方法的内容有被置换过。事先将旧的方法利用别名避免冲突的话,旧方法的内容并不会受到新的方法中定义的影响。