トピック
キルル2 kiruru2

SPHITSP(A,B)について

SPHITSPは、引数が2つの場合、その2つのSPが衝突しているかを判定して、衝突していれば1、衝突していなければ0を返します このとき、なぜかマスク値が無視されます SPCOLのヘルプには、『互いのビットのANDをとり、0であれば衝突していないとみなす』と、あります 画像のコードを実行すると、画面に0が表示されるはずだと思いますが(1 AND 0 は0であるため)、結果は1になります これは仕様でしょうか? 私のプチコンのバージョンは最新です
6そうだね
プレイ済み
返信[1]
親投稿
キルル2 kiruru2
2つのスプライトの衝突判定をする場合、マスク値を有効にするには、 SPHITSP(A,B,B)>-1 と書くしかないようです
2そうだね
プレイ済み
返信[2]
親投稿
そもそも、SPHITSP()で2つのスプライトの管理番号を指定しているので、あえてマスクを無視したいときに使う前提があるのかも…
4そうだね
プレイ済み
返信[3]
親投稿
キルル2 kiruru2
言われてみると、そうかもしれませんね
0そうだね
プレイ済み
返信[4]
親投稿
みむ*mim hidemimtp
いろいろ試してみましたが、確かにご指摘の通り。 でもこの書き方でいつもやっているような・・・あー、でも相手番号を調べることが多いからこの書き方はあまり使っていないかも。 ヘルプ見ても、最初のご指摘が正しい気がしますし、バグの可能性もあるのでは? (SPHITSPって、存在しないSP番号を指定してもエラーが出ないんですね。以前からこうだったっけ・・・?何かおかしい??)
1そうだね
プレイ済み
返信[5]
親投稿
リファレンスには特記がないので、引数2つの場合のSPHITSPがおかしい感じかなぁ。 引数1つ(3つ)ならマスク値も &h0が有効そうだし。(他のマスク値とヒットしない) 他は管理番号が返るのに2つのときだけ TRUE/FALSE が返るから処理も違ってそうだし、マスク値みてなさそうな感じも。 意図的にマスクを無視するなら、せめてマスク値を無視するためのフラグがSPHITSPにないとって感じ。
1そうだね
プレイ済み
返信[6]
親投稿
mkIIのリファレンスに、SPHITSP関数 ではなくて SPHIT関数(mkIIのみ)が SPCOL のマスクの影響を受ける衝突判定って書いてあって、 3号でSPHITSP()に統合されたときにマスク値を見忘れてるって感じも? mkIIのSPHITSP関数はマスクを見ないので、3号でマスクを見ない衝突判定が必要ならやっぱりマスク見る見ないフラグか、3号のリファレンスにちゃんと書かないとって感じかも。
1そうだね
プレイ済み
返信[7]
親投稿
ツララ LongIceSword
衝突して「いない」判定を取るときは戻り値が-1かどうかがポイントなんじゃないです?
1そうだね
プレイ済み
返信[8]
親投稿
みむ*mim hidemimtp
パラメーターが1つ又は3つの場合は衝突した相手のSP番号を返す(衝突していなければ-1)ですが、パラメーター2つの場合は衝突したかどうかのフラグを返す仕様のはず。 私もそのへんかと思ってSP番号を3と4にしてみたんですが、SPCOLのマスクが0でもやっぱり1を返すので、変だなぁと。 あともしかしてマスクを0にすると初期値の&HFFF・・になるのか?と思ったりして、マスクを1と2(01と10なのでFALSEのはず)にしてみても、やっぱり1が返る。 どなたかスッパリと答えられる古株な方おられませんかね。
0そうだね
プレイ済み
返信[9]
親投稿
ツララ LongIceSword
DEF命令でSPHITSP命令と同じ動作をする命令を他の命令を駆使して自作して、中身の処理を想像してみたらいいんじゃないです? そもそもSPCOL命令で設定するマスク値云々の前に、SPCOL命令で管理番号を指定していないスプライトはSPHITSP命令の対象外のはずなので マスク値を使って-1を返す「衝突していない」判定の方が特殊な場合なんじゃないです? 一般的じゃあないプチコン独自の仕様かもしれないですし 別にスッパリと答えが出なくても引数を省略しなければ特に不都合無いみたいですし 色々と理由を想像するの楽しいじゃないですか。 色々な想像からひょうたんから駒みたいなことが起きるかもしれないですし。
0そうだね
プレイ済み