0

ビューの上部から四角い色のラベルをドロップしている単純なテトリスのようなアプリがあり、ウィンドウの下の境界線と衝突すると積み重なります。

重力と衝突をシミュレートするために iOS ダイナミクス フレームワークを使用しています。2 つの質問があります。

  1. ブロックが下の境界線に衝突したときのバウンス効果を完全になくすにはどうすればよいですか? 衝突動作の弾力性を 0 に設定してみました (ドキュメントによると、これはバウンスがまったくないことを意味します) が、ブロックはまだ少しバウンスします。したがって、少なくともドキュメントのバグだと思います。誰かが他の回避策を試すことを提案する前に、誰かがこれを確認できますか?

    私が試したもう 1 つのテクニックは、オブジェクトが衝突を開始したときに非常に高い抵抗を設定し、衝突が終了したときにそれを低い抵抗にリセットすることです。このアプローチの問題点は、すべてのブロックに一般的なこの動作により、下部で衝突が発生するたびに他の落下ブロックが影響を受ける (そして速度が低下する) ことです。

  2. 2 番目の質問は、アニメーション エンジンを停止して、積み上げている間にブロックを圧縮する方法についてです (完全に剛体ではない実世界の重力の影響をシミュレートします)。私のアプリでは、ブロックが整列していないことがはっきりとわかります。上のブロックの重さに押しつぶされます。

    どうすればこの動作を回避できますか? 密度を 1 に、弾力性を 0 に設定しようとしましたが、うまくいきませんでした。

    また、下部のいくつかのブロックの y 座標が 481 であることにも気付きました。これは、親ビューから押し出されたことを意味します。底が衝突境界と見なされている場合、これはどのように可能ですか?

4

1 に答える 1

0
  1. バウンス効果をなくすには、アニメーターに UIDynamicItemBehavior を追加する必要があります。また、UIDynamicItemBehavior のプロパティ「elasticity」を 0 に設定します。UIDynamicItemBehavior の「resistance」プロパティを 1 または最大の CGFLOAT_MAX に設定することもできます。
于 2014-11-28T07:34:21.113 に答える