Я реализую проект для магистерской степени. Я должен создать игру для захватчиков трех js.SetTimeOut() в THREE JS
Проект идет полным ходом, но у меня есть проблема. Мои инопланетяне (объект THREE.Mesh) должны иметь возможность стрелять случайным образом. Чтобы выполнить это, я создал функцию, которая должна нарисовать случайное число. Эта функция работает. Проблема заключается в функции animate(). На самом деле я не могу поставить функцию SetTimeOut() animate().
SetTimeOut() работает при первом вызове анимации(), но после того, как нет таймера. Кодирование выполняется непрерывно, не дожидаясь таймера.
Возможно, проблема возникает из-за того, что анимация постоянно вызывается requestAnimationFrame();
Мой код:
Index.html =>
if (!init())animate();
function animate(){
requestAnimationFrame(animate);
level1.animate();
render();
}
Level.js =>
Level.prototype.animate = function()
{
//Timer doesn't work
var that = this;
//Just a test with a simple console.log test
setTimeout(function() { console.log("test"); },10000);*/
this.sky.rotation.x -=0.005;
this.spaceship.fire();
for (var i=0; i<this.ducks.length;i++)
{
this.ducks[i].move();
if (this.ducks[i].is_ready_to_fire())
this.ducks[i].fire_if_ready();
}
};
В этом примере программа будет ждать 10 секунд в первый раз перед печатью «тест» и после первого вызова распечатать «тест» без ожидания.
У вас есть идеи?
спасибо.
Извините за мой плохой английский.
Я думаю, что я вижу, что здесь происходит: вы создаете новое событие таймера на каждом вызове 'Level.prototype.animate()'. – Phylogenesis
Как решить это? Поместите результат в этот. Timer например? – merinid
И я напечатал идентификатор таймера, и это другой идентификатор во всем вызове animate(). Поэтому его новый таймер каждый раз, когда я думаю. – merinid