弾幕って・・・

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
jay

弾幕って・・・

#1

投稿記事 by jay » 15年前

龍神録プログラミングの館で50章まで勉強した後もシューティングゲームの制作を続けているのですが、
自分なりの弾幕というものが上手く作れません。
東方projectに出てくる弾幕を真似て作ることは出来るのですが
オリジナルを作ろうと思うと無駄に簡単すぎたり、無駄に難しすぎたり
不格好になったりしてしまいます。
どうすれば上手くオリジナルを作ることができるでしょうか?
オリジナルを作ったことのある経験者は上手な作り方や綺麗な弾幕を作るコツを教えて頂けないでしょうか?

星映

Re:弾幕って・・・

#2

投稿記事 by 星映 » 15年前

そんなに大した情報にならないかもしれませんが、
私が考えた弾幕はそのほとんどが、目に映った景色や
動きなどをもとにしています。
私が特に目をつけるのは、数学的な模様やリズムの流れなどです。

人間は統率のとれた動きは美しいと感じます。(兵隊の行進や、波のように見えるお辞儀
左右対称な動きなど)
また色合いによっても美しさを感じます。(虹色や半透明や水晶のような輝き、色の補間など)

参考までに一応静止画で見ても変ではないものを添付します。(コレがいいとは限らないですが)
静止画なので少し弾幕を説明しますね。
1.画面の中心から円状に弾がでます。
2.自キャラの周りを囲む4つの魔方陣
3.自キャラが画面中央に近づくほど魔方陣は自キャラから離れていく。
4.自キャラが画面中央から離れるほど魔方陣は自キャラに近づく
5.魔方陣からはホーミング弾が打ち出される。

この弾幕は放出(画面中央から)と集合(自キャラへのホーミング)をイメージしています。
難易度の調節は、自キャラを取り巻く魔法陣が行っています。画面中央に自キャラが近づけば
魔方陣は離れてホーミングの発射位置も離れますが、画面中央からでる円状の弾幕に当たりやすくなります。
反対であれば魔方陣のホーミングに当たりやすくなります。
ちなみにこの弾幕はみょんについてくる半霊から思いつきました。

弾幕を作るときは机上で線を描いてそれを式に起こすなどして、その動きにアレンジを加えていっています。

上述がたいした参考にはならないと思いますが、頑張ってください。
あと、ディズニーランドのイルミを見ていたらイルミネーションを弾幕で作りたくなりました(>w<)

チルチル

Re:弾幕って・・・

#3

投稿記事 by チルチル » 15年前

まあオリジナル性や難易度は作った本人では公平な判断が下しにくいので
他の人にプレイしてもらって問題点を指摘してもらうのが良いんじゃないでしょうか?

オリジナルを容易にする方法としては機能面でもオリジナルを作るのが効果的かもしれません
永夜抄の使い魔みたいな他に無い機能があれば弾幕も自然と他に無いものになると思います
そうなると今度はオリジナル性のある機能を考えると言うジレンマが発生しますが・・

簡単な方法としては本家に無い弾を追加するとか背景を変えるとかですね
弾とか背景が変わるだけで全然違う弾幕に見えたりしますよ

あとは無駄に簡単すぎた弾幕は前半に回して
無駄に難しすぎた弾幕は後半に回して調整するとか

ちなみに私は弾幕を作る時は頭の中でひたすら妄想しますね

綺麗な弾幕を作るコツとしては自分の性格を反映させるのが良いかもしれません
そうすればオリジナル性も上がりますしね

私は飛び道具が四方八方から相手に喰らい付くようなのが好きなので
弾幕も自然とそういうものになっていきます

他には本家をやり込むとか弾幕風の動画でも見て知識を増やすとかでしょうかね・・

jay

Re:弾幕って・・・

#4

投稿記事 by jay » 15年前

星映さん
>人間は統率のとれた動きは美しいと感じます。(兵隊の行進や、波のように見えるお辞儀
左右対称な動きなど)
また色合いによっても美しさを感じます。(虹色や半透明や水晶のような輝き、色の補間など)
ここを参考にさせていただきます。
チルチルさん
>他の人にプレイしてもらって問題点を指摘してもらうのが良いんじゃないでしょうか?

