2013-05-26 2 views
1

Мне жаль, что я не писал это для чего-то другого, кроме как вычитать из значения, но я не знаю. У меня есть игра, в которой астероиды приходят к игроку, и вы можете передвигаться. Если астероид попадает в игрока, он должен вычесть случайное количество (в пределах диапазона) из счета. Фактически, это как-то добавляет к счету вместо этого. Ниже приведен мой код:HTML5/Javascript: вычитание из значения

for(var i=0; i<asteroids.length; i++){ 
    if(player.x<asteroids[i].x+asteroids[i].radius){ 
     if(player.x>asteroids[i].x-asteroids[i].radius){ 
      if(player.y<asteroids[i].y+asteroids[i].radius){ 
       if(player.y>asteroids[i].y-asteroids[i].radius){ 
        player.lives-=Math.floor(Math.random()*(900000-600000)-600000); 
       } 
      } 
     } 
    } 
} 

Операторы if проверяют, перекрывает ли игрок астероид. Я пробовал писать «player.lives - = whatever» и «player.lives = player.lives - whatever», и ни один из них не работает, и он просто добавлен в партитуру.

Кто-нибудь знает, что может быть причиной этого? Благодарю.

+1

след значение player.lives. Моя лучшая догадка заключается в том, что она имеет отрицательное значение и, следовательно, когда вы делаете вычитание, она складывается! –

+1

'Math.random() * (900000-600000) -600000' будет равно отрицательному числу. – tymeJV

+1

Также вместо использования четырех условий 'if', попробуйте ' if (player.x <астероиды [i] .x + астероиды [i] .radius && player.x> астероиды [i] .x-астероиды [i]. radius && player.y астероиды [i] .y-asteroids [i] .radius) ' –

ответ

-1

, как говорят, комментарии:

  • ты лучше делать, если вы используете систему столкновений вместо 4 монстра, если-условия
  • Math.random()*(900000-600000)-600000 является отрицательным числом.
+0

подведение итогов комментариев на самом деле не ответ –

+1

ничего себе, теперь я чувствую себя глупо! спасибо, что сообщили мне, что это было отрицательно. теперь все исправлено, увидев, как я умножил его на * 1 :) –

+0

@JeremyDarrach: Рад, что вы смогли это исправить :) –

0

Как уже упоминалось в комментариях, Math.random()*(900000-600000)-600000 будет равно отрицательному числу. Вот почему:

Math.random() >>> a random value between 0 and 1 

900000-600000 >>> a constant = 300000 

Math.random() * 300000 >>> a random value between 0 and 300000 

Math.random() * 300000 - 600000 >>> a random value between -600000 and -300000 

Решение изменить

player.lives-=Math.floor(Math.random()*(900000-600000)-600000); 

к

player.lives+=Math.floor(Math.random()*(900000-600000)-600000); 

или просто

player.lives-=Math.floor(Math.random()*300000+300000); 
Смежные вопросы