2017-05-15 3 views
0

Ich möchte, wenn mein Rycaster ein Objekt während 2 Sekunden schneiden, aktualisieren Sie die Textur eines Objekts.Fügen Sie eine Verzögerung mit Rycaster

Also ich versuche, Uhrfunktion zu verwenden, aber nicht sicher zu verstehen, wie man es benutzt.

var clock = new THREE.Clock(); 
 
clock.autoStart = true; 
 

 
var intersects = raycaster.intersectObjects(pickable, true); 
 

 
if (intersects.length > 0) { 
 
    if (!clock.running) clock.start() \t 
 
    
 
    if (clock.getElapsedTime() > 2) { 
 
     if (intersects[0].object.name === "btn_meeting_01") { 
 
      mesh_sphere.material.map = THREE.ImageUtils.loadTexture("textures/DIVE_IMMO_00004.jpg"); 
 
     } 
 
     if (intersects[0].object.name === "btn_lobby_01") { 
 
      mesh_sphere.material.map = THREE.ImageUtils.loadTexture("textures/DIVE_IMMO_00003.jpg"); 
 
     } 
 
     if (intersects[0].object.name === "btn_restaurant_01") { 
 
      mesh_sphere.material.map = THREE.ImageUtils.loadTexture("textures/DIVE_IMMO_00002.jpg"); 
 
     } 
 
     if (intersects[0].object.name === "btn_entrance_01") { 
 
      mesh_sphere.material.map = THREE.ImageUtils.loadTexture("textures/DIVE_IMMO_00001.jpg"); 
 
     } 
 
     if (intersects[0].object.name === "btn_exterior") { 
 
      mesh_sphere.material.map = THREE.ImageUtils.loadTexture("textures/DIVE_IMMO_00000.jpg"); 
 
     }; 
 
    } 
 
}

Können Sie mir sagen, was daran falsch ist?

Antwort

1

Ich schaffte es mit einem boolean und SetTimeout
Ich gehe davon zu tun, dass es einen besseren Weg, es zu tun ist, aber das ist die Idee
Dies ist, wie ich es tat:

var loading = false 
var timeout = null 

function render() { 
    var intersects = raycaster.intersectObjects(pickable, true) 

    if (intersects.length > 0) { 
    updateTexture() 
    } else { 
    resetLoader() 
    } 

    // Render the scene 
} 

function resetLoader() { 
    if(loading) { 
    clearTimeout(timeout) 

    loading = false 
    } 
} 

function updateTexture() { 
    if(!loading) { 
    timeout = setTimeout(function() { 
     // Change your texture 
    }, 2000) 

    loading = true 
    } 
} 
+0

i versuch es aber nicht zu rendern (schwarzer Bildschirm): const render =() => { var intersects = racycaster.intersectObjects (auswählbar, true); \t if (intersects.length> 0) { updateTexture() } else { resetLoader() } effect.render (Szene, Kamera); } – Noodle09

+0

Für etwas so lange wie 2 Sekunden, so würde ich es tun. –

Verwandte Themen