忍者ブログ
まったくのプログラミング素人の筆者がC++/HSPを使用してSTG(シューティングゲーム)を作っていく過程を書くブログでしたが最近は脱線気味。プログラミング以外にも、ゲーム関連の記事、日々の戯言など。
×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

先日作成したホーミングレーザープログラムは2次元ベジェ曲を使った物だったのですが
もっと、レーザーをクロスさせたいと思い3次元で作ってみました。
こんな感じ↓

暫定版なので、たまに挙動がおかしくなったりしてますが気にしないで下さい^^;

プロジェクトファイルはコチラ↓
https://blog.cnobi.jp/v1/blog/user/63629cf35d5259ece1529ed13f0745b1/1256751146
実行ファイルもいれてあるのでVC++が無くても動かせます。
Zキーでレーザー発射。上下左右で自機移動が出来ます。
当り判定なども行っていないので、不自然な消え方をしたりしますが仕様です。

ただ、現在の状態では制御点の指定をランダムで行っているだけなので、敵との位置関係に
よっては、おかしなレーザーが発射されてしまうんですよね。
敵と自機との位置関係を考えて制御点を配置出来るようにしたいんですが、なかなか難しいです^^;

ベジェ曲線を使ってホーミングレーザーを作ってみる その5へ
PR
10/27日配信となったドラキュラ伝説リバースを購入してみました。
s-PA287421.jpg
購入金額1000ポイント。

内容としては1989年にゲームボーイで発売されたドラキュラ伝説を新解釈で作成したって事で
基本的には横スクロールアクションのいつものドラキュラを想像すればOKなゲーム性。
s-PA287424.jpg
ジャンプとムチを駆使して進めて行きます。

で、とりあえずイージーモードでクリアまでプレイしてみたのですが、非常に良く出来ています。
敵の攻撃ギミックやボス戦など、ちゃんと攻略方法が考えられていて何度も挑戦してクリアして
いく感じ。正直、コレが1000円?と思ってしまうような出来ですね。

製作はお馴染みのM2が担当って事で、この出来の良さも納得って感じですが、ホントM2製作の
ゲームは外れが無い気がします。

そして、忘れてはならないのが音楽。
今回も過去のドラキュラシリーズからアレンジされた曲が入っておりアレンジはさんたるる師匠が
担当されています。
s-PA287425.jpg
今回も、FM音源チックな感じでアレンジされており、聞いた感じではグラディウスリバースと
同じような音源構成かな?と思いました。(FM音源+PCM)
各面の選択曲は・・・
1面・・・REINCARNATED SOUL(MD「バンパイアキラー」より)
2面・・・悪魔たちに送るララバイ(AC「悪魔城ドラキュラ」より)
3面・・・New Messiah(GB「ドラキュラ伝説II」より)
4面・・・LOAD BGM(X68k「悪魔城ドラキュラ」より)
5面・・・Aquarius(FC「悪魔城伝説」より)
6面・・・Vampire killer(FC「悪魔城ドラキュラ」より)
となっているようです(2chより抜粋)
全曲良かったのですが、特に3面と5面のアレンジがカッコよかったです。
最終ステージの6面でVampire killerが流れる演出も熱い。
これは是非ともサントラを出して欲しい所。
あと、SEが過去のドラキュラシリーズから持ってきていて地味に良かったです^^

ゲームをクリアしたと言っても、行けていない部屋なども多数あり何度もプレイしてしまう感じで
作られているので、かなり遊べるソフトではないかと思います。
1000円で買える事を思うと、買っといて損はないでしょう。
とりあえず、元ネタのゲームボーイ版を、とてもプレイしたくなりました^^;
先日作成したホーミングレーザープログラムを使って、ちゃんと画像で表示するようにしてみた。

こんな感じ。

斑鳩の解放のイメージで作ってみましたが、なかなか良い感じではないかと思っとります^^;

プロジェクトファイルはコチラ↓
https://blog.cnobi.jp/v1/blog/user/63629cf35d5259ece1529ed13f0745b1/1256604959
実行ファイルもいれてあるのでVC++が無くても動かせます。
Zキーでレーザー発射。上下左右で自機移動が出来ます。

と、なんか簡単に出来たみたいに書いてますが、とーーーーーーっても苦労しました。
当初は画像を数珠繋ぎにして回転させて表示させようとしたのですが速度の変わらない
レーザーならそれでも良いのですが、今回はレーザーの速度が変化するので上手く
繋がらないんですよね。
s-WS000712.jpg
こんな感じで、綺麗に繋がってくれません。

上手く出来ん・・・とTwitterでつぶやいていたら、色んな方が方法を教えてくれました^^
で、教えていただいたおかびの悠々制作記さんのコチラのエントリを参考にさせて頂いて
やっと出来たって感じです。

考え方としては上記のエントリに書かれていますが、DrawModiGraph関数を使って画像の
4点を計算して表示させる方法。
こんな感じです↓
102701.png
(lux,luy)(rux,ruy)(rdx,rdy)(ldx,ldy)の計算をするのですが
ベジェ曲線での計算で(P01x,P01y)と(P02x,P02y)は計算出来ているので、まず角度rを求めます。
これはatan2関数で出来ますね。r=atan2(P01y-P02y,P01x-P02x)でOK。

