きのもの! 2019/03/10 00:00

マップ判定解決

解決しました。
あぁ頭痛かった…。

とりあえず

例)左側の壁にぶつかった場合の位置補正

  • argument0.x:オブジェクトの位置X(今回は中心が原点)
  • sbl:sprite_get_bbox_leftで引っ張った値(左当たり判定の位置)
  • ox:中心点X
  • -1:判定の都合上…。
  • $FFFFFFE0:数値を32単位にしたいのでこの値。(15→0/36→32/99→96 って感じ)
  • +32:これが無いとぶつかった壁よりさらに1チップ左にぶっ飛ぶ(判定位置の都合)
  • 32は今回のマップチップのサイズ。

◇ ( argument0.x + sbl - ox - 1 )の位置が壁だった場合。
argument0.x = ( ( argument0.x + sbl - ox - 1 ) & $FFFFFFE0 ) + ( ox - sbl ) + 32;

なんかこんな感じ。
そういやなんで -1 なんだっけ…自分でやって理由忘れてる。
いらない気がしてきた。
x じゃなくて argument0.x になってるのは自作関数内で判定ロジック組んでただけなので別に x とかでもいいんじゃないかなと…たぶん。

例)右側の壁にぶつかった場合の位置補正

  • sbr:sprite_get_bbox_rightで引っ張った値(右当たり判定の位置)

◇ ( argument0.x + sbr - ox )の位置が壁だった場合。
argument0.x = ( ( argument0.x + sbr - ox ) & $FFFFFFE0 ) - ( sbr - ox );
+32が無くなって、( ox - sbl )が( sbr - ox )に変わる。

なんていうかこんな感じになったよ。

この記事が良かったらチップを贈って支援しましょう!

チップを贈るにはユーザー登録が必要です。チップについてはこちら

最新の記事

月別アーカイブ

限定特典から探す

記事を検索