いままで身近な人にだけやってもらってました、
(龍神録仕様で)コードを書きますのでぜひお願いします。

>私は飛び道具が四方八方から相手に喰らい付くようなのが好きなので
弾幕も自然とそういうものになっていきます

なんか見た目に面白みが無いので没にしたけど以前言葉通りのものを作ったことがあります
それを改良した物のコードを書いてみます。

double bossatan4(double x,double y){//指定座標と自機
return atan2(ch.y-y,ch.x-x);
}

void boss_shot_bulletH018(){
#define TM018 120
int s,i,k,t=boss_shot.cnt%TM018;
double angle;
if(t==0){
for(i=0;i<36;i++){
if((k=search_boss_shot())!=-1){
boss_shot.bullet[k].col = 2;
boss_shot.bullet[k].x = FX;
boss_shot.bullet[k].y = FY;
boss_shot.bullet[k].knd = 3;
boss_shot.bullet[k].angle = PI2/36*i;
boss_shot.bullet[k].flag = 1;
boss_shot.bullet[k].cnt = 0;
boss_shot.bullet[k].spd = 1.5;
se_flag[0]=1;
}
}
}
if(t==30){
angle=bossatan4(FX,FMY);
for(s=0;s<2;s++){
for(i=0;i<12;i++){
if((k=search_boss_shot())!=-1){
boss_shot.bullet[k].col = s;
boss_shot.bullet[k].x = FX;
boss_shot.bullet[k].y = FMY;
boss_shot.bullet[k].knd = 6;
boss_shot.bullet[k].angle = angle+PI2/12*i;
boss_shot.bullet[k].flag = 1;
boss_shot.bullet[k].cnt = 0;
boss_shot.bullet[k].spd =1+s;
se_flag[0]=1;
}
}
}
}
if(t==60){
for(i=0;i<16;i++){
if((k=search_boss_shot())!=-1){
boss_shot.bullet[k].col = 6;
boss_shot.bullet[k].x = FMX;
boss_shot.bullet[k].y = FY;
boss_shot.bullet[k].knd = 13;
boss_shot.bullet[k].angle = PI2/16*i;
boss_shot.bullet[k].flag = 1;
boss_shot.bullet[k].cnt = 0;
boss_shot.bullet[k].spd = 3.5;
se_flag[0]=1;
}
}
}

if(t==80 || t==84 || t==88 || t==92 || t==96 || t==100){
if((k=search_boss_shot())!=-1){
boss_shot.bullet[k].col = 2;
boss_shot.bullet[k].x = FMX;
boss_shot.bullet[k].y = FMY;
boss_shot.bullet[k].knd = 6;
boss_shot.bullet[k].angle = angle
=bossatan4(FMX,FMY);
boss_shot.bullet[k].flag = 1;
boss_shot.bullet[k].cnt = 0;
boss_shot.bullet[k].spd = 3;
se_flag[0]=1;
}
}
}

>他には本家をやり込むとか弾幕風の動画でも見て知識を増やすとかでしょうかね・・

真似をするのも勉強の内といいますがそれは駄目でしょうか?
本家はそれなりにやりこんでいますが・・

チルチル

Re:弾幕って・・・

#5

投稿記事 by チルチル » 15年前

>なんか見た目に面白みが無いので没にしたけど以前言葉通りのものを作ったことがあります
>それを改良した物のコードを書いてみます。

では感想を言わせていただきます

私は本家のイージーをクリアするのが限界ですが
難易度は私がギリギリ避けられるぐらいで良いです

ただ画面の中心付近でウロウロする事になって
どことなく安定しないので不安になりました

それから弾が一定の間隔で発射されるので
休める時がないので少し疲れました

一周ごとに少し発射をやめるとスタミナが続くと思います

あとは同じような動きが続くと人間は思考力が低下するらしいので
時間経過などで弾が増えたりすると飽きないです

何か違和感を感じたのは弾の並びに規則性が少ない所ですね

あと関係無いですが私の好きなイメージは「嫌われ者のフィロソフィ」見たいな感じですね
弾が四方から飛んで来ると言うよりは弾の変化が迫ってくる感じです

>真似をするのも勉強の内といいますがそれは駄目でしょうか?

真似をするのもアリだと思いますよ
それも実力の向上に繋がりますからね

最近思ったのは良い弾幕ほど真似しにくい気がするって事です
自分が見せられた時に真似しにくい弾幕を作ると良い弾幕になるかもしれません
そういう風に意識すると細かい所にも気を付けるようになりますしね

それに色々な弾幕を知れば弾幕を合体させて新しい弾幕も作れますし
他と被らない所が見えてきますよ

そして弾幕はBGMとかとリズムが合っていないと映えないんですよね
本家はリズムと合っているので、本家をやりこめば
このBGM、この背景、このキャラで映える弾幕はコレだ~
って言うのが自然に浮かんで来るようになると思いますよ

そうすれば最終的には弾幕を出す状況を見れば弾幕が瞬時に浮かんできますね
もう考えるとかじゃなくてキャラが頭の中で勝手に弾幕を始めます、自分はそれを再現するだけですね
こうなると弾幕作りは楽しいですよ~

それから弾幕風の動画とか見ると
良い弾幕には「無駄な動きの多さ」と「それを気付かせない工夫」がある気がします

そもそも弾幕なんだから本来は避ける隙間なんて作らずに相手を瞬殺すれば良いのに
わざわざ避けれるルートを作って避けるのを楽しむわけですから
何かしらの無駄な動きを自然に取り入れると避けるのが楽しくなります

星蓮船EXなんかも自機に弾を当てる事とはズレた所で色々とやっていますが
プレイしていても違和感を感じません、それと同じではないでしょうか?

なのでjayさんも弾幕の中に意味の無い遊び心を少し入れてみれば
自然と良い弾幕に仕上がって行くと思いますよ

星映

Re:弾幕って・・・

#6

投稿記事 by 星映 » 15年前

>いままで身近な人にだけやってもらってました、
>(龍神録仕様で)コードを書きますのでぜひお願いします。

レビューしますね。

弾幕としては、見た目はいいと思います。特に弾の色合いが良かったです。
プログラムの記述からみても、30フレーム間隔が取れていました。(右下からでてくる弾も
90フレームをとっています)この場合は開始を75フレーム付近で行うと裏打ちが取れます。
ただ、左側にくらべ右側の弾の数が若干少なく感じました。

>真似をするのも勉強の内といいますがそれは駄目でしょうか?
真似をしないと成長しませんもんね。音楽でも英語でも同じですし、"まねぶ"とも言いますし。
ですが真似ばかりでは成長はできないので、アレンジを考えるなどをするといいでしょう。(たぶん)

チルチルさんも述べていますが、弾幕は自然と思いつくようになりますよ。私も始めは大した物は作れませんでしたが、次第に音楽を聞いたり絵やキャラクターを見るだけで思いつくようになりました。

最後に誠に勝手ながらjayさんの弾幕をアレンジしてみました。アレンジというのはとても大事なことだと思っています。現に神主も音楽作るときアレンジしているようですし。
では頑張ってくださいね。
(やはり他の人のアルゴリズムは自分のためになります。ありがとうございました。)
//難易度高くない?
double bossatan4(double x,double y)
{//指定座標と自機 
	return atan2(ch.y-y,ch.x-x); 
} 

void boss_shot_bulletH018(){ 
	#define TM018 150 
	int s,i,k,t=boss_shot.cnt%TM018; 
	double angle; 
	if(t==0)
	{ 
		for(i=0;i<36;i++)
		{ 
			if((k=search_boss_shot())!=-1)
			{ 
				boss_shot.bullet[k].col = 2; 
				boss_shot.bullet[k].x = FX+boss_shot.cnt%360; 
				boss_shot.bullet[k].y = FY+boss_shot.cnt%360; 
				boss_shot.bullet[k].knd = 3; 
				boss_shot.bullet[k].angle = PI2/36*i; 
				boss_shot.bullet[k].flag = 1; 
				boss_shot.bullet[k].cnt = 0; 
				boss_shot.bullet[k].spd = 1.5; 
				se_flag[0]=1; 
			} 
		} 
	} 
	if(t==30)
	{ 
		angle=bossatan4(FX,FMY); 
		for(s=0;s<2;s++)
		{ 
			for(i=0;i<12;i++)
			{ 
				if((k=search_boss_shot())!=-1)
				{ 
					boss_shot.bullet[k].col = s; 
					boss_shot.bullet[k].x = FX +boss_shot.cnt%360; 
					boss_shot.bullet[k].y = FMY-boss_shot.cnt%360; 
					boss_shot.bullet[k].knd = 6; 
					boss_shot.bullet[k].angle = angle+PI2/12*i; 
					boss_shot.bullet[k].flag = 1; 
					boss_shot.bullet[k].cnt = 0; 
					boss_shot.bullet[k].spd =1+s; 
					se_flag[0]=1; 
				} 
			} 
		} 
	} 
	if(t==60)
	{ 
		for(i=0;i<16;i++)
		{ 
			if((k=search_boss_shot())!=-1)
			{ 
				boss_shot.bullet[k].col = 2; 
				boss_shot.bullet[k].x = FMX-boss_shot.cnt%360; 
				boss_shot.bullet[k].y = FY +boss_shot.cnt%360; 
				boss_shot.bullet[k].knd = 2; 
				boss_shot.bullet[k].angle = PI2/16*i; 
				boss_shot.bullet[k].flag = 1; 
				boss_shot.bullet[k].cnt = 0; 
				boss_shot.bullet[k].spd = 3.5; 
				se_flag[0]=1; 
			} 
		} 
	} 

	if(t==74 || t==78 || t==82 || t==86 || t==90 || t==94)
	{ 
		if((k=search_boss_shot())!=-1)
		{ 
			boss_shot.bullet[k].col = 2; 
			boss_shot.bullet[k].x = FMX-boss_shot.cnt%360; 
			boss_shot.bullet[k].y = FMY-boss_shot.cnt%360; 
			boss_shot.bullet[k].knd = 6; 
			boss_shot.bullet[k].angle = angle 
			=bossatan4(FMX-boss_shot.cnt%360,FMY-boss_shot.cnt%360); 
			boss_shot.bullet[k].flag = 1; 
			boss_shot.bullet[k].cnt = 0; 
			boss_shot.bullet[k].spd = 3; 
			se_flag[0]=1; 
		} 
	} 
}

jay

Re:弾幕って・・・

#7

投稿記事 by jay » 15年前

チルチルさん
>一周ごとに少し発射をやめるとスタミナが続くと思います
成る程、本家も  まとめて発射→少し待つ→また発射
の繰り返しとかよくありますしね。

>時間経過などで弾が増えたりすると飽きないです
いわゆる発狂ですね。

>自然に浮かんで来るようになると思いますよ
既に一つの境地ですね、羨ましい。

>意味の無い遊び心
つまり弾幕の魅せる部分ですね

星映さん
>次第に音楽を聞いたり絵やキャラクターを見るだけで思いつくようになりました。
ホントに羨ましいですね、やっぱり境地?

>見た目はいいと思います
改良する前は酷かったんです、これが。

>難易度高くない?
高いです、普通に高いです、下手すればBランク入りするかも(基準はなんだ)

>真似をしないと成長しませんもんね
>アレンジを考えるなどをするといいでしょう
つまり  真似て弾幕づくりに慣れる→アレンジで自分らしい弾幕を見つける→オリジナル制作
ですね

>”まねぶ”ですか・・・

真似てみました
東方永夜抄より
void boss_shot_bulletH019(){
#define TM019 432
int i,n,k,t=boss_shot.cnt%TM019;
double angle;
if(t%12==0){
for(n=0;n<8;n++){
if((k=search_boss_shot())!=-1){
boss_shot.bullet[k].knd =8;
boss_shot.bullet[k].col =2;
boss_shot.bullet[k].x =boss.x;
boss_shot.bullet[k].y =boss.y;
boss_shot.bullet[k].flag =1;
boss_shot.bullet[k].angle =(PI2/8*n)-(0.2*t);
boss_shot.bullet[k].cnt =0;
boss_shot.bullet[k].spd =2;
boss_shot.bullet[k].state = 0;
se_flag[0]=1;
}
}
}
if(t%16==0){
for(i=0;i<4;i++){
if((k=search_boss_shot())!=-1){
boss_shot.bullet[k].knd =3;
boss_shot.bullet[k].col =1;
boss_shot.bullet[k].x =boss.x;
boss_shot.bullet[k].y =boss.y;
boss_shot.bullet[k].flag =1;
boss_shot.bullet[k].angle =(PI2/4*i+PI/4)+(0.4*t);
boss_shot.bullet[k].cnt =0;
boss_shot.bullet[k].spd =3;
boss_shot.bullet[k].state =1;
se_flag[0]=1;
}
}
}
for(i=0;i<BOSS_BULLET_MAX;i++){
if(boss_shot.bullet.flag>0){
if(boss_shot.bullet.state==1){
boss_shot.bullet.spd-=0.01;
}
}
}
for(i=0;i<BOSS_BULLET_MAX;i++){
if(boss_shot.bullet.flag>0){
if(boss_shot.bullet.state==1){
if(boss_shot.bullet.y > FMY-9){
boss_shot.bullet.spd=0.5;
boss_shot.bullet.col=0;
boss_shot.bullet.state=0;
boss_shot.bullet.angle = angle
=bossatan4(boss_shot.bullet[i].x,boss_shot.bullet[i].y);
}
}
}
}
for(i=0;i<BOSS_BULLET_MAX;i++){
if(boss_shot.bullet[i].flag>0){
if(boss_shot.bullet[i].state==1){
if(boss_shot.bullet[i].y > FMY-86 &&(boss_shot.bullet[i].x>FMX-5 || boss_shot.bullet[i].x<FX+5)){
boss_shot.bullet[i].spd=0.5;
boss_shot.bullet[i].col=0;
boss_shot.bullet[i].state=0;
boss_shot.bullet[i].angle = angle
=bossatan4(boss_shot.bullet[i].x,boss_shot.bullet[i].y);
}
}
}
}
}

全く同じものは作れませんが、そっくりなものなら・・・
ただアレンジしようにも本家が完璧すぎて手の加えようが・・・

チルチル

Re:弾幕って・・・

#8

投稿記事 by チルチル » 15年前

いやいやアレンジなんて必要ないぐらいですよ
今でも十分jayさんらしさが出ている気がします

星映

Re:弾幕って・・・

#9

投稿記事 by 星映 » 15年前

>真似てみました
>東方永夜抄より

表現が上手いです。特に赤い剣が緊迫感を際立たせてます。(多分そういう弾幕なのだと思う)
ところで、この弾幕を作る際に何を考えましたか?
恐らく同じ動きになるように考えたはずです。さらに弾の色合いも気にしたはずです。
仮に赤い剣の色が黄色だったらどうでしょうか?妹紅の炎というイメージは消えます。
あと赤色は暴走や怒りなどを表現できる色です。妹紅の憎み?などの感情表現ができます。しかも画面端から
自分を狙うという執念。
キャラクター設定が変わればどうでしょうか?もちろん弾幕の形も色も変化します。(本家は個性だらけ)

では次に私の見解でのアレンジを述べます。
アレンジは"派生"という見かたもできます。キャラクターに何か統一した弾幕を派生させればそのキャラクターは○○な性格なんだなどと思わせることもできます。
"派生"という見かたをしなければ"協調"や"変化"や"合成"等の見かたもできます。
そこで統率した動きを"協調"、元が分からない動きを"変化"、没にしたい弾幕を混ぜた動き"合成"と私は
勝手に呼んでいます。これらを意識することで何を強調したいか明白にするという目的でそう呼んでます。
(増幅した動き?は"派生"と呼んでます。う~ん、変化すればアレンジなのかな?)

オリジナル弾幕は自分で考えたときからオリジナルです。そのオリジナルをいろんな分野の情報からアレンジできれば良い弾幕はできるのでないでしょうか。(そのための基盤作りが真似ぶ)

あくまで一個人の見解なので参考までに。というか話がまとまっていないような。。。

jay

Re:弾幕って・・・

#10

投稿記事 by jay » 15年前

つまり一言でアレンジといっても色々あると・・・
とりあえずは真似とアレンジでもう少し頑張ってみます。
色々参考になりました、お二人とも感謝します。
とりあえず当面の目標は期限内の完成かな。
また近いうちにこのようなプチテストプレイをお願いすると思いますので
その時はよろしくお願いします。

閉鎖

“C言語何でも質問掲示板” へ戻る