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

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

先日作製したスクリプトを元に、とりあえず1本だけ触手を追加してみました↓

こんな感じで、2本もしくは4本の触手を追加しようかと思っているのですが
この触手、自機を追いかけている時は良いのですが、私の思った通りに動かそうと思うと
1本づつ別々にスクリプトを作らなければならないので、触手の数が増えれば増えるほど
大変やな~と今更気づきました^^;
なので、4本も触手があったら制御するの大変なので、2本だけにしようかと思っています^^;
PR
先日作った触手のスクリプトは各関節の角度を考慮しないものでした。
この方法でも、触手っぽく動いてくれて良い感じだったのですが
出来れば各関節の角度を制限して表示させたいと思っていたので
角度制限有りの触手のスクリプトを作成してみた。・・・と言うか、やっと出来た^^;

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

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

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

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

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

・・・・・・うーん、日本語難しいです。
多分、この説明を読んでもよくわからないと思うので、気になる方は
シューティングゲームアルゴリズムマニアックスを買って読んでみて下さい^^;
今回の触手のスクリプトは、この本に載っていたものをHSP用で動くようにした感じなので。
それでも、相当作るの大変でした(汗)
なので、スクリプト自体もおかしい部分もあるかもしれないのですが、とりあえず今のところ
ちゃんと動いている風なので、これでエエ事にしてステージ4を作っていこうと思っています^^
触手を表示させたいと思って色々と考えているのですが、なかなか上手くいきません^^;
シューティングゲームアルゴリズムマニアックスには、触手について二つの表示方法が
解説されていました。
一つは触手が回転出来る角度を考えない方法。
もう一つは、触手が回転出来る角度を制限する方法。

この回転出来る角度を制限する方法を作ろうとしていたのですが上手くいかなくて
とりあえず、角度を制限しない方法で触手を表示させてみたら上手く出来たので
角度を制限しない方法について書いてみます。

まず回転出来る角度を制限しない触手のスクリプトはコチラ↓
触手のスクリプト(角度制限なし)

このスクリプトを起動させるとこんな感じ。
25a1f69d.jpg
自機に向かって触手の先端が向かって来て、ある一定の限界まで伸びます。

考え方としては、まず中心(rx,ry)と先端(hx,hy)だけを考えます。
このスクリプトの場合は中心は移動しませんので、先端部分だけを考えれば良いので
先端を自機(tx,ty)に向かって移動させれば良いです。自機狙い弾と考え方は同じですね。
スクリプトで言うと
 r=atan(ty-hy, tx-hx) ;先端と自機との角度を求める
 etxv = cos(r)*v      ;先端のx軸方向の移動量
 etyv = sin(r)*v      ;先端のy軸方向の移動量
 hx=etxv+hx           ;先端のx軸の座標指定
 hy=etyv+hy           ;先端のy軸の座標指定
この部分で計算しています。

でも、このままだとどこまでも自機を追っかけてしまいます。
それだと都合が悪いので、腕の長さの限界を設定します。
これは、中心(rx,ry)から先端(hx,hy)までの距離を制限してやれば良いです。
dx=hx-rx
 dy=hy-ry
 d=sqrt((dx*dx)+(dy*dy)) ;自機と先端の平方根を求める
 if d>limith {           ;自機と先端とを比べて限界以上なら、それ以上先端を伸ばさない
  hx=dx*limith/d+rx
  hy=dy*limith/d+ry
 }
limithと言う制限の為の変数を用意して、中心(rx,ry)から先端(hx,hy)までの距離がlimith
を超えるようであれば、中心(rx,ry)から先端(hx,hy)までの距離をlimith以上にならないように
しています。
これで、中心と先端が表示出来ました。

次に中間部分の考え方ですが、これは隣り合う腕の平均値をとれば良いです。
例えば、この図のような感じで
s-WS000001.gif
x(1),y(1)を計算するとします。そうすると計算式は↓になります。
x(1)=(x(0)+x(2))/2
y(1)=(y(0)+y(2))/2
この計算を先端から中心まで計算してやれば、触手のようにゆっくりと動いてくれて良い感じです^^
スクリプトでは↓
x(0)=hx                         ;触手の中間の腕の初期位置x
y(0)=hy                         ;触手の中間の腕の初期位置y
 repeat emax-2,1                 ;中心と先端とを表示しないのでemax-2となる
  pos x(cnt),y(cnt)
  mes "○"                    ;触手の中間の腕の表示
  x(cnt)=(x(cnt-1)+x(cnt+1))/2;x軸の隣り合う腕の平均を求める
  y(cnt)=(y(cnt-1)+y(cnt+1))/2;y軸の隣り合う腕の平均を求める
 loop
こんな感じでリピートを使って計算しています。
ちなみに、リピートするリピートで囲って回数を増やすと滑らかに動くようになります。

