draw表示の当たり判定
投稿者 : tava(54.202.145.122.ap.yournet.ne.jp)
- 2008/11/04(Tue) 23:41
No.12023
|
|
|
|
|
久しぶりにTonyuでシューティングつくろうと意気込んでます。
それで質問なんですが、 今まではパーツのついた敵をつくるときは本体の動きに合わせるように新しいオブジェクトを生成していました。 しかし、今回はdrawsprite系で敵の周りにパーツを多数つければ多少軽いんじゃないかと思い試してみました。 当たり判定もうまくできたのですが、ロックオン系の攻撃をこちらから撃った場合敵の中心しか狙わないことに気づきました。 どうにか敵のパーツの座標も含めて計算できるようにはできませんでしょうか・・・。
|
Re: draw表示の当たり判定
投稿者 : マッキー(0x3d2cb532.rev.ncv.ne.jp)
- 2008/11/12(Wed) 01:38
No.12028
|
|
|
|
パーツの部分の座標も、設定しないと狙わないと思います。
プログラムが長くなると面倒になりますが、 パーツごとにオブジェクトを作ると処理が重くなるので、 そっちよりはマシだと思います。
久しぶりに、tavaさんのゲームやってみたいです。 特に、クロノスが印象に残ってます。 がんばってください。
|
Re: draw表示の当たり判定
投稿者 : N@N(cc-y5006.wsr.st.keio.ac.jp)
- 2008/11/12(Wed) 12:57
No.12029
|
|
|
|
パーツ数や大きさを自在にコントロールできて、パーツ数も付け足し自由なものを作ると、やはり配列に頼ることになるかと思います。 たとえば、
まず、パーツのx座標ptx、y座標pty、当たり判定pta、耐久pthpをすべて配列で(new Array())作ります。 while前に、本体を中心とした各パーツごとの座標(本体座標からのずれ)と判定サイズ、耐久をaddで加えておきます。
なお、この場合、さらにパーツ画像ptpを配列で作って画像を入れておけば、敵のwhile内で for (i=0;i<ptx.size();i++){ drawSprite(x+ptx.get(i),y+pty.get(i),ptp.get(i)); } と書くだけで、本体まわりのパーツ描画がなされます。
自機が追尾弾を発射するときは、従来通りパーツもち敵の本体を代入します。 弾側で敵が代入された変数をtとすると、while前に if (t.ptx.size()>=1){ r=rnd(t.ptx.size()); xx=t.ptx.get(r);yy=t.pty.get(r); }else{ xx=0;yy=0; } と書けば、自動的にロックが本体からランダムなパーツひとつに移ります。書き方を変えれば一番近いパーツ狙いも可能です。 あとは、(t.x,t.y)ではなく、(t.x+xx,t.y+yy)を追尾させることで弾は自動的に本体から(xx,yy)だけずれたところへ飛んでいきます。 そこにパーツが描画されているわけです。 当たり判定は、さきほど作っておいたptaとpthpを生かし、 if (t.ptx.size()>=1 && dist(x-(t.x+xx),y-(t.y+yy))<t.pta.get(r)){t.pthp.set(t.pthp.get(r)-1);} とすれば、当たれば1発1hpを減少できるでしょう。
この方法を用いるときは、パーツを持たない敵にも配列ptxを作っておかないとエラーになります。 また、ゲージを当ててロックするようなシステムに対応するのはかなり高難度になります。
オブジェクトが増えるのは負荷になりますが、オブジェクト式にするとシステムが圧倒的に単純になるということです。 for文を2個3個と増やすより、オブジェクトを作ってしまったほうが案外軽いかもしれません。
|
Re: draw表示の当たり判定
投稿者 : tava(54.202.145.122.ap.yournet.ne.jp)
- 2008/11/12(Wed) 21:38
No.12030
|
|
|
|
>マッキーさん ありがとうございます。 そう言ってもらえるととても励みになります。 久しぶりにTonyu触ってるので、何度も壁にあたりそうですが頑張ります。
>N@Nさん やはり配列を使うんですね。 具体的な例まで書いていただき助かります。 今までに配列を使ったことが少ないので上手く動くようにするのに時間がかかりそうですが、頑張ります。
|
|