まったくのプログラミング素人の筆者がC++/HSPを使用してSTG(シューティングゲーム)を作っていく過程を書くブログでしたが最近は脱線気味。プログラミング以外にも、ゲーム関連の記事、日々の戯言など。
×
[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。
先日キャラや背景などを3D化してみたのですが、背景は出来れば奥から手前に向かって
大きくなっていくような感じにしたいなぁと思っていて、とりあえずカメラアングルを変更出来る
プログラムを作って、色々と試してみました。
こんな感じ↓
左右キーでカメラの水平方向回転値を変更
左シフトキー+左右キーでカメラの捻り方向回転値を変更
上下キーでカメラの垂直方向回転値を変更
K⇔Hでオブジェクト出現位置x軸座標を変更
U⇔Jでオブジェクト出現位置y軸座標を変更
Z⇔Aでオブジェクト出現位置z軸座標を変更
X⇔Sでオブジェクト回転
C⇔Dでオブジェクト移動スピード変更
V⇔Fでオブジェクト出現率変更
以上の変更が出来るようにしています。
プロジェクトファイルはコチラ↓
http://blog.cnobi.jp/v1/blog/user/63629cf35d5259ece1529ed13f0745b1/1273426683
背景の表示方法としては、メタセコイアで↓こんなモデルを作って連続して表示させています。

カメラアングルの変更もとても簡単に出来て
SetCameraPositionAndAngle( VGet( 0.0f, 0.0f, 0.0f ), VRotate, HRotate, TRotate ) ;と言う
命令を使用してVRotate, HRotate, TRotateの値を弄るだけでグリグリと動かす事が出来ました
ホント、DXライブラリ様様って感じですね^^
とりあえず、こんな感じで背景表示させて、モデリングをもうちょっと頑張れば良いかなーと
思っていたのですが、良く考えてみるとカメラアングルを変更してしまうと、キャラのアングルも
変わってしまうんですよね。
背景のアングルだけ3Dっぽく変化させて、キャラだけは2D処理のまま3D表示ってのが
出来なくなってしまいます。
なにか良い方法はないものかと、色々とリファレンスを読み漁っています^^;
大きくなっていくような感じにしたいなぁと思っていて、とりあえずカメラアングルを変更出来る
プログラムを作って、色々と試してみました。
こんな感じ↓
左右キーでカメラの水平方向回転値を変更
左シフトキー+左右キーでカメラの捻り方向回転値を変更
上下キーでカメラの垂直方向回転値を変更
K⇔Hでオブジェクト出現位置x軸座標を変更
U⇔Jでオブジェクト出現位置y軸座標を変更
Z⇔Aでオブジェクト出現位置z軸座標を変更
X⇔Sでオブジェクト回転
C⇔Dでオブジェクト移動スピード変更
V⇔Fでオブジェクト出現率変更
以上の変更が出来るようにしています。
プロジェクトファイルはコチラ↓
http://blog.cnobi.jp/v1/blog/user/63629cf35d5259ece1529ed13f0745b1/1273426683
背景の表示方法としては、メタセコイアで↓こんなモデルを作って連続して表示させています。
カメラアングルの変更もとても簡単に出来て
SetCameraPositionAndAngle( VGet( 0.0f, 0.0f, 0.0f ), VRotate, HRotate, TRotate ) ;と言う
命令を使用してVRotate, HRotate, TRotateの値を弄るだけでグリグリと動かす事が出来ました
ホント、DXライブラリ様様って感じですね^^
とりあえず、こんな感じで背景表示させて、モデリングをもうちょっと頑張れば良いかなーと
思っていたのですが、良く考えてみるとカメラアングルを変更してしまうと、キャラのアングルも
変わってしまうんですよね。
背景のアングルだけ3Dっぽく変化させて、キャラだけは2D処理のまま3D表示ってのが
出来なくなってしまいます。
なにか良い方法はないものかと、色々とリファレンスを読み漁っています^^;
PR
タイムテーブルを導入して、ステージを作って行こうかと思っていたのですが
見た目が、あまりにもスペースインベーダーインフィニティージーンっぽすぎるなぁと思って
折角DXライブラリも3Dに対応した事だし、キャラだけでも3D表示にしてみようかと思い
とりあえず簡単なmqoファイルを作って表示させてみました。
こんな感じ↓
モデルはただの四角ですが、なかなか良い感じではないかと自分では思っています^^;
当初、2D座標に3Dモデルを表示させれば良いだけやろーと思って表示させたら
x軸は上手く動くのですがy軸が上下反転してしまったんですよね。
で、カメラの位置とかが悪いのかなーなどと思い、アレコレやってみたのですが上手く出来ず
ちょっと調べてみたら、2Dの場合は上にいく程マイナスで下に行く程プラスになるのですが
3Dの場合は上にいく程プラスで下に行く程マイナスになるようです。
(使用する処理系やグラフィックエンジン(DirectXやOpenGL等)によって色々とあるようです)
なので、例えば縦の画面の大きさが480だとして、2Dでの座標が10だとすると3Dでの座標は470
になるって事で、コレを2Dのに合わせて反転させないといけません。
といっても、480から座標を引けば良いだけなので、480-enemy[i].yとかにすれば上手く出来ました^^
3Dモデルの表示方法は、以前のエントリで書いた方法で表示させています。
ただ、この方法だとカメラ位置が固定なので、奥から手前に迫ってくるような背景は表示出来ない
んですよね。
この辺を、上手く表示出来るようにアレコレと研究中です。
見た目が、あまりにもスペースインベーダーインフィニティージーンっぽすぎるなぁと思って
折角DXライブラリも3Dに対応した事だし、キャラだけでも3D表示にしてみようかと思い
とりあえず簡単なmqoファイルを作って表示させてみました。
こんな感じ↓
モデルはただの四角ですが、なかなか良い感じではないかと自分では思っています^^;
当初、2D座標に3Dモデルを表示させれば良いだけやろーと思って表示させたら
x軸は上手く動くのですがy軸が上下反転してしまったんですよね。
で、カメラの位置とかが悪いのかなーなどと思い、アレコレやってみたのですが上手く出来ず
ちょっと調べてみたら、2Dの場合は上にいく程マイナスで下に行く程プラスになるのですが
3Dの場合は上にいく程プラスで下に行く程マイナスになるようです。
(使用する処理系やグラフィックエンジン(DirectXやOpenGL等)によって色々とあるようです)
なので、例えば縦の画面の大きさが480だとして、2Dでの座標が10だとすると3Dでの座標は470
になるって事で、コレを2Dのに合わせて反転させないといけません。
といっても、480から座標を引けば良いだけなので、480-enemy[i].yとかにすれば上手く出来ました^^
3Dモデルの表示方法は、以前のエントリで書いた方法で表示させています。
ただ、この方法だとカメラ位置が固定なので、奥から手前に迫ってくるような背景は表示出来ない
んですよね。
この辺を、上手く表示出来るようにアレコレと研究中です。
タイムテーブルの概念を導入して、敵の出現を管理出来るようにして敵を出現させるように
してみました。
とりあえずなので敵に出現パターンなどは適当ですが、こんな感じでショットとホーミングを
撃ち分けて進んでいく感じにしようかと思っています。
今回、ショットを8方向に撃てるようにしてみましたが、どうしようかなーと考え中。
後は、なにか一発逆転的な要素を入れたいなぁと思っているのですが
なかなか良いアイデアが浮かばなくてアレコレと妄想しています^^;
してみました。
とりあえずなので敵に出現パターンなどは適当ですが、こんな感じでショットとホーミングを
撃ち分けて進んでいく感じにしようかと思っています。
今回、ショットを8方向に撃てるようにしてみましたが、どうしようかなーと考え中。
後は、なにか一発逆転的な要素を入れたいなぁと思っているのですが
なかなか良いアイデアが浮かばなくてアレコレと妄想しています^^;
先読み弾(予測弾というのでしょうか?)を作ってみました。
こんな感じ↓
最初に撃ってくる弾は自機狙い弾で後で撃ってくる弾が先読み弾です。全然精度は悪いですが^^;
考え方としては・・・
自機と敵との距離を計算
その距離を敵弾の弾速で割って、自機までの到達時間を計算
到達時間×自機の移動スピードを自機の移動方向にプラス
その位置を先読み弾の目標位置とする
と言った感じ。
ただ、この方法だと自機&敵と自機&先読み弾位置が同じくらいの距離なら、そこそこ精度は出る
のですが、距離が離れると精度も落ちます。
本当は、自機の移動方向にまっすぐ線を引いて、自機から敵にも真っ直ぐ線を引いて
敵から先読み弾位置にも真っ直ぐ線を引いて出来る三角形の先読み弾の座標を求めるのが
良いのだと思うのですが、全く計算方法がわからないので、上記のような方法で実装しました^^;
まぁ、それ程精度の必要な弾ではないので、コレで良いかなぁと。
いつもなら、プログラムもアップするのですが、とても他人にみせれるようなプログラム
ではないので自粛します^^;
こんな感じ↓
最初に撃ってくる弾は自機狙い弾で後で撃ってくる弾が先読み弾です。全然精度は悪いですが^^;
考え方としては・・・
自機と敵との距離を計算
その距離を敵弾の弾速で割って、自機までの到達時間を計算
到達時間×自機の移動スピードを自機の移動方向にプラス
その位置を先読み弾の目標位置とする
と言った感じ。
ただ、この方法だと自機&敵と自機&先読み弾位置が同じくらいの距離なら、そこそこ精度は出る
のですが、距離が離れると精度も落ちます。
本当は、自機の移動方向にまっすぐ線を引いて、自機から敵にも真っ直ぐ線を引いて
敵から先読み弾位置にも真っ直ぐ線を引いて出来る三角形の先読み弾の座標を求めるのが
良いのだと思うのですが、全く計算方法がわからないので、上記のような方法で実装しました^^;
まぁ、それ程精度の必要な弾ではないので、コレで良いかなぁと。
いつもなら、プログラムもアップするのですが、とても他人にみせれるようなプログラム
ではないので自粛します^^;
カレンダー
06 | 2025/07 | 08 |
S | M | T | W | T | F | S |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 | 31 |
リンク
カテゴリー
最新記事
(04/04)
(12/26)
(12/25)
(11/17)
(10/11)
プロフィール
HN:
kt.
性別:
男性
自己紹介:
プログラミング経験は昔ファミリーベーシックでちょっとさわったくらい。
好きなSTGは、怒首領蜂大往生、エスプガルーダ(2)等の弾幕STGやら雷電シリーズなんかの非弾幕、バトルガレッガ、グラディウスシリーズ、R-TYPE等、STGなら何でも好きです。
音楽がカッコイイSTGが特に好きで、並木学氏は最高!
好きなSTGは、怒首領蜂大往生、エスプガルーダ(2)等の弾幕STGやら雷電シリーズなんかの非弾幕、バトルガレッガ、グラディウスシリーズ、R-TYPE等、STGなら何でも好きです。
音楽がカッコイイSTGが特に好きで、並木学氏は最高!
ブログ内検索
最古記事