06/11/07 00:37:41 B1V1c0H3
305ではないが、調べてみた。原因がわかった気がする・・・。
solid オブジェクトとの衝突イベンでは、衝突判定→ENDステップ との間で speed に値があると移動してしまう性質があるので、うまくいっていない。
>>305 のサンプルで説明。
斜めに並んでいる白いブロックの接続付近に向かって、下から左上にジャンプするとまれに引っかかる。
まず、右上のブロック(ID:100177)にぶつかる。
solid オブジェクトの衝突の性質により、100177との衝突イベントのあとに、3ドット(hspeedの大きさ)だけ左にずれる。
ここで、衝突したポイントが、左の壁 (ID:100176) まで3ドット以内の位置にいると、めり込んでしまう。
これは、左の壁のID番号が100177より若いので、そのステップ中での衝突判定がすでに終わってしまってるため。
(もし左の壁がのID番号が100177より大きいなら、同ステップで衝突判定が発生するので、このタイミングでの「めり込み」は発生しない)
ヘルプを読み返してみたが、これは仕様らしい。
個人的に、衝突直前まで戻すのは良いが、衝突のあとに移動してしまう仕様は余計なお世話感があるなぁ。
>>305のサンプルを修正するには、この仕様を頭に入れてコードを書き直さないといけないかも。
知らない人がいるかもしれないから、solid オブジェクトの衝突イベントについてのまとめを改めて。
【衝突発生】
↓
(衝突したインスタンスは、xprevious yprevious まで戻される)
↓
【衝突イベントで設定した処理】
↓
(hspeed vspeed gravity 等が設定されていたら、移動する)
↓
【End Stepイベントへ】
※()内は自動で処理される。 solid 属性でないもの同士の衝突イベントならば、処理されない。
わかりづらかったらゴメン。