THREE.DragControls не является ошибкой конструктора - PullRequest
0 голосов
/ 05 мая 2018

Я пытаюсь использовать конструктор Three.DragControls для моего приложения в three.js. Я запускаю npm install и npm install three-dragcontrols, получая сообщение, что зависимость была добавлена ​​в пакет. Когда я пытаюсь использовать новые Three.DragControls, я получаю сообщение об ошибке: "THREE.DragControls не является конструктором"

код:

var scene = new THREE.Scene();
scene.background = new THREE.Color( 0xf0f0f0 );
var camera = new THREE.PerspectiveCamera( 70, window.innerWidth / window.innerHeight, 1, 10000 );
var objects = [];

var renderer = new THREE.WebGLRenderer();
renderer.setSize( window.innerWidth, window.innerHeight );
document.body.appendChild( renderer.domElement );

camera.position.z = 1000;

var startColor;

function init() {
    scene.add( new THREE.AmbientLight( 0x0f0f0f ) );

    var light = new THREE.SpotLight( 0xffffff, 1.5 );
    light.position.set( 0, 500, 2000 );

    scene.add(light);

    var geometry = new THREE.BoxGeometry( 40, 40, 40 );
    var geometry = new THREE.SphereGeometry( 40, 40, 40 );

    for (var i = 0; i < 100; i++) {
        var object = new THREE.Mesh( geometry, new THREE.MeshLambertMaterial( { color: Math.random() * 0xffffff } ) );

        object.position.x = Math.random() * 1000 - 500;
        object.position.y = Math.random() * 600 - 300;
        object.position.z = Math.random() * 800 - 400;

        object.castShadow = true;
        object.receiveShadow = true;

        scene.add( object );

        objects.push( object );
    }

    var controls = new THREE.DragControls( objects, camera, renderer.domElement );
    controls.addEventListener( 'dragstart', dragStartCallback );
    controls.addEventListener( 'dragend', dragendCallback );
}

function dragStartCallback(event) {
    startColor = event.object.material.color.getHex();
    event.object.material.color.setHex(0x000000);
}

function dragendCallback(event) {
    event.object.material.color.setHex(startColor);
}

function animate() {
    requestAnimationFrame( animate );

    renderer.render(scene, camera);
};

init();
animate();

1 Ответ

0 голосов
/ 07 мая 2018

Возможный ответ (не может опубликовать это как комментарий из-за глупых правил SO):

Пожалуйста, поделитесь той частью кода, в которой вы импортируете / требуете модуль. Во многих случаях с этими модулями для Three.js их необходимо прикрепить к объекту THREE.

Например:

// Doesn't work:
THREE.DragControls = require("three-drag-controls");

// Does work:
THREE.DragControls = require("three-drag-controls")(THREE);

Это потому, что модуль на самом деле является функцией, которая возвращает конструктор для элементов управления. Если вы не запускаете функцию сначала с THREE в качестве аргумента, вы получите «THREE.DragControls не конструктор».

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...