0

ここにコードがないので、理解していただければ幸いです。家に帰ったら、コードを編集して追加します。

初期化するとレンダリングされたdom要素にjqueryイベント(keyDown)を追加するクラス移動を作成しました。

このイベントは、switch ケースでどのキーが押されているかをチェックします。

キーがケースの 1 つである場合、カメラはそれに応じて移動します。

カメラは動きますが、何らかの理由で、小さなジャンプのように少しちらつきます。各カメラの移動速度は 0.05 です。

外部アプリでこれを行ったとき、メインスクリプト(特別なクラスなし)からのjavascriptキーダウンイベントを介して、うまくいきました..

なぜこれを行うのでしょうか?

編集:コード

メインスクリプト:

<script>

    var moveMec = null;
    var loopProg = null;
    var renderer = null;
    var scene = null;
    var camera = null;
    var mesh = null;
    var earth = null;
    var sun = null;
    $(document).ready(
            function() {
                var container = document.getElementById("container");
                renderer = new THREE.WebGLRenderer({ antialias: true } );
                renderer.setSize(container.offsetWidth,container.offsetHeight);
                container.appendChild(renderer.domElement)
                scene = new THREE.Scene();
                camera = new THREE.PerspectiveCamera( 45,
                        container.offsetWidth / container.offsetHeight, 1, 4000 );

                earth = new Earth();
                sun     = new Sun({x:-10,y:0,z:20});
                scene.add(earth.getEarth);
                scene.add(sun.sunLight);
                camera.position.set( 0, 0, 3 );

                moveMec = new moveMechanics(camera,renderer.domElement)
                loopProg = new loopProgram();
                loopProg.add(function(){earth.update()});
                //loopProg.add(function(){renderer.render( scene, camera );});
                loopProg.solarLoop();
            }
    );


</script>

移動スクリプト:

var moveMechanics = function (camera,domElement,speed)
{
    moveMechanics.camera = camera;
    moveMechanics.speed = speed != undefined ? speed : 0.01;
    moveMechanics.domElement = domElement;

    $(document).keydown(function(event)
{
   switch(event.which)
   {
       case KeyEvent.DOM_VK_W:
           camera.position.z -= moveMechanics.speed;
           break;
       case KeyEvent.DOM_VK_S:
           camera.position.z += moveMechanics.speed;
           break;
       case KeyEvent.DOM_VK_D:
           camera.position.x += moveMechanics.speed;
           break;
       case KeyEvent.DOM_VK_A:
           camera.position.x -= moveMechanics.speed;
           break;
   }
});
}

ループコード:

function loopProgram()
{
    this.functionsToRun = new Array();
    this.solarLoop= function()
    {
        jQuery.each(loopProg.functionsToRun, function(index,value)
        {
            value ? value() : null;
        });
        requestAnimationFrame(loopProg.solarLoop);
    }

    this.add = function(func)
    {
        this.functionsToRun[this.functionsToRun.length] = func;
    }
}
4

0 に答える 0