2016-01-11 1 views
0

Я программирую видеоигру, и в ней я хотел бы назвать метод, который добавляет игровой бонус на каждые 2000 очков. Я понятия не имею, какой оператор (ы) использовать для такой вещи.Метод вызова при достижении определенного деления целого числа

If (score is divisible by 2000, each increment){ 
DoSomething(); 
} 

Я даже не уверен, правильно ли задал этот вопрос. В основном, когда игрок набирает 2 000 пунктов, 4 000 пунктов, 6 000 пунктов и т. Д., Я хочу дать ему бонус жизни, вызвав метод. У меня уже создан метод; Мне просто интересно, как я могу применить условия, которые его называют.

Я попытался с помощью этого:

public int bonusTarget = 2000; 
paddle = GameObject.Find("Paddle").GetComponent<Paddle>(); 

if(score >= bonusTarget){ 
      paddle.Bonus(); 
      bonusTarget += 2000; 
      } 

, но он награжден более чем один бонус жизни каждого приращения. Мне нужно присудить премиальную жизнь только один раз за каждые 2 000 пунктов

ответ

0

Установите if(score is divisible by 2000) на номер DoSomething().

Нет причин держать это вне метода, который увеличивает количество бонусов, в десятках возможных путей кода, которые увеличивают счет. Вам нужно ОДИН ЦЕНТРАЛЬНОЕ местоположение, которое увеличивает счет, и проверяет различные условия.

1

«оценка делится на 2000»

if (score % 2000 == 0) DoSomething() 

Если Вам необходимо отслеживать использование оценки имущества вместо varilable например .:

private int _score; 
public int Score 
{ 
    get 
    { 
     return _score; 
    } 
    set 
    { 
     var a = Math.Floor(_score/2000) 
     var b = Math.Floor(value/2000) 
     if (a < b) DoSomething(); 
     _score = value; 
    } 
} 
0

Вам нужно централизованное место, чтобы добавить к счету, как это:

public void AddToScore(int points) 
{ 
    score += points; 
    if (score >= bonusTarget) 
    { 
     bonusTarget += 2000; 
     paddle.Bonus(); 
    } 
} 

я переключил две линии внутри условного блока в случае paddle.Bonus() пытается добавить точки, которые могут вызвать проблемы, возможно даже бесконечную рекурсию.

Если вы сделаете так, чтобы вы всегда добавляли в счет, используя этот метод, вы можете добавить любую специальную обработку, которую хотите. Вы также можете написать ResetScore() и GetScore(), чтобы вы никогда не получали доступ к score прямо в другом месте вашего кода.