坂に落ちたコインや音符が徐々に更に落ちていく不具合の対処
先日のななしあさんからのコメントにあった
ゼラチンキューブの面での坂の判定がおかしいのか、 ゼラチンキューブを倒した時のコインなどが坂の途中の場合下に落ちる。 出現時に若干埋まってるっぽい?
というのが解決した。
重力を2回かけているのが問題かと思っていたら
どうやら浮動小数点演算の誤差の累積が問題だったみたい。
もともと接地判定は、既に接地していても行っている。
これは、床がなくなったら落下するようにするためで
パズルエリアの動かす箱なんかも、同じ仕組みになっている。
もちろん、接地判定の前には重力を加えた計算をしているんだが
この計算で使う値は、ベクトル計算の関数を使うために
浮動小数点で持っている。
浮動小数点の演算では、計算誤差が発生する。
開発環境がある人はやってみると分かるけど、
0.1を10回足しても1.0にはならないのだ。
この計算誤差、小数点以下の情報とは言え
0.000001とかをひたすら累積していくと当然1を超えるタイミングが発生する。
座標計算で1狂うと、1ドット座標がズレることになる。
そしてジワジワと下に座標がズレていき
そのうち落下判定で使っている判定円が坂の部分を突き抜けることで
下に落ちてしまうのだ。
ということで、計算誤差が累積しないようにする修正をしたところ
無事にじわじわ下に移動して、最終的に落下する現象は起きなくなった。
具体的には、坂に落下した時に
浮動小数点で持っているy座標を整数型の変数に入れて
それをもう一度浮動小数点の変数に入れるようにした。
これで整数型に入れる段階で小数部の情報が落ちるので
小数部の誤差が累積しないという寸法。
たぶん、ミクが坂に向かってのジャンプ上昇中に
じわじわと上に上がっていくのも同じ原因と思われる。
あっちは、また別の問題があるので、全く同じ対処にはできないと思うけどね。
次の公開でこの対応ができる目処がついて良かったよ
| 【固定リンク】 | 【コメント (0)】 | 【トラックバック (0)】
このエントリーへのリンク
トラックバック
この記事へのトラックバックの一覧です: 坂に落ちたコインや音符が徐々に更に落ちていく不具合の対処:
コメント
このブログの新着コメントをRSSリーダに登録する為のxml