なんか、さも自分で考えたように書いてますが、シューティングゲームアルゴリズムマニアックス
に載っていた事を書いているだけです(汗)

とりあえず、これでも触手っぽいキャラは作れそうなのですが、このスクリプトの動きは
どっちかと言うと生物的な感じなんですよね。
出来れば、機械的な動きをさせたいと思っているので、そうなるとやはり回転出来る角度を
制限して表示させるスクリプトを考えないと駄目っぽいんですが、今の所上手く動いてくれません^^;
私は絵が書けません。
なのでキャラクタは全てDOGAで作製しています。DOGAなら、あらかじめ沢山あるキャラクタを
組み合わせて作製する事が出来るので、絵が書けなくてもある程度の物は出来てしまいます。

ここでふと思いつきました。人物用のDOGAのようなソフトはないもんやろかと。
で、探してみるとありました^^
K.Hみっくす ふぁーすと えでぃしょんさんで配布されている「キャラクターなんとか機」
というソフトです。
このソフトもDOGAと同じで、いろんなパーツを組み合わせてキャラクタを作っていく感じ。
しかも、このソフトはHSP製のようです^^
f23f53bf.jpg
こんな感じで髪型や表情、衣服などを変更する事が出来ます。

更に、このキャラクタ自体を有志の色んな方が作製されており
それを追加していく事によって、作製出来るキャラクタを増やす事が出来ます。
で、ちょっと色々とダウンロードしてみてキャラクタを作ってみました↓
e88f4752.jpg
こんな画像、自分では100%書けませんが、このソフトを使えばすぐに出来てしまいます^^

で、このソフトで作った画像を試しにゲーム画面に表示させてみました↓
s-WS000004.jpg

4d01595a.jpg
人物キャラが表示されただけで、随分と印象が変わるなぁと感じました。

このキャラクタをゲームで使用するかどうかはわかりませんが
ストーリーなんかを考ようとした時に、人物キャラがいた方が良い気がします。
一応、宇宙から地上に降りていく展開になっているので、それに添った上手い話が
出来れば良いなぁと思っているのですが、なかなか思いつきません^^;
ステージ4を作り始めようと思っているのですが、ステージ4の構想としては
今まで中ボスとして登場していたロボットとの最終決着をつけるステージにしようと
思っていて、このロボットに触手のようなキャラをプラスして登場させたいと考えました。
イメージとしては、虫姫さまふたりの2ボスやサラマンダの1ボスとか
ファンタジーゾーンの4ボスみたいな感じ。

以前作った、多関節キャラの応用でもいけそうな気がしますが、実際にはこのスクリプトでは
キャラ1体づつに別々で計算をしている為、少ないキャラ数の場合は良いのですが
触手のような沢山キャラを使う場合では、キャラ1体づつにスクリプトを書いていては
とても時間がかかりますし、現実的ではありません。
しかも、このスクリプトの場合は角度の限界の概念が無いので触手に使うと
ちょっとおかしくなってしまします。
理想的なのは根元と先端の座標だけ計算して、中間は自動的に座標と角度を計算して
グネグネした感じで表示してくれるようなのが良いかなと思ってるんですが
まったく良い方法を思いつきませんでした^^;

どうしたもんかと思っていたのですが、以前購入したシューティングゲームアルゴリズムマニアックス
に触手の事が書かれていたのを思い出し、読んでみました。
読んでみて書いてある事は理解出来るのですが、実際に書いてある触手のアルゴリズムを
スクリプトにして動かそうとすると、上手くいかないんですよね・・・
あーでもない、こーでもないとやっている内に訳がわからなくなって来たので
今後はネットで検索してみる事にしました。

すると、とても良いスクリプトを発見!
HSP開発wiki小ワザ/多関節の所にあったスクリプトなのですが
このスクリプトを動かすと↓こんな感じ。
ad69a126.jpg
マウスの方に、触手の先端が向き、中間はグネグネ動きます。
こんな感じで表示させたかったんですよ!と思ってスクリプトの中身を見てみたのですが
何をどうしてるんだか全然わかりません(汗)
とりあえず、コレが出来るようにならないとステージ4の作製が始められないので
このスクリプトを解読して自由自在に触手を動かせるようになれるよう
頑張っている最中です^^

ちなみに、ちょっとだけ作製したステージ4はこんな感じ↓
s-WS000000.jpg
このロボットの肩の部分辺りから、触手を伸ばしたいなぁと考えています。

それと、HSPプログラムコンテスト2007事務局から連絡があり
Windows100%にSolid State SURVIVORが紹介され、付録DVD-ROM
へも収録されるようです!
他のWindows100%賞受賞作品も掲載されるようなので、扱いは小さいと思いますが
雑誌に載るってだけでも、非常に嬉しい感じで嘘みたいです^^
Twitter
カレンダー
03 2025/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]