次に)(rdx,rdy)(ldx,ldy)を考えて見ます。
この座標は(P02x,P02y)から画像img分が角度rの分回転している座標って事になります。
計算式としてはこんな感じ↓
rdx=(P02x+img*cos(r+π/2))
rdy=(P02y+img*sin(r+π/2))
ldx=(P02x+img*cos(r-π/2))
ldy=(P02y+img*sin(r-π/2))

(lux,luy)(rux,ruy)は、前回の(rdx,rdy)(ldx,ldy)を代入してやれば良いのですが
一番最初の(lux,luy)(rux,ruy)だけは計算出来ないので、発射座標と同じ場所から画像の半分を
足すか引くかすればOKかな?
ちゅうか、どうせ自機で見えないので適当で良いかも?

まぁ、殆どおかびの悠々制作記さんで書かれていた事を書いただけですが、こんな方法
自分では絶対に思いつきません^^;

あと、当初DrawModiGraph関数で表示させていたのですが、それだと画像がたまに途切れたり
してて何故に?と思っていたのですが、DrawModiGraph関数はint型の関数みたいで
小数点を扱う場合に上手く計算が出来ていなかったようで、DrawModiGraphF関数を使うと
綺麗に繋がるようになりました^^

とりあえず、コレを元に次はレイフォースみたいにロックオン出来るようにしてみようかと
思っています。

ベジェ曲線を使ってホーミングレーザーを作ってみる その4へ
先日作ったベジェ曲線表示プログラムを使って、キー入力があった時にレーザーを表示
させるようにしてホーミングレーザーっぽくしてみました。

こんな感じ。試しにyoutubeに動画をアップしてみた。

なかなか、良い感じで動かせてるのではないかと、自分では思っています^^;

プロジェクトファイルはコチラ↓
https://blog.cnobi.jp/v1/blog/user/63629cf35d5259ece1529ed13f0745b1/1256362276
実行ファイルもいれてあるのでVC++が無くても動かせます。
Zキーでレーザー発射。上下左右で自機移動が出来ます。

とりあえず、コレを元にして作成中のゲームに組み込もうと思っているのですが
まずは、レーザー画像を作ってみて回転させながら表示出来るようにしてみようと思っています^^

ベジェ曲線を使ってホーミングレーザーを作ってみる その3へ

以前、ホーミングレーザーを実装しようと思って三角関数を使って作った事があったのですが
斑鳩の解放のようなカッコいいホーミングとは言い難い動きでした。
(ホーミングとしての機能は申し分ないのですが)

で、ベジェ曲線を上手く使えれば、綺麗なカーブを描くホーミングレーザーを作れるんじゅ
ないのかと思い、とりあえずベジェ曲線を表示するプログラムを作ってみたのがコレ↓
s-WS000708.jpg
作ったと言っても、前に作ったベジェ曲線表示プログラムを3次元から2次元に変更しただけです。
レーザーの動きとしてはP0からP2に向かって動いていきます。
つまり、P0の座標を自機、P2の座標を敵とすれば、ベジェ曲線を使ったホーミングレーザーが
作れそうです。

3次ベジェ曲線の計算方法はこんな感じ
s-1023.jpg
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  for(i=0;i<DivNum;i++)
  {//白いベジェ曲線を描画
   u = ( 1.0 / DivNum ) * Counter2 ;

   P01[0] = ( 1.0 - u ) * P0[0] + u * P1[0] ; P01[1] = ( 1.0 - u ) * P0[1] + u * P1[1] ;
   P12[0] = ( 1.0 - u ) * P1[0] + u * P2[0] ; P12[1] = ( 1.0 - u ) * P1[1] + u * P2[1] ;
   
   P02[0] = ( 1.0 - u ) * P01[0] + u * P12[0] ; P02[1] = ( 1.0 - u ) * P01[1] + u * P12[1] ;

   x = ( int )P02[0] ;
   y = ( int )P02[1] ;

   DrawBox( x - 1 , y - 1 , x + 1 , y + 1 , GetColor( 255 , 255 , 255 ) , TRUE ) ; //ベジェ曲線を描画
   Counter2 ++ ;
   if( Counter2 == DivNum ) Counter2 = 0 ;
  }
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
3次元に比べると、かなり計算式が減っています。

で、コレを元に沢山のベジェ曲線を表示するプログラムを作ってみました。
s-WS000709.jpg
こんな感じ。
白い線が、ホーミングレーザーの軌跡だと考えると、なかなか良い感じなのではないかと
自分では思っています^^
とりあえず暫定的な出来なのでプロジェクトファイルはアップしてません。
コレを元にボタンを押す度に、1本づつレーザーが表示されるプログラムを作ろうかと思っとります^^;

ベジェ曲線を使ってホーミングレーザーを作ってみる その2へ

Twitter
カレンダー
06 2026/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/20 kt.]
[04/19 うぇむ]
[11/24 kt.]
[11/21 NONAME]
[11/24 kt.]
プロフィール
HN:
kt.
性別:
男性
自己紹介:
プログラミング経験は昔ファミリーベーシックでちょっとさわったくらい。
好きなSTGは、怒首領蜂大往生、エスプガルーダ(2)等の弾幕STGやら雷電シリーズなんかの非弾幕、バトルガレッガ、グラディウスシリーズ、R-TYPE等、STGなら何でも好きです。
音楽がカッコイイSTGが特に好きで、並木学氏は最高!
ブログ内検索
忍者ブログ [PR]