まったくのプログラミング素人の筆者がC++/HSPを使用してSTG(シューティングゲーム)を作っていく過程を書くブログでしたが最近は脱線気味。プログラミング以外にも、ゲーム関連の記事、日々の戯言など。
×
[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。
触手を表示させたいと思って色々と考えているのですが、なかなか上手くいきません^^;
シューティングゲームアルゴリズムマニアックスには、触手について二つの表示方法が
解説されていました。
一つは触手が回転出来る角度を考えない方法。
もう一つは、触手が回転出来る角度を制限する方法。
この回転出来る角度を制限する方法を作ろうとしていたのですが上手くいかなくて
とりあえず、角度を制限しない方法で触手を表示させてみたら上手く出来たので
角度を制限しない方法について書いてみます。
まず回転出来る角度を制限しない触手のスクリプトはコチラ↓
触手のスクリプト(角度制限なし)
このスクリプトを起動させるとこんな感じ。
自機に向かって触手の先端が向かって来て、ある一定の限界まで伸びます。
考え方としては、まず中心(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以上にならないように
しています。
これで、中心と先端が表示出来ました。
次に中間部分の考え方ですが、これは隣り合う腕の平均値をとれば良いです。
例えば、この図のような感じで
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
こんな感じでリピートを使って計算しています。
ちなみに、リピートするリピートで囲って回数を増やすと滑らかに動くようになります。
なんか、さも自分で考えたように書いてますが、シューティングゲームアルゴリズムマニアックス
に載っていた事を書いているだけです(汗)
とりあえず、これでも触手っぽいキャラは作れそうなのですが、このスクリプトの動きは
どっちかと言うと生物的な感じなんですよね。
出来れば、機械的な動きをさせたいと思っているので、そうなるとやはり回転出来る角度を
制限して表示させるスクリプトを考えないと駄目っぽいんですが、今の所上手く動いてくれません^^;
シューティングゲームアルゴリズムマニアックスには、触手について二つの表示方法が
解説されていました。
一つは触手が回転出来る角度を考えない方法。
もう一つは、触手が回転出来る角度を制限する方法。
この回転出来る角度を制限する方法を作ろうとしていたのですが上手くいかなくて
とりあえず、角度を制限しない方法で触手を表示させてみたら上手く出来たので
角度を制限しない方法について書いてみます。
まず回転出来る角度を制限しない触手のスクリプトはコチラ↓
触手のスクリプト(角度制限なし)
このスクリプトを起動させるとこんな感じ。
自機に向かって触手の先端が向かって来て、ある一定の限界まで伸びます。
考え方としては、まず中心(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以上にならないように
しています。
これで、中心と先端が表示出来ました。
次に中間部分の考え方ですが、これは隣り合う腕の平均値をとれば良いです。
例えば、この図のような感じで
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
こんな感じでリピートを使って計算しています。
ちなみに、リピートするリピートで囲って回数を増やすと滑らかに動くようになります。
なんか、さも自分で考えたように書いてますが、シューティングゲームアルゴリズムマニアックス
に載っていた事を書いているだけです(汗)
とりあえず、これでも触手っぽいキャラは作れそうなのですが、このスクリプトの動きは
どっちかと言うと生物的な感じなんですよね。
出来れば、機械的な動きをさせたいと思っているので、そうなるとやはり回転出来る角度を
制限して表示させるスクリプトを考えないと駄目っぽいんですが、今の所上手く動いてくれません^^;
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が特に好きで、並木学氏は最高!
ブログ内検索
最古記事