私のフレームアプリケーションで物理エンジンを使用しています。ユーザーがボタンをクリックしたときにカメラを動かしたいと思います。フィジカルエンジンでフレームをカメラに移動
モーションのメソッドとしてapplyImpulseを使用しているので、物理エンジンのプロパティを保持します。ここで
は私の例のシーンです:
<script src="https://aframe.io/releases/0.3.0/aframe.min.js"></script>
<script src="//cdn.rawgit.com/donmccurdy/aframe-extras/v2.3.0/dist/aframe-extras.min.js"></script>
<a-scene physics>
<!-- Camera -->
<a-entity id="cameraWrapper" geometry="box" dynamic-body="mass:1" position="0 1 0" width="2" height="1" depth="2" listener>
<a-entity id="camera" camera universal-controls position="0 1 0" rotation="0 0 0">
</a-entity>
</a-entity>
<a-grid static-body position="0 0 0"></a-grid>
</a-scene>
<div>
<a id="impulseButton">Move</a>
</div>
カメラを移動することになっているJavaScriptのメソッドは次のようになります。
$(document).ready(function(){
$("#impulseButton").on("click",function(){
applyImpulse();
});
function applyImpulse(){
var x = 0;
var y = 0;
var z = 1;
var el = $('#cameraWrapper')[0];
el.body.applyImpulse(
new CANNON.Vec3(x,y,z),
new CANNON.Vec3().copy(el.body.position)
);
}
});
しかし、動きが非常に滑らかではないようだ、とするときユーザーがWASDコントロールを使用すると、cameraWrapperエンティティは古い場所に残ります。 applyImpulseでカメラをスムーズに動かすにはどうすればいいですか?
これは物理エンジンではまだ動作しません – bear
[live demo here](https://sandbox.donmccurdy.com/walls/)は動作します。そのデモのソースコードは、その答えにリンクされています。 –
私はkinematic-bodyが衝突を検出することを理解していますが、これをapplyImpulseやカメラを動かしてカメラをプログラム的に動かしたときに衝突を検出する方法と組み合わせることはできません。申し訳ありませんが、それは私の質問ではっきりしていない場合。 – bear