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

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

先日作った触手のスクリプトは各関節の角度を考慮しないものでした。
この方法でも、触手っぽく動いてくれて良い感じだったのですが
出来れば各関節の角度を制限して表示させたいと思っていたので
角度制限有りの触手のスクリプトを作成してみた。・・・と言うか、やっと出来た^^;

触手のスクリプト(角度制限有り)

このスクリプトを起動させるとこんな感じ。
6ffcb28f.jpg
自機▲に向かって先端★が向かって来ますが、角度を制限しているので関節同士が
重なったりする事はありません。
(カーソルで自機を移動出来ます)

今回もシューティングゲームアルゴリズムマニアックスを見て作製したのですが
この考え方がとても難しく私の文章力では説明が難しいので、簡単に書きます。
アルゴリズムの考え方としては、2段階あって
1.先端から中心に向かって各関節の角度を決める
2.中心から先端に向かって各関節の位置を決める

まず角度の計算ですが各関節の動きとしては
1.回らない
2.右に回転
3.左に回転
のいづれかになります。
関節は自機の方を向くようにしたいので、計算したい関節からみた自機までの方向と
上記1.2.3.の方向を比べて一番近い方向に向く計算を選択すれば良いです。
この計算にはベクトルの内積を使用して、計算したい関節からみた自機までの方向と
上記3通りの場合の方向との間で内積を取ると、方向が一番近い内積が最大となります。
なので、この3通りの方法を比べて最大になる数値を回転角度として使用します。
この計算を先端の次の関節から(先端は回転しないので)中心まで計算して各関節の
角度を計算しておきます。

次に上記の回転角度を踏まえて表示位置の計算をします。
これは中心から先端に向かって計算していきます。
既に角度は決まっているので、後は根元側に隣接する関節からみた先端側に隣接する関節の
座標を計算すればOK。

・・・・・・うーん、日本語難しいです。
多分、この説明を読んでもよくわからないと思うので、気になる方は
シューティングゲームアルゴリズムマニアックスを買って読んでみて下さい^^;
今回の触手のスクリプトは、この本に載っていたものをHSP用で動くようにした感じなので。
それでも、相当作るの大変でした(汗)
なので、スクリプト自体もおかしい部分もあるかもしれないのですが、とりあえず今のところ
ちゃんと動いている風なので、これでエエ事にしてステージ4を作っていこうと思っています^^
PR
この記事にコメントする
お名前
タイトル
メールアドレス
URL
コメント
パスワード   Vodafone絵文字 i-mode絵文字 Ezweb絵文字
あ~なるほど・・・
機械的な触手ってこういう感じだったんですね。
たしかに理屈はわからないまでもこれは面倒臭いのが見て取れますね(苦笑)。

スクリプト自体は見ていないので詳しい事はわかりませんが
凄く良い動きだと思います。

ただサンプルだと触手の根元を少しでも跨ぐと触手の回転方向が
逆に向いてしまうのでそこは要工夫でしょうか?。

p.s.
今月発売の『Windows100%』を立ち読みしてみましたが
コンテスト作品はまだ載っていないみたいでした、
載るのは来月号なのかな?。
あり 2007/12/15(Sat)19:13:01 編集
無題
ありさん>
とても面倒くさかったです(汗)
しかも、角度制限なしの方が良い動きに思えてきて、どうしようかと悩んでいます^^;

一応、本編では触手にも当たり判定を入れる予定なので、跨ぐ前に死んでしまうので、このままでも良いかな?と思っています。

Windows100%誌は私も読みました。ちゅうか、ちゃんと送られて来ました^^
掲載されるのは、どうやら来月発売号のようです。
kt. 2007/12/16(Sun)03:32:35 編集
無題
kt.さん、こんにちは。ellerと申します。

触手のスクリプトは私も作ったことがあるのですが(やはりSTGアルゴリズムマニアックスを参考にしました)、ここまできちんと作ることはできませんでした。先端だけ動いて根元があまり動かなかったのです……。
kt.さんのスクリプトはきちんと動作しているようですね。素晴らしいです。

角度決めと位置決めをループ1つで行っている点に驚きましたが、それでも問題ないのですね。勉強になりました。
eller URL 2007/12/16(Sun)14:35:03 編集
無題
ellerさん>
こんにちは^^
私も最初作った時は根元があんまり動かなかったんですが、位置決めの時に先端からではなく根元から計算するように変更したら上手く動くようになりました。
その名残で、ループが一つしかないんです・・・
本来は角度計算と位置決め計算で分ける方が良いような気がします^^;
kt. 2007/12/16(Sun)23:27:46 編集
この記事へのトラックバック
この記事にトラックバックする:
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]