まったくのプログラミング素人の筆者がC++/HSPを使用してSTG(シューティングゲーム)を作っていく過程を書くブログでしたが最近は脱線気味。プログラミング以外にも、ゲーム関連の記事、日々の戯言など。
×
[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。
先日作成したホーミングレーザープログラムを使って、ちゃんと画像で表示するようにしてみた。
こんな感じ。
斑鳩の解放のイメージで作ってみましたが、なかなか良い感じではないかと思っとります^^;
プロジェクトファイルはコチラ↓
https://blog.cnobi.jp/v1/blog/user/63629cf35d5259ece1529ed13f0745b1/1256604959
実行ファイルもいれてあるのでVC++が無くても動かせます。
Zキーでレーザー発射。上下左右で自機移動が出来ます。
と、なんか簡単に出来たみたいに書いてますが、とーーーーーーっても苦労しました。
当初は画像を数珠繋ぎにして回転させて表示させようとしたのですが速度の変わらない
レーザーならそれでも良いのですが、今回はレーザーの速度が変化するので上手く
繋がらないんですよね。
こんな感じで、綺麗に繋がってくれません。
上手く出来ん・・・とTwitterでつぶやいていたら、色んな方が方法を教えてくれました^^
で、教えていただいたおかびの悠々制作記さんのコチラのエントリを参考にさせて頂いて
やっと出来たって感じです。
考え方としては上記のエントリに書かれていますが、DrawModiGraph関数を使って画像の
4点を計算して表示させる方法。
こんな感じです↓
(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へ
こんな感じ。
斑鳩の解放のイメージで作ってみましたが、なかなか良い感じではないかと思っとります^^;
プロジェクトファイルはコチラ↓
https://blog.cnobi.jp/v1/blog/user/63629cf35d5259ece1529ed13f0745b1/1256604959
実行ファイルもいれてあるのでVC++が無くても動かせます。
Zキーでレーザー発射。上下左右で自機移動が出来ます。
と、なんか簡単に出来たみたいに書いてますが、とーーーーーーっても苦労しました。
当初は画像を数珠繋ぎにして回転させて表示させようとしたのですが速度の変わらない
レーザーならそれでも良いのですが、今回はレーザーの速度が変化するので上手く
繋がらないんですよね。
こんな感じで、綺麗に繋がってくれません。
上手く出来ん・・・とTwitterでつぶやいていたら、色んな方が方法を教えてくれました^^
で、教えていただいたおかびの悠々制作記さんのコチラのエントリを参考にさせて頂いて
やっと出来たって感じです。
考え方としては上記のエントリに書かれていますが、DrawModiGraph関数を使って画像の
4点を計算して表示させる方法。
こんな感じです↓
(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へ
PR
この記事にコメントする
カレンダー
10 | 2024/11 | 12 |
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 |
リンク
カテゴリー
最新記事
(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が特に好きで、並木学氏は最高!
ブログ内検索
最古記事