Proyecto de tres.js en iPhone - problema de eventos (seleccione y arrastre objeto)
-
25-10-2019 - |
Pregunta
Tengo un proyecto de construcción con tres.js ... lienzo donde puedes arrastrar objeto y jugar con la vista de la cámara también ... Hay un ejemplo famoso: "cubos arrastrables", bueno, mi proyecto es bastante similar.
En mi proyecto hay 3 eventos principales: mouseup / mousedown / mousemove ...
Bueno, todo estaba bien ... pero ahora estoy tratando de ejecutar este código en iPhone, cambiando mis eventos con touchstart / touchmove / touchend ...
La función del objeto en movimiento parece funcionar bien, pero cuando intento seleccionar el objeto haciendo clic en él, siempre es el mismo objeto que se ha seleccionado ... y no el que estoy apuntando ...
Supongo que el problema es con esta función:
function onDocumentMouseDown( event ) {
event.preventDefault();
var vector = new THREE.Vector3( mouse.x, mouse.y, 0.5 );
projector.unprojectVector( vector, camera );
var ray = new THREE.Ray( camera.position, vector.subSelf( camera.position ).normalize() );
var intersects = ray.intersectObjects( objects );
if ( intersects.length > 0 ) {
SELECTED = intersects[ 0 ].object;
var intersects = ray.intersectObject( plane );
offset.copy( intersects[ 0 ].point ).subSelf( plane.position );
}
}
¿Alguien tiene una idea de cuál es el problema?
Solución
En esta línea:
var vector = new THREE.Vector3( mouse.x, mouse.y, 0.5 );
Utiliza el objeto Vector2 mouse pero no lo inicializa.
Algo como esto debería funcionar :
mouse.x = +(event.targetTouches[0].pageX / window.innerwidth) * 2 +-1;
mouse.y = -(event.targetTouches[0].pageY / window.innerHeight) * 2 + 1;