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

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

先日作ったギャラガ風な敵の動きなのですが、イマイチ動きが綺麗ではありませんでした。
で、色々と調べてみるとベジェ曲線という方法を使って移動させれば良いのでは?と思い
更に調べてみると、ベジェ曲線のWikiがあったので読んでみたのですが、何を書いてあるのか
さっぱり解りませんでした^^;

で、もっと調べてみると解りやすく解説されているページを発見↓
http://musashi.or.tv/fontguide_doc3.htm
ここにも書いてありますが基本的な考え方はこんな感じかと↓
s-bz.jpg
基準点、P0、P1、P2、P3があるとします。
それぞれの間(P0-P1間、P1-P2間、 P2-P3間)を直線で結び
さらにその間(P01-P12、P12-P23)を直線で結んだ線の間の座標P03がベジェ曲線となる
って感じ。
多分、言葉で書いても解らないと思うので、DXライブラリのページにあったベジェ曲線のサンプル
もっと自分なりに解りやすくした物を作ってみたので、動かしてみて下さい↓
ベジェ曲線サンプル(右クリック→対象をファイルに保存で保存して下さい)
実行ファイルも入れていますので、VC++が無くても動かせます。
これを動かすとこんな感じ↓
s-WS000686.jpg
座標P03の赤い点がP0からP3に向かって動いて行きます。

ベジェ曲線の計算方法としてはこんな感じ(DXライブラリのページあったサンプルそのままです)
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
u = ( 1.0 / DivNum ) * Counter ;

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] ;
P23[0] = ( 1.0 - u ) * P2[0] + u * P3[0] ; P23[1] = ( 1.0 - u ) * P2[1] + u * P3[1] ;

P02[0] = ( 1.0 - u ) * P01[0] + u * P12[0] ; P02[1] = ( 1.0 - u ) * P01[1] + u * P12[1] ;
P13[0] = ( 1.0 - u ) * P12[0] + u * P23[0] ; P13[1] = ( 1.0 - u ) * P12[1] + u * P23[1] ;

P03[0] = ( 1.0 - u ) * P02[0] + u * P13[0] ; P03[1] = ( 1.0 - u ) * P02[1] + u * P13[1] ;

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

Counter++;
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
それぞれの基準点の任意の分割場所(u)の座標を計算して、そのまた次の分割場所を計算して~
といった感じ。
ちなみに、uは1.0を超えないのが条件です。uが0から1に増えていく間の計算をするので。

P0-P1間で考えてみますと、uが0の時はP01の座標はP0と同じで、uが1の時はP01の座標は
P1と同じになります。
計算式を見てみると、( 1.0 - u ) * P0[0] + u * P1[0] となっています。
(P0[0]とP1[0]はそれぞれのx座標です])
プログラムの中ではu = ( 1.0 / DivNum ) * Counter ;なので、uは0から徐々に1に増えて
行きますので、例えばuが0.4だったとすると、( 1.0 - 0.4 ) * P0[0] + 0.4 * P1[0]ということになり
P0-P1間を6:4で割った時のx座標の位置がわかると言う訳です。
この計算をP0-P1間、P1-P2間、 P2-P3間、P01-P12間、P12-P23間で行うと最終的に
P03の位置が計算出来ます。
で、それをuが0~1に増えるまで繰り返し計算するとベジェ曲線が出来上がります。
サンプルでは4点で計算していますが、基準点を増やせばもっと複雑な曲線を作る事も可能です。

今回作ったプログラムでも基準点、P0、P1、P2、P3をキーボード操作で移動出来ますので
色々な曲線が作れて楽しいです^^
s-WS000687.jpg
後は、この仕組みをゲームに組み込めば良いのですが、移動処理を一から作らないと
いけないような気がして、閉口してます^^;

そして、このベジェ曲線を使えば綺麗なホーミングレーザーとかも描画出来るんではないかと
思っているのですが、動く敵の場合だと上手くいくのか?などと色々と悩んでおります。
とりあえず、コレを使ってギャラガっぽい敵の動きに挑戦してみますが、今後この話題が
出なかったら上手く出来なかったんだと思って下さい(汗)

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