GameMaker Studio 2

创建于:2017-04-19

创建人: dougen

190 信息 1080 成员
游戏开发工具 GameMaker Studio 2 的讨论小组

[ 分享 ]写轮眼小作业·最近在GMS2里写的一个几何动画系统雏形

枕头 2018-03-02

INSPIRATION:不愿意透露姓名的船长上个礼拜在精董群里发了一个https://aidn.jp/mikutap/,是H5实现的一个按键音+MG动画,看完之后就想通过GMS2来实现一下,上个礼拜花了周六一天督促团队的程序做了个简单的原型。Image title

首先看看GMS的基础图形绘制系统,只有线,三角,矩形,圆,很是寒酸,唯一有用的是自带的着色系统。既然直图(折线,多边形)和弯图(圆)两个系统肯定是分开做的(实际上弯图远比直图简单),下面先分析一下需要哪些参数。

直线形主要是:锚点,顶点集合,大小,角度,颜色(含透明度),线宽,这几个都是数值上直接改变直线形的参数。还有两个参数,一个是outline(轮廓),就是区分是否是一个填充的图形;另一个是connect(连接),就是点集的第一个点和最后一个点是否相连。

那么就开始写,笃笃笃笃笃笃笃笃笃笃笃笃,写完了。

然后研究了一下图形,发现还缺少两个系统。首先是修建路径(就是线条嗖嗖嗖过去像画画一样),这个需要定义一个线条的开始比例和结束比例,然后通过变化开始比例和结束比例就能画出一条线条的一部分。其次是仅仅用一个角度来定义物体的旋转是不够的,因为这个旋转只是旋转中心在物体中心的特殊情况,所以需要另外一个旋转动作数组,每一个旋转动作包括旋转中心(相对锚点)和旋转角度。

之后就是很麻烦的迭代,但是逻辑上是没难点的,继续笃笃笃笃笃笃笃笃笃笃笃笃。顺便插一句,我在做的过程中,线条的开始结束比例都是可以大于1的(本身按比例的话,应该是(0,1)范围内),在处理的时候再单独判断。这是因为之后处理帧渐变的时候,需要考虑一个特殊情况,比如一个线段从0.2的部分开始,转一圈,那么结束的位置应该是1.2,也就是从(0.2,0.2)到(0.2,1.2)。写的有点啰嗦,不过这是一个简化操作的手段,如果有人看了想写可能也会想到这个问题。

直系都做完了,弯系就没有难点了。除了一些位置参数可以复用直系以外,弯系的主要点就是弧度(也就是画扇形和圆弧)。我找了半天发现GMS是没有自带画扇形圆弧的函数的,所以就只能自己写,方法就是很简单的割圆,GMS绘图的特殊性,我一开始割了360,出现了因为线窄间隙宽导致的花图,后来就割了1800。另外,我判断了一下弧度,如果画的是整圆,就还是用自带的函数,因为割圆绘图在GMS效率极低,同时出现6-7个就卡的不行,所以这里的弧度变换一般就只给一个扇面顺逆时针效果。

之后就是最激动人心的k帧环节。用ds map写了一套关键帧系统,基本上包括了上述的参数的变换,然后新建一个object,每一个step放进去关键帧的变换,齐活。关于动画曲线我直接抄了一个git库:https://github.com/zhangxinxu/Tween,实际上平时用一下线性的就差不多够了。

中间很多几何必需的小函数也写了点,但是都是很基础的,远没有求xxx的xxx,求xxxx和xxx的xxx这种需求这么麻烦。

如果要再强化的话,比如路径位移(目前只是锚点之间线性移动),碰撞处理什么的都是有生之年。不过实际上GMS的绘图小水管,让我对它画这个东西效率很是疑惑,如果再加入碰撞,那就更糟心了。

后来程序又用u3d的mesh实现了一套一样的,在u3d里实现碰撞效果可能简单一些。

至于这个系统开发的用处,可能聪明的你早就想到了,对,没有错,这是外包的一个儿童早教系统,专门教3-5岁的学龄前小朋友认识图形和颜色。

三流独立做打架,二流独立做啪啪,一流独立做爸妈,为自己鼓掌。


(转发自:原日志地址

近期喜欢的会员

 
顺子 2018-03-04

这个好酷炫的样子!

 
highway★ 2018-03-07

awesome~~~

 

加入 indienova

  • 建立个人/工作室档案
  • 建立开发中的游戏档案
  • 关注个人/工作室动态
  • 寻找合作伙伴共同开发
  • 寻求线上发行
  • 更多服务……
登录/注册