HSPポータル
サイトマップ お問い合わせ


HSPTV!掲示板


未解決 解決 停止 削除要請

2006
0731
ぷりんシューティングの弾の煙4解決


ぷりん

リンク

2006/7/31(Mon) 21:43:00|NO.1678

ますさんの質問とダブってしまいますが、弾を下記のように相手に狙って撃っています。
そこで質問なんですが、移動する弾の後に煙のオビを付けたいのですが(レーザー)の方法を
どなたか教えてください。

弾角度 = atan( 自機Y-弾Y, 自機X-弾X )
弾X=弾X+cos( 弾角度 )*弾速度
弾Y=弾Y+sin( 弾角度 )*弾速度



この記事に返信する


かきしす

リンク

2006/8/1(Tue) 01:07:36|NO.1681

とりあえず概念的なお話から。
典型的には2つのパターンがあります。

一つは、
 弾が一定間隔で『煙』を発生させ、その煙はその場に留まり、
 小さくなる(あるいは霧散する)アニメーションを経て消える。
 ボンバーマンが、連続して すぐに爆発する爆弾を置いていくイメージ。
 続けて煙を置いてゆくことで、尾を引いているように見せる。

もう一つは、
 弾の座標を配列化し、数フレーム分の座標を記憶させる。
 (毎フレーム、座標データはスライドさせ、常に最新数フレーム分の座標に更新する)
 中1個くらい空けて、2・4・6・8・・・フレーム前の座標に、
 だんだん小さく(あるいは薄く)なるパターンを表示させる。
 カルガモの親の後を子供が付いていくイメージ。 
 ずばり、尾が先頭を追いかける。

前者の方が少しボコボコしたアニメとなるので、『ミサイル&煙』向き
後者はスムースに流れるので『レーザーとか、竜などが吐く炎』向き。
 ミサイルで使うと ちょっと不自然かも。



かきしす

リンク

2006/8/1(Tue) 14:31:55|NO.1690

一応 殴り書きだけど、サンプルも書いてみました。
僕自身初めて作って見たんで、無駄が多いかもしれないけど
考え方は合っていると思います。

マウスカーソルを目標に、レーザータイプとミサイルタイプが交互に発射されます。
違いが・・・わかるかな?


screen 0,320,240 sdim 煙chr,10 煙chr="●","◎","※","*","*","+","+","・","・","・" ddim 煙A_X,20 :ddim 煙A_Y,20 ddim 煙B_X,20 :ddim 煙B_Y,20 :ddim 煙B_flg,20 *メイン ;########################## repeat 20 煙A_X(cnt)=10.0 : 煙A_Y(cnt)=230.0;  弾位置初期化 loop 弾角度 = atan( mouseY-煙A_Y(0), mouseX-煙A_X(0)); マウス座標目掛け、角度設定 repeat 100; とりあえず弾の寿命を100ループに。 redraw 0:color 0,0,0:boxf 0,0,320,240 repeat 20; 尾の座標をスライドさせる。 煙A_X(20-cnt)=煙A_X(20-cnt-1) : 煙A_Y(20-cnt)=煙A_Y(20-cnt-1) loop 煙A_X(0)=煙A_X(0)+cos( 弾角度 )*5 : 煙A_Y(0)=煙A_Y(0)+sin( 弾角度 )*5; 先頭の移動 repeat 10,1;----------------------------- tmp=20-cnt*2; 先頭及び 尾の表示 pos 煙A_X(tmp),煙A_Y(tmp) : color 255-tmp*10,255-tmp*10,0 mes 煙chr(10-cnt) loop;------------------------------------ redraw 1:await 10 loop ;########################## ↑ レーザータイプ 煙B_X(0)=310.0 : 煙B_Y(0)=230.0 : 煙B_flg(0)=9.0 煙B_cnt=0 弾角度 = atan( mouseY-煙B_Y(0), mouseX-煙B_X(0)); マウス座標目掛け、角度設定 repeat 100; とりあえず弾の寿命を100ループに。 redraw 0:color 0,0,0:boxf 0,0,320,240 煙B_cnt=煙B_cnt+1;  一定間隔で煙を発生させるためのカウンター if 煙B_cnt=5 { flg=0 repeat 19,1 if (flg=0)and(煙B_flg(cnt)<=0) {;  空いている煙を探し、発生させる。 煙B_X(cnt)=煙B_X(0) : 煙B_Y(cnt)=煙B_Y(0) : 煙B_flg(cnt)=9.0:flg=1 } loop 煙B_cnt=0 } repeat 19,1; 煙のアニメーションを進行させる。 if (煙B_flg(cnt)>0) :煙B_flg(cnt)=煙B_flg(cnt)-0.5 loop 煙B_X(0)=煙B_X(0)+cos( 弾角度 )*5 : 煙B_Y(0)=煙B_Y(0)+sin( 弾角度 )*5; 先頭の移動 repeat 20,1;----------------------------- tmp=20-cnt; 先頭及び 尾の表示 if 煙B_flg(tmp)>0{ tmp2=9-int(煙B_flg(tmp)) pos 煙B_X(tmp),煙B_Y(tmp) : color 255-tmp2*10,255-tmp2*10,0 mes 煙chr(tmp2) } loop;----------------------------- redraw 1:await 10 loop ;########################## ↑ ミサイルタイプ goto *メイン



ぷりん

リンク

2006/8/1(Tue) 14:57:35|NO.1691

かきしすさん! 概念的なお話しからサンプルコードまで
かきこしていただき感謝いたします。イメージはわかっているももの
形に出来ずなやんでいましたが。これでスッキリ。このサンプル!
わかりやすくてありがたいです。参考にさせていただきます。こんなに早く
レスもらえるなら、もっと早くかきこすべきだったと思います。



かきしす

リンク

2006/8/1(Tue) 16:25:23|NO.1692

ぷりんさん、参考になったようで幸いです。

ただ、たまたま空き時間が合って、ちょっと興味のある内容だったから
即興でサンプルを作って見ただけなんで、
いつでも素早い回答が得られるとは限りませんよ。

それに『自分でぎりぎりまで考えた上で質問する』と言うこともとても大切なので
安易に質問に走らないようにしてくださいね。



ONION software Copyright 1997-2023(c) All rights reserved.