Не могу двигаться по сцене

Я сделал сцену в Blender, и теперь мой плеер не двигается. У него нет проблем с загрузкой сцены, но когда я пытаюсь перемещаться с помощью клавиш направления, он не работает. Вот код:

var BABYLON;
var canvas = document.getElementById('gamecanvas');
var engine = new BABYLON.Engine(canvas, true);
var player_height = 2;
var player_speed = 1;
var player_inertia = 0.9;

function INIT_GAME(){
    BABYLON.SceneLoader.Load('Scenes/', 'zombie_map.babylon', engine, function(newScene){
        newScene.executeWhenReady(function(){
            newScene.enablePhysics();
            newScene.setGravity(new BABYLON.Vector3(0, -10, 0));
            var light = new BABYLON.PointLight('light', new BABYLON.Vector3(0,0,10), newScene);
            var player = new BABYLON.FreeCamera('player', new BABYLON.Vector3(1,1,1), newScene);
            player.attachControl(canvas, true);
            player.ellipsoid = new BABYLON.Vector3(1, player_height, 1);
            player.checkCollisions = true;
            player.applyGravity = true;
            player.keysUp = [87];
            player.keysDown = [83];
            player.keysLeft = [65];
            player.keysRight = [68];
            player.inertia = player_inertia;
            player.speed = player_speed;
            engine.runRenderLoop(function(){
                newScene.render();
            });
        });
    });

    canvas.height = window.innerHeight;
    canvas.width = window.innerWidth;
    canvas.requestPointerLock = canvas.requestPointerLock || canvas.mozRequestPointerLock;
    canvas.requestPointerLock();

    window.addEventListener('resize', function(){
        engine.resize();
    });
}

Если вы видите, почему я не могу двигаться, дайте мне знать. Спасибо!


person Taylor Brown    schedule 01.04.2016    source источник
comment
Извините, я не очень хорошо знаком с этим конкретным движком, но пробовали ли вы переместить вызов engine.runRenderLoop в нижнюю часть функции INIT_GAME, чтобы все, что касается вашего плеера и сцены, было полностью инициализировано до начала рендеринга сцены? Я предполагаю, что параметр новостной сцены, переданный при построении объектов PointLight и FreeCamera, связывает их со сценой? И, возможно, попробуйте временно удалить код блокировки указателя, чтобы увидеть, не мешает ли эта блокировка работе FreeCamera.   -  person ManoDestra    schedule 01.04.2016
comment
Я переместил его, но это не решило проблему.   -  person Taylor Brown    schedule 01.04.2016
comment
Если вам нужен предварительный просмотр, вы можете увидеть сайт здесь. Просто нажмите пуск. scrigbildefense-browntj.c9users.io/main.html   -  person Taylor Brown    schedule 01.04.2016
comment
Блокировка указателя - единственная вещь, о которой я могу думать. Или что камера игрока неправильно привязана к сцене.   -  person ManoDestra    schedule 01.04.2016
comment
Я также не могу смотреть по сторонам, если это поможет   -  person Taylor Brown    schedule 01.04.2016
comment
К сожалению, WebGL не поддерживается на компьютере, на котором я сейчас работаю, поэтому он не работает. Все, что я получаю, это исчезновение до белого цвета после нажатия кнопки «Пуск». Я нашел эту ссылку, которая может помочь (babylonjs-playground.azurewebsites.net/#2CEF73). В нем он, кажется, отсоединяет Control от холста перед обновлением материала. Может стоит посмотреть.   -  person ManoDestra    schedule 01.04.2016
comment
Я проверю и обновлю, спасибо!   -  person Taylor Brown    schedule 01.04.2016
comment
В (что маловероятно) случае это имело бы значение, я обычно прикрепляю камеру к этому полотну: engine.getRenderingCanvas().   -  person ConnorsFan    schedule 03.04.2016
comment
Также: я не вызываю canvas.requestPointerLock в своем коде. (Отказ от ответственности: я не использую SceneLoader).   -  person ConnorsFan    schedule 03.04.2016
comment
Я переместил сюда свой ответ на другой ваш вопрос (stackoverflow.com/questions/36379819/), поскольку он, кажется, решает проблему управления камерой пользователем.   -  person ConnorsFan    schedule 04.04.2016


Ответы (1)


Ваша player камера должна быть установлена ​​как активная камера:

var player = new BABYLON.FreeCamera('player', new BABYLON.Vector3(1,1,1), scene);
scene.activeCamera = player;
scene.activeCamera.attachControl(canvas, true);
person ConnorsFan    schedule 03.04.2016