コミュニティアイコン プチコン 非公式コミュニティ トピック

アバター
海月ちゃん ◆jfoZX/rRZr9p
2019/8/22 19:35
協力
俗・めり込みバグの修正
だいぶ前に作った衝突テストのめり込みが未だに直せてなくて久々にプチコン開いたんじゃけど結局直せないままでいる…
前にトピック開いたりしたけど解決せず
少しだけわかりやすい(当社比)ようにコメントアウト付けたから今度こそ解決するはず(無責任)
【T5DX234J】

コメント

アバター
Na 2019/8/22 20:36 ◆QoELVrBXBQCI
91行目、右に壁があるかを判定するところだと思うのですが、
このIF文の条件って、「(I,Y)の位置に壁があったら」ってことですよね。
そうすると、壁があったとき、X=I、つまり壁がある位置にプレイヤーを移動させてませんか?
つまり、X=I:XX=Xではなく、X=XXとして位置を移動前に戻すのが正しいかと。
左、下、上の判定も同様です。

違ってたらすみません。
追記 違ってました。X=XXだと壁よりさらに手前で止まってしまいます。
アバター
海月ちゃん 2019/8/22 20:53 ◆jfoZX/rRZr9p
作ったのだいぶ前だったからよく覚えてないけど
移動後の座標をY、移動前の座標をYYに入れてその間を1ドットずつ検査していくんじゃけど、その基準が
操作キャラの外側(ホーム座標が8,15なので-16と+1(←何故かズレるのでさらに+1されてる))が壁と同じ座標になるとストップ
の、はずなので移動した時点では壁の隣に来る…はず(はず)
アバター
Na 2019/8/22 21:09 ◆QoELVrBXBQCI
よく考えたらX=XXは間違いでした。

>ホーム座標が8,15なので
SPHOME 0,7,15と書いてあるんですが...

>操作キャラの外側が壁と同じ座標になるとストップ
なるほど、外側か
それだったら、そのストップした位置では外側(キャラの1ドット隣)に壁がある状態のままなのですから、BEEPが鳴り続けるのは正しい挙動だと思いますよ。
アバター
海月ちゃん 2019/8/22 21:13 ◆jfoZX/rRZr9p
あ、よく見たら色々間違えてましたね
ホーム座標7でした。
あと右方向以外beep入って無かったから床触れててもならないんだw
着地直後はピってなるからそれかなって思ってたけど右方向のbeepがなってたみたいですね。
しかし、まだ上方向の問題がありますね。何故か天井でBボタン長押し(上昇)しながらだと横移動が出来ないんですよねこれ
アバター
海月ちゃん 2019/8/22 21:15 ◆jfoZX/rRZr9p
というか+1しないとめり込む現象も謎だしカメラ動作しないと1ドット浮くのもどうにかしたいな
アバター
Na 2019/8/22 21:39 ◆QoELVrBXBQCI
>何故かBボタン長押し(上昇)しながらだと横移動が出来ないんですよねこれ
確かに上昇中は横移動できますが天井にぶつかっていると移動できませんね。
このプログラムでは右→左→下→上の順にチェックしていますよね。
天井にぶつかっているとき、まず右をチェックした瞬間はまだ上にめり込んでいる状態なので、右にも壁がある判定になってしまい、動かないのではないでしょうか。
だから上を先にチェックすればいい...と言いたいところですがそうするとこんどは左右の壁に触れている間上昇できなくなってしまいます。
それで、解決策ですが、Y=Y+Aを右左のチェックの後にすればいいのです。
つまり縦方向にめり込んでいない状態で右左をチェックし、横方向にめり込んでいない状態になったうえで上下に動かし、上下をチェックすればいい、ということです。

>+1しないとめり込む現象
ホーム座標が7,15なので、右方向は+9、左は-8、下は+1、上は-16であってると思いますよ。

>カメラ動作しないと1ドット浮く
カメラが動作すると1ドット沈むほうが間違いです。
(原因が分かったとは言ってない)
アバター
海月ちゃん 2019/8/22 22:03 ◆jfoZX/rRZr9p
Y=Y+Aは盲点でしたね
おかげで問題がひとつ解けました!ありがとうございます
アバター
Na 2019/8/22 22:07 ◆QoELVrBXBQCI
カメラが動作すると1ドット沈む問題、解決しました。
Y座標は、Xと違って小数になりますね。
だから、FORで1ずつ調べると間を飛ばしてしまいます。
Y方向をチェックするFOR文のところをSTEP 0.1、STEP -0.1とかに変えたらBEEPはならなくなりました。
あとはSPOFSです。YもBYも小数になるので、(FLOOR(Y)-FLOOR(BY))*SCLとすると、表示も沈まなくなりました。
アバター
海月ちゃん 2019/8/22 22:09 ◆jfoZX/rRZr9p
ちょうどこっちでもカメラめり込み問題解決しましたw
なんかすみませんw
アバター
海月ちゃん 2019/8/22 22:12 ◆jfoZX/rRZr9p
BY=Y-○○をBY=BY-1 ELES BREAKに書き換えてfor step0で囲んでみたらなんかよくわかんないけど行けました
アバター
海月ちゃん 2019/8/22 22:26 ◆jfoZX/rRZr9p
今思うとなんであんなゴリラみたいな書き方してたんだろうって思うな
常識的に考えて+102とかから-100しても2の誤差が出たりするじゃん
さてはわし、馬鹿だな?(名推理)
STEPを小数にするのもありでしたね
ただループ回数が10倍くらいになったりするので加速度が高い(速い?)と処理落ちしたりするんですよね
アバター
ツララ 2019/8/23 1:27 ◆ArUdBYOYME1V
判定の式を不等号でやれば加速度がいくら高くても判定は一回で済むし
めり込まないんじゃないんです?
背景キャラクターをラインで区分けして文字列に変換して判定に使ってやれば
障害物と操作キャラクターの位置関係も一発で出せますし
アバター
海月ちゃん 2019/8/23 3:48 ◆jfoZX/rRZr9p
判定の式は加速度が尽きるか障害物に当たるかまで繰り返すので不等号は関係ないですね。
文字列の判定も結局は隣接するブロックしか判定が出せないのでやっても変わらないです。
アバター
でんぺん 2019/8/23 8:48 ◆HfSy5ayxtyTa
確かにループを細かくするのは速度的に気になりますよね。
基本は当たっていたら戻すだと思うので当たるまで細かく加算は重いと思います。
BGのようにブロック的な背景は最小サイズが決まっているので、それも考慮して処理すると効率が上がりますね。
例えば16ドットサイズのブロックなら少なくとも16ドット以上の移動量でなければ1回の加算ですり抜ける事はないので、そこまでは一気に足して判定しても問題ないと思います。
ぶつかった時も対象が綺麗に並んだ16ドットサイズのブロックならどこに戻せばぶつからないかは1回の計算で出せるはずです。
この考え方に移動量が多すぎる時の事も考慮して処理を作れば今よりは速くなると思いますよ。
アバター
海月ちゃん 2019/8/23 11:39 ◆jfoZX/rRZr9p
16ドットごと(ブロック幅)に判定をするというのもありですね
ですがこのプログラムはSCL(スケール)を入れた状態で計算に入るのでブロック幅が常に16ドットとは限らないんですよね
アバター
海月ちゃん 2019/8/23 11:47 ◆jfoZX/rRZr9p
とりあえず皆さんの協力のおかげでSCL=1の時めり込みと1ドット浮く現象は改善されました
次は放ったらかしにされてたスケール関係をやろうと…思ってたんじゃけどまた壁にぶつかりました
【E5L47EQV】
アバター
海月ちゃん 2019/8/23 11:54 ◆jfoZX/rRZr9p
今回もcameraが元凶ですね
カメラが有効状態でスケール変更をすると何故かめり込む&すり抜けが発生します
Xボタン長押し(加速度0)状態で十字上下でスケール変更するとキャラの座標がズレているのがわかりますがわしは阿呆なので理由はわかりませぬ
アバター
Na 2019/8/23 12:25 ◆QoELVrBXBQCI
原因わかりました!
SPOFSは画面のドット単位なので、(X-BX)*SCL,(Y-BY)*SCLであっているのですが、
BGOFSはキャラのドット単位なので、例えばサイズ2倍の時にBGOFSで1ドット動かすと、画面では2ドット動くのです!
だからBGOFS 0,BX,BY
これで動きます。
アバター
海月ちゃん 2019/8/23 13:39 ◆jfoZX/rRZr9p
わーお本当に一瞬で治った!ありがとうございます。
これであとは倍率0.5以下になった時に1ドットめり込む現象の原因さえ分かれば完璧だな

追記 壁判定のところの(I-BX-○○)×SCL辺りで誤差が出ているのではと予想してみるが改善策が思いつかないな
アバター
Na 2019/8/27 14:35 ◆QoELVrBXBQCI
今更ですが解決策。
画面座標を使うと座標が小数になって誤差が出ます。
だったらキャラ座標を使えば誤差は出ないのでは?
BGGET(0,(I-BX+9)*SCL,(Y-BY)*SCL,1)

BGGET(0,(I+9)/16,Y/16,0)
SCLがどんな値でも使えます。
ただしマップ外にでるとOut of rangeするのでそこはチェックする必要があります。

コメントを書く

  • こちらは「プチコン3号」「プチコンBIG」など、プチコンシリーズに関する話題を扱ったコミュニティです
  • プチコンシリーズにまったく関係ない書き込みはご遠慮下さい。削除の対象となります
  • こちらにはその他のゲームや雑談のコミュニティはなく、作る予定もありません (ひとりで管理できないため)。ごめんなさい
  • ユーザー登録なしで書き込みができます
  • 秘密の合い言葉は成りすましの防止 (トリップ機能)、書き込みの編集時の本人認証に使用します
  • 秘密の合い言葉に他人に推測されやすい言葉、他サービスと同じパスワードは入力しないでください。
  • 書き込むと、投稿時に入力したお名前と秘密の暗号が記憶され、ログイン状態になります

- WEB PATIO -