制作弹幕的上手往往都是从模仿而来。而ZUN神主的原作弹幕,正是绝佳的模仿对象。
本系列帖子通过对原作弹幕的观察与分析,尽力做到对原作弹幕形状与特性的模仿。
弹幕的实现方式千变万化,本系列帖子也只是探索其中的一种实现办法而已;
而对于弹幕的具体参数,也难做到准确细致,只能尽力而为。
P.S.:有些弹幕的设计之巧正在于参数的设计,因此也不能轻视了参数的调整。
关于模仿的步骤,自己的做法大概是这样:
1.获取弹幕符卡的视频,有fraps录的话最好~
2.将弹幕中的子弹归类,并找每类子弹的一个个体进行观察
弹幕通常都由大量子弹构成,很容易看花,如果盯紧了一个子弹去观察,会取得比较好的效果~
注意子弹的速度、方向变化及事件
视频的步进功能也是非常有用的,无论是观察运动规律,还是后面的参数设定
3.将初步的观察结果总结,并进行测试;
测试一方面是验证自己的思路是否正确,如果感觉方向不对头的话就要换换思路了
另一方面,参数的设定也要建立在测试的基础上
下面开始正题~
引用
波与粒的境界,原版在东方文花帖EX里,是 5WAY 的弹幕。
一个叫 ASL 的玩家,在一年前上传了关于这个符卡的REPLAY。
在这段录像里,体现了 ZUN 的一处设计或者巧合,使得此符卡正好可以上下封印。
如果初始参数偏那么一点,就封死了存活的可能性。
(ASL 是东方永夜抄EX分数结界组排行榜冠军。)
观察:
整个弹幕只由一种子弹构成。子弹在发射之后,一直保持匀速直线运动,可以推测子弹本身并无事件;
同时,子弹的发射点也固定为场地中央(虽然阿紫一直在动),且所有子弹发射初速度均相同,只是子弹发射的角度不同。
每次分5个方向发射子弹,每个方向发射规律相同,间隔角度固定为72度。
因此只要得到了一个方向上子弹发射角度变化的规律,就可以模仿出这个弹幕的形状了。
此SC给人最深刻的印象便是转速由快至慢,之后倒转,转速又渐渐变快,如此循环;转速慢时子弹聚在一起,仿佛像波一样;转速快时子弹分散,仿佛又有了粒的性质。
因此我们可以推测,使用一个变量表示角速度,不断地改变这个变量的数值(由正数x慢慢变为负数x,再由负数x慢慢变回正数x),或许就可以实现。
通过测试,感觉角速度的变化为线性比较合适,即角速度与时间呈线性关系,发射角度与时间呈二次方关系。
* 改进:
考虑到一个生活中经常见到的场景:汽车加速行驶而过,轮子看上去却是倒着转的;只因为轮子转得太快,产生了视觉误差。就好比轮子在一瞬间旋转了359度,你不会感觉到这个轮子已经转了接近一圈,而是感觉到这个轮子反转了1度。
因此,角速度只要不断地增加,即可达到一会加速旋转,一会减速旋转,一会正转,一会倒转的效果。
* 思路二:
“由正数x慢慢变为负数x,再由负数x慢慢变回正数x” 同时也是三角函数的特性。因此将发射角度表达为帧数的三角函数(sin或cos)同样也是可行的方案。
GameMaker实现的思路一代码如下:
//初始化:
angleV=0; //初始化角速度
dir=0; //初始化发射角度
//每步执行代码:
angleV+=0.0375; //角速度不断线性增加
dir+=angleV; //计算出发射角度
//之后是发射子弹
var i;
i=0;
repeat 5{
with instance_create(yukari.x,yukari.y,bulletRice){
speed=2.25;
direction=i*72+other.dir; //每个方向相差72度
image_angle=direction;
image_index=PURPLE;
}
i+=1;
}
回想一下,在固定发射位置、固定发射速度、无子弹事件的情况下,仅仅对发射方向进行了简单变化,就做出了如此丰富多彩的效果,足见此符卡设计的巧妙之处~
附上gamemaker实现一份,带源码
115按i切换无敌,r重启
get的话会有奖图一张~
重要的发射子弹代码均在objects->sc->sc1->sc1Assist 这个object里
[ 此帖被萃香西瓜在2011-01-31 19:41重新编辑 ]