欢迎光临散文网 会员登陆 & 注册

MalodyV皮肤制作教程(其二)

2023-06-05 09:43 作者:伤心的流星  | 我要投稿

通过前一个章节的学习,相信你已经掌握了制作静态皮肤的方法,但可能还有一些问题困扰着你,比如:元件的尺寸必须提前计算,如果有些变量怎么办?有些定位要适配多种设备,需要比较复杂的处理,非常繁琐,有没有简化办法?怎么增加动画?可不可以改Note出现的位置?等等。

在概述中说过,MalodyV的皮肤宗旨是让90%的需求可以通过可视化操作简单快速完成,剩下10%的复杂问题如果继续做可视化,会让编辑器使用门槛大幅上升,所以选择了使用脚本来处理。

这里我们继续学习如何使用脚本来简化皮肤制作,以及添加动画。

皮肤系统支持的脚本使用lua语言,如果你还不熟悉这种语言,可以先使用参考资料里的教程进行入门,这里假定你已经掌握了基本语法。

控制属性

  1. 首先打开编辑器的皮肤信息面板,在脚本控件上选择一个lua后缀的脚本文件。一开始这个文件可以是最简化的,只需要写入如下内容

一切顺利的话,编辑器会立刻加载脚本,并在下面出现脚本调试面板,上面有三个按钮,分别是从头预览,暂停,和重载脚本。后面会频繁用到,这里暂时不去理解按钮含义。

注意,当第一次选择脚本时,文件会被复制到皮肤目录,之后你应该继续编辑皮肤目录下的文件,而不是原始文件。如果将来你很熟悉脚本用法,可能会只导入一次而不用再次编辑。

2. 假定我们要通过脚本来控制一个模块的初始位置,让他根据游戏窗口高度来变化。于是我们先使用前面的方法添加一个自定义图形。注意想要从脚本里控制的模块,必须主动填写模块名,不能留空,也不能重复。这里我们取名叫leftbar。

3. 接着用你喜欢的编辑器打开脚本文件(防止你忘了,再提一次,要打开皮肤目录下的文件),在Init方法里使用API接口查找刚才创建的模块:

    这里我们用了本地变量来保存模块引用,你也可以用全局变量,或者别的你期望的形式来保存,模块的引用只要查找一次,在整个游玩期间都是有效的。但要注意如果是在编辑器里预览模式下,被引用的模块改名后记得重载一次脚本,否则引用还是会失效。

    我们还需要知道游戏窗口的高度,于是继续调用方法:

    要注意这里返回的高度值不是像素,而是单位值。和编辑器面板上的单位值是完全一样的定位。

    我们期望leftbar的高度总是等于窗口高度的一半,但是多10个单位。于是写:

 最后把这个结果赋值给模块的高度,非常简单:

 然后点击一下重载脚本,你就得到一个高度被你精确控制的模块。在你学习了完整的脚本API之后,你可以在Init里任意控制各种模块的各种属性。


添加动画

  1. 只是修改静态属性还不够劲爆,脚本真正擅长的是添加动画。假设我们要让上面的绿色柱子重复的执行长高和变矮动画,只需要向代码中添加一行:

    然后点击重载,再点击重头播放,是不是就动起来了。

    目前你还不需要了解这一句中每个参数代表什么,只需要记住所有动画尽量都在Init中指定,这里说尽量,是因为脚本确实允许在其他地方(目前还没介绍)设置动画,但那样效率都更差。

    2. 我们继续来搞一点脚本才能干的事,比如每个Note被打击的时候,播放一个动画。这个事其实触发器也能干,但脚本可以更自由的干。

    脚本为打击事件单独提供了一个入口函数,叫OnHit,这次我们写完函数,再来讲含义:

    首先,我们在Init里引用了marlo这个模块,这个模块可以是个图片,或者任意一个别的东西,相信学到这里的你应该能熟练的创建合适的模块了。在Init里引用是因为后面会频繁使用,为了避免重复查找,这样会更高效一些。

    其次,我们在新的OnHit函数里,使用Game:HitEvent()获得本次打击事件的现场数据,这个API返回的内容有打击偏差,判定等等,具体可以查阅API文档。

    总之这里我们只需要拿到打击偏移,即打击时刻距离Note标准时间的毫秒差值。

    最后我们判断是打早还是打晚,修改marlo的位置。

    哦对了,OnHit是不能在编辑器里预览了,你得进入试玩亲自打一打来体验这个效果。




MalodyV皮肤制作教程(其二)的评论 (共 条)

分享到微博请遵守国家法律