トピック
うヌシ geoliner

SPHITSPで取得するスプライトの優先順位について

色々試行錯誤してみましたが、どうにも分からなかったのでこちらで質問させて頂きます。 ①SPHITSPで取得するスプライト番号には優先順位があるのでしょうか? ②優先順位があるならば、何が基準となっているのでしょうか? ③優先順位を変える方法はあるのでしょうか? 以下、上記の質問に至った詳細。 今作成中のSLGで、回復マスを設けようと思い、実装してみました。 選択用カーソルをスプライト番号200で用意しており、味方は101~103です。敵は151~153で、回復マスは120で登録しています。 味方が回復マスの上にいてカーソルを合わせると、SPHITSP(200)は味方のスプライト番号になりますが、敵が上にいる場合はSPHITSP(200)が回復マスの120になります。 これを敵のスプライト番号にしたいのです。
2そうだね
プレイ済み
返信[1]
親投稿
しろ sshiro1shiro
確認したわけでないが、投稿内容から法則性を考えるとSPが小さい物から順に取得されるのかな、つまり、回復マスを160位にしてみるとかかな。回復マスはBGで管理してBGゲット使うって根本改造な方法とか回復マスゲットしてしまったら一時的に回復マスヒット無効にして再度ヒットさせるとかも個人プログラムならしそうかも、まあマスゲーならヒット関数使わずに配列で管理するのもアリかもしれないが。
1そうだね
プレイ済み
返信[2]
親投稿
しろ sshiro1shiro
ついでに個人的にマスゲーでヒット関数が向いていないと考える理由はヒット関数の大きい利点である『SPの大きさ』を考慮した細かいヒット判定をあんまり必要としていないからかな、キャラ毎にLSB 16ドット単位のx座標y座標を配列で覚えてループを回してあげたら簡単にキャラがわかるわけだし。自ゲームではこれやらなくて後悔してたりするが…(移植前はやってたんだがヒット関数が気になって使うと…)。
0そうだね
プレイ済み
返信[3]
親投稿
うヌシ geoliner
>しろさん ありがとうございます。 やはり若い番号から参照する感じっぽいですよね。 どうにも配列というものがよく分からなくて、とにかく分かる範囲で作ろうと思って作りましたので恐らく非効率的な部分もあるかと……。 もしかすると、他の方が補足して下さる可能性もあるかと思いますので、まだもう少し回答を受け付けようと思います。
0そうだね
プレイ済み
返信[4]
親投稿
Villit nakahara1226
横槍失礼! SPHITSPでは、 ①「コレがどれに当たっているのかを判定する」 ②「アレからソレまでの範囲だけで、コレがどれに当たっているのかを判定する」 ③「コレとアレが接触しているかどうかを判定する」 この3つの種類の判定が可能です。 なので、2番、もしくは3番が使えるのではないでしょうか?具体的な書き方は忘れたので、SPHITSPのヘルプを参照してください。
0そうだね
プレイ済み
返信[5]
親投稿
Villit nakahara1226
公式から書式引っ張ってきました。 ①が変数 = SPHITSP( 管理番号 ) ②が変数 = SPHITSP( 管理番号,先頭ID,末尾ID ) ③が変数 = SPHITSP( 管理番号,相手ID ) 例えばですが、②で「100~200」という設定をしていた場合、 0と100に同時に接触すると、100の方が優先されます。
0そうだね
プレイ済み
返信[6]
親投稿
うヌシ geoliner
>villitさん わざわざ調べて頂いてありがとうございます。 SPHITSPの数値の域を指定できるのは分かるのですが、今回は回復マス単体にカーソルを合わせた際に説明が出るようにしたいので、指定領域外の番号を振ってしまうとそれが出来なくなるんです……。 調べて下さったのは本当にありがたいのですが、今回は両立をさせたいのでまた別の解決法を探してみます。
1そうだね
プレイ済み
返信[7]
親投稿
スー thanks_0u0
うーん、単純に順番に範囲検索で良いのではないでしょうか?(・u・) H=SPHITSP(200,101,103) IF H==-1THEN H=SPHITSP(200,151,153) IF H==-1THEN H=SPHITSP(200) ENDIF IF H!=-1THEN 説明とかうにゃうにゃ ENDIF
0そうだね
プレイ済み
返信[8]
親投稿
うヌシ geoliner
>スーさん サンプルまで書いて頂いて、助かります。 ENDIF等がまだ理解出来ていないので、勉強して応用できるか試してみます。 ありがとうございます。
1そうだね
プレイ済み
返信[9]
親投稿
スー thanks_0u0
ENDIFは、IFが複数行になったときなどに「IFはここまでで終わりね!」って言うためのものですー( ´ ω ` ) サンプルでやってることは、SP200と味方の当たり判定→当たってなければ敵との当たり判定→当たってなければその他の当たり判定、ってだけですよー。
0そうだね
プレイ済み
返信[10]
親投稿
キルル2 kiruru2
スプライトの当たり判定には優先順位があり、常にスプライト管理番号の小さいものが優先されます これは、変更できません この場合、範囲を指定して2回判定をした方が良いかも知れませんね ここからは推測となりますが、SPHITSPで行われている処理を書くと J=-1 FOR J=0 TO 511 '512-1 IF 衝突 THEN J=I BREAK NEXT RETERN J このようになるのではないでしょうか
0そうだね
プレイ済み
返信[11]
親投稿
そひ ladixsofiya
マップもSPでやってるぽいので SPHITが大前提となると スーさんの検索方法が追加する要素もなくて手間もかからなそうかな。以下 考えの1つ程度に。 [単純な考え] 地形のみ判定する用の透明カーソル(HIDE不可)を追加する。考え方は 回復マス追加前の状態と同じ事なので難しい事はなさそうかな。ほんの少しだけ楽する方法はSPLINKを参照。 [他者視点的考え]※回復マスSPを 敵SPより大きくする必要有り キャラ移動後にでも キャラと回復マスとの当たりを取って 結果をSPVARにでも代入しておく。カーソルの当たりはキャラが優先される状態になってるので 結果を読み込んで地形を判定すればOK。ちょいと手間かつ これでやるならBG推奨になりそうな予感。
0そうだね
プレイ済み
返信[12]
親投稿
うヌシ geoliner
>スーさん 何となくですが、理解できました! サンプルは種類毎に優先順位を付けて、順を追って処理しているという事ですね。 >キルル2さん なるほど、確かに若い数字が優先されるとなると、その処理になってそうですね。 >そひさん 解法を二つも書いて頂きありがとうございます。 一先ず皆さんの助言を元に試行錯誤してみます! 皆さん、ご協力ありがとうございます! 色々と試してみて、しっくり来る方法でやってみようと思います!
1そうだね
プレイ済み