トピック
こう subwars

SPの数を検出するには?

スプライトAを中心に、一定の距離にあるスプライトを数えるにはどうしたら良いでしょうか? 範囲内にはいくつのSPがあるかが知れれば十分ですが、出来れば管理番号が保存出来るとありがたいです
2そうだね
プレイ済み
返信[1]
親投稿
だにえる haru2016nen
処理速度を無視するならSPHITRCかな もしくは SPFUNCで 「範囲内にいたら管理番号を返す」 ような処理をさせるか。
1そうだね
プレイ済み
返信[2]
親投稿
だにえる haru2016nen
上のSPFUNCの場合、 PUSHとLENで数が調べられると思います。
0そうだね
プレイ済み
返信[3]
親投稿
みむ*mim hidemimtp
単発で求めるなら、対象となるSP番号の範囲をFORで回して、SPUSEDがTrueならAとの距離を計算。範囲内だったらスプライト番号を変数配列にPUSHしていけばいいと思います。 毎フレーム求めるならちょっと工夫しないと重くなる場合があるかも。 距離は(Xの差の2乗+Yの差の2乗)をルート(SQR)すれば求められます。
3そうだね
プレイ済み
返信[4]
親投稿
Villit nakahara1226
力技でなら、透明なSPを一つ用意して、 そいつを円形に回してぶつかった数を数えればいい
2そうだね
プレイ済み
返信[5]
親投稿
Hanzo rzsense
今までに出てきた皆さんのご意見のいいとこ取りをしたような関数を作ってみました。 添付のSPCTR関数は、管理番号Nのスプライトを中心に、半径Rの円内にあるスプライトの数を返します。ただし、管理番号Nのスプライトはカウントしません。 SPHITRCを使っているので、カウント対象のスプライトは全てSPCOLで衝突判定を有効にしておく必要があります。 ちょっとした改造で、カウント対象スプライトの管理番号を配列に保存する、なども可能になるはずです。 以上、ご参考まで。
3そうだね
プレイ済み
返信[6]
親投稿
こう subwars
皆さん回答ありがとうございます 浮上率低いので返信出来ずすみません SPHITRCというのは遅いのでしょうか?
0そうだね
プレイ済み
返信[7]
親投稿
みむ*mim hidemimtp
SPHITRCが遅いわけではなく、毎フレーム(1秒間に60回)、スプライト番号0~511の512枚に対して、その番号が存在するか、存在したら座標が範囲内か、という調査をすると大変な量ですよね。 調査するスプライト番号が例えば10~19までの最高10個、とかで決まっていれば重くはならないと思います。
2そうだね
プレイ済み
返信[8]
親投稿
Hanzo rzsense
SPHITRCと、三平方の定理による判定ならば、断然、前者の方が速いです。ただし、SPHITRCでは、円形領域の判定ができません。 先の私のSPCTR関数では、SPHITRCで調査対象スプライトを絞り、それらについてのみ、三平方の定理で距離の計算を行うことで、時間の節約を図ります。範囲内に余程スプライトがウジャウジャいない限りは、実用的な速度で運用できると思います。
2そうだね
プレイ済み
返信[9]
親投稿
あきと SideBurnsM
私もサンプルを作ってみました。 【X32473HE】ファイル名「CIRCLEIN」 下画面にランダムでスプライトが配置されて中央に魔女がいます。 画面をタッチすると円が表示されて、円の中のスプライトは赤くなります。 ソースの「@RADER」「@CIRCLEIN」の箇所が判定処理になります
3そうだね
プレイ済み