2011-01-06 4 views
1
function loopthrough (i) { 
      i++; 
      if (i <= 20) { 

       play_multi_sound("aud"+i); 
       $("#debug").html(i); 
       setTimeout("loopthrough("+i+");",242); } 
      else { 
       loops++; 
       $("#debug").html("rest"); 
       $("#loops").html(loops); 
       setTimeout("loopthrough("+0+");",1000); 
      } 
     } 

Является ли мой код похожим на разветвление? поскольку после примерно трех циклов он буквально разбивает браузер. Я использую чрезмерный звук HTML5, так как мне нравится тестировать новые функции, и пока я все еще новичок в Javascript, мне действительно нужен этот код для работы. (Im, делающий простую игру в бильярде на холсте, где вы используете весло в стиле понга, и каждый шар, на который вы попадаете с разной скоростью, будет воспроизводить звук, тем самым делая крутой ритм) ... Atm im просто тестирует возможности большого количества звука зациклился сразу.Является ли мой код forking?

Итак, мой основной вопрос: «Является ли мой код эффективным, он развивается, и есть ли способ улучшить это, если вы знаете лучший способ?»

Спасибо, Том C.

EDIT:

Просто сняли петлю ++; (по какой-то причине он возвращал NaN, хотя он был определен как глобальный), и он фактически успешно зацикливался 20 раз без недостатков.

+0

Что нужно для 'var i = i + 1;', а не 'i = i + 1'? Способ инициализации значений, если null? (Не использовали javascript через некоторое время) – Blam

+1

Лучшая ставка - попробовать немного немного отладки - добавьте console.log («bla») туда и посмотрите, сколько раз он появляется. Это должно дать вам знать, работает ли оно правильно или нет, и поможет вам узнать, где он сбой. – xil3

+0

Чем меньше тайм-аутов у вас есть, тем лучше. Может быть, вы можете отменить некоторые? –

ответ

3

Я только что провел несколько тестов, и я придерживаюсь его здесь, чтобы код был ясен.

function loopthrough (i) { 
    i++; 
    if (i <= 20) { 
    console.log("bla"); 
    setTimeout(function(){ loopthrough(i); }, 242); } 
    else { 
    console.log("lala"); 
    setTimeout(function(){ loopthrough(0); }, 1000); 
    } 
} 

loopthrough(0); 

Это прекрасно работало, и оно никогда не разбивалось. И это тоже не было.

Итак, это врежется на что-то еще.

Я бы попробовал это и в другом браузере, и посмотрим, сработает ли он - может быть, это просто сбой FF beta 8.

Попробуйте удалить 1 бит за раз от него и посмотреть, начнет ли он работать - это хороший способ сузить преступника.

Держу пари, это звук, который разбивая его ...

* обновление *

Попробуйте натыкаясь задержку тайм-аут - это может быть, что звук не заканчивается, а затем пытается играть снова и как-то отставало.

+0

Быстро, избавитесь от eval, прежде чем я начну работать над тем, чтобы вернуть свою репутацию хороший круглый номер ... –

+0

@Ivo Не уверен, что вы имеете в виду - что такое eval? – xil3

+0

@ xil3 Там вы идете. setTimeout со строкой, поскольку ее аргументы используют eval под капотом. –

Смежные вопросы