原文地址:
因为之前已经做好了固定的模式,所以弹幕的添加就变的很容易了。
这次只要把弹幕函数进行改动就行了。
我们就用shot_bullet_H008来实现洩矢大人的弹幕吧。
【洩矢大人】这个弹幕是东方风神录EX面的最后一个弹幕。 不太清楚的人看下面的视频来确认一下吧。(对不起,原文给nico的地址我打不开,只好发b站的了)
http://www.bilibili.tv/search?keyword=%E9%A3%8E%E7%A5%9E%E5%BD%95+ex&orderby=&formsubmit=
很意外的是,EX面的最后一个弹幕是这么简单的实现的,这么说的话东方厨们也许会不高兴,
但我们还是来简单的实现一个相似的弹幕来吧。
————————————————————————————————————————————————————————————————————————
---- shotH.cpp里添加如下代码 ----
//崇符【洩矢大人】
void shot_bullet_H008(int n){
int t=shot[n].cnt;
int k;
if(t>=0 && t<1200 && t%90==0){
double angle=rang(PI);
for(int j=0;j<2;j++){//在中途分裂成两部分
for(int i=0;i<60;i++){//每部分60个
if(shot[n].flag!=2 && (k=shot_search(n))!=-1){
shot[n].bullet[k].knd =8;//第八号子弹
shot[n].bullet[k].angle =angle+PI2/60*i;//圆形 60个
shot[n].bullet[k].flag =1;
shot[n].bullet[k].x =enemy[shot[n].num].x;
shot[n].bullet[k].y =enemy[shot[n].num].y;
shot[n].bullet[k].col =4;//四号颜色
shot[n].bullet[k].cnt =0;
shot[n].bullet[k].state =j;//状态。根据是0还是1来区分旋转方向
shot[n].bullet[k].spd =2;
}
}
}
se_flag[0]=1;//发射音效
}
for(int i=0;i<SHOT_BULLET_MAX;i++){//所有子弹
if(shot[n].bullet[i].flag>0){//有注册了的子弹的话
int state=shot[n].bullet[i].state;
int cnt=shot[n].bullet[i].cnt;
if(30<cnt && cnt<120){//在 30 -120 的时间内
shot[n].bullet[i].spd-=1.2/90.0;//速度减少 1.2/90
shot[n].bullet[i].angle+=(PI/2)/90.0*(state?-1:1);//倾斜90度/90
}
}
}
}
————————————————————————————————————————————————————————————————————————
子弹的编号在 bullet 文件夹里可以找到和子弹编号一样的图片,来确认下。
(b8.png)
最左边的是0号的话,颜色编号为1号的就是水珠的颜色,颜色就指定为1号吧。
这里要传0或者1给state参数,洩矢大人的弹幕在一个地方会发射2个子弹,
中途会变成2个轨道。
在那里,你会看到,状态为0的弹幕会往角度的正方向变化,状态为1的弹幕相反。
shot[n].bullet[i].angle+=(PI/2)/90.0*(state?-1:1);
代入这里。问号是条件运算符,不知道的去谷歌一下吧。
这样做的话,两种角度的弹幕就出来了。
/カウンタ | 移動パターン | 敵の種類 | x座標 | y座標 | スピード | 発射時間 | 弾幕種類 | 弾の色 | 体力 | 弾種類 | 待機時間 | アイテム1 | 2 | 3 | 4 | 5 | 6 |
/cnt | pattern | knd | x | y | sp | bltime | blknd | col | hp | blknd2 | wait | item_n | |||||
60 | 9 | 0 | 200 | 150 | 0 | 60 | 8 | 1 | 100 | 0 | 1200 | 0 | -1 | -1 | -1 | -1 | -1 |
运行结果
本人CSDN博客目录: