同人界を揺るがすシューティングゲームを創ろうぜ日誌 第二夜
コミティア88まで、もう40時間くらいでしょうか?
の21a TRY@CATCHをよろしくします。
さて。昨今はほんとう、シューティングゲーム作りにいそしんでいます。
(とはいえ、実装はほとんどやらず、頭の中で設計を繰り返す毎日)
ひとまず、敵に弾幕を張らせてみた。
緩めの感じで。
※グラフィックは全てフリー素材サイトから頂いたもの
弾幕系シューティングが人気というけれど、弾幕を張らせるのはプログラミング上、とても簡単なことだ。
弾の描画位置を決めるには、
角度×円周率×2のコサインをX座標、サインをY座標とすればいい。
これに弾の速度をかければ、弾が決まったベクトルに進んでいくように見える。
つまり、弾幕を張るには、角度を短いフレームで細かく変化させて弾を生成すればよいのだ。
上の画像では2/60フレームで5/360度ずつ弾を打ち出している
(……のだが、座標位置がint型なので小数点以下の座標が切り捨てられてる)
ここで、弾に与える角度を固定にせず、常に変化するように作ると、
まるで弾が生きているかのように、変な動きをする。乱数を使えばカナリ面白いことになるだろう。
↑ という具合だ。
これは凄まじく細かい回転を繰り返しながら、一度上に行ってしばらくすると下に戻ってという動きをしつつ、
だんだんと画面左上に向かって弾が昇っていっている。
はっきりいって、角度を変化させるやり方を実装すると、
動かしてみるまで、作る方にもその動きが予想できない。
この、「予想できない」というところがミソだ。
もちろん細かい計算を完全に頭の中でシミュレートできる天才数学者とかなら、近似の動きを予想できるかもしれないが一般的には難しいだろう。
まして、内部の計算式を知らないプレイヤーは分かるはずもない。
だから、「プレイする度、自分が撃つ弾の軌道が予想できない」のだとしたら、
プレイヤーは毎回新鮮な驚きがあるし、「毎度、敵の弾の軌道も予想できない」のであれば、
攻略法などなくなるわけだ。
今から作ろうとしているシューティングゲームは、毎回プレイ感が異なる、「攻略法のない」ゲームを最終的には目指したい。
それが鬱陶しいバランスとなってはいけない。プレイ感は快適でありながら、上記の要素を満たす。
そんなシューティングにしたいと思っている。
それには、拡張性の考慮が非常に重要だ。
基底となる部分をしっかり作り込んで、後からクラスを追加するだけで、簡単に新しい弾や敵が生成できなくてはならない。
どうも世に出ているゲーム制作系の解説本やサイトは、
拡張性が考慮されていない。
シューティングゲームを作るにあたって、やはり基本は抑えておこうと本を買ったのだが、
あまり参考にならなかった。
こちらと意図としては、自機、敵機と、それらが放つ弾は独立させたいのだ。
どんな敵がどんな弾を撃つのか、何種類撃つのか、は敵機によって固定にせず、
プレイヤーのプレイ次第で変化させたいからだ。
解説本やサイトでは、敵機と撃つ弾の種類を固定させてしまっていて
しかもそうでないと成り立たないプログラミングをしている。
まあ、シューティングゲームというのは、まだ作ったことがないので
基底の部分はしっかり作りつつも、まずはテストとして単純なルールのものを作り上げようかな、などと思案中。
の21a TRY@CATCHをよろしくします。
さて。昨今はほんとう、シューティングゲーム作りにいそしんでいます。
(とはいえ、実装はほとんどやらず、頭の中で設計を繰り返す毎日)
ひとまず、敵に弾幕を張らせてみた。
緩めの感じで。
※グラフィックは全てフリー素材サイトから頂いたもの
弾幕系シューティングが人気というけれど、弾幕を張らせるのはプログラミング上、とても簡単なことだ。
弾の描画位置を決めるには、
角度×円周率×2のコサインをX座標、サインをY座標とすればいい。
これに弾の速度をかければ、弾が決まったベクトルに進んでいくように見える。
つまり、弾幕を張るには、角度を短いフレームで細かく変化させて弾を生成すればよいのだ。
上の画像では2/60フレームで5/360度ずつ弾を打ち出している
(……のだが、座標位置がint型なので小数点以下の座標が切り捨てられてる)
ここで、弾に与える角度を固定にせず、常に変化するように作ると、
まるで弾が生きているかのように、変な動きをする。乱数を使えばカナリ面白いことになるだろう。
↑ という具合だ。
これは凄まじく細かい回転を繰り返しながら、一度上に行ってしばらくすると下に戻ってという動きをしつつ、
だんだんと画面左上に向かって弾が昇っていっている。
はっきりいって、角度を変化させるやり方を実装すると、
動かしてみるまで、作る方にもその動きが予想できない。
この、「予想できない」というところがミソだ。
もちろん細かい計算を完全に頭の中でシミュレートできる天才数学者とかなら、近似の動きを予想できるかもしれないが一般的には難しいだろう。
まして、内部の計算式を知らないプレイヤーは分かるはずもない。
だから、「プレイする度、自分が撃つ弾の軌道が予想できない」のだとしたら、
プレイヤーは毎回新鮮な驚きがあるし、「毎度、敵の弾の軌道も予想できない」のであれば、
攻略法などなくなるわけだ。
今から作ろうとしているシューティングゲームは、毎回プレイ感が異なる、「攻略法のない」ゲームを最終的には目指したい。
それが鬱陶しいバランスとなってはいけない。プレイ感は快適でありながら、上記の要素を満たす。
そんなシューティングにしたいと思っている。
それには、拡張性の考慮が非常に重要だ。
基底となる部分をしっかり作り込んで、後からクラスを追加するだけで、簡単に新しい弾や敵が生成できなくてはならない。
どうも世に出ているゲーム制作系の解説本やサイトは、
拡張性が考慮されていない。
シューティングゲームを作るにあたって、やはり基本は抑えておこうと本を買ったのだが、
あまり参考にならなかった。
こちらと意図としては、自機、敵機と、それらが放つ弾は独立させたいのだ。
どんな敵がどんな弾を撃つのか、何種類撃つのか、は敵機によって固定にせず、
プレイヤーのプレイ次第で変化させたいからだ。
解説本やサイトでは、敵機と撃つ弾の種類を固定させてしまっていて
しかもそうでないと成り立たないプログラミングをしている。
まあ、シューティングゲームというのは、まだ作ったことがないので
基底の部分はしっかり作りつつも、まずはテストとして単純なルールのものを作り上げようかな、などと思案中。