2013-09-08 1 views
0

Немного застрял, увеличив счет игрока через 5 секунд. В конце концов, я хотел бы иметь возможность использовать ту же логику, чтобы увеличить счет на сумму «х» после всех разных периодов времени. На данный момент оценка увеличивается на 10, но 60 раз в секунду (из-за того, что метод обновления называется 60 раз в секунду). Это значит, что счет заканчивается 560 вместо 10.Как увеличить баллы после определенного периода времени? XNA

Я думал о попытке использовать такие переменные, как isPreviousScoreChanged и isCurrentScoreChanged, например, при обнаружении нажатия и отпускания кнопки, однако это тоже не работает хорошо.

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

код довольно много:

if (Stopwatch.ElapsedTicks == 5) 
{ 
    playerScore += 10; 
} 

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

спасибо большое за чтение всех :-)

+0

http://stackoverflow.com/questions/8552648/how-to-create-a-timer-that- что-то это может быть полезно – Rotem

+0

Не могли бы вы определить, сколько вы хотите увеличить баллы в секунду, и просто используйте Stopwatch.ElapsedMilliseconds (после преобразования, конечно, в секундах) – tim

+0

Tim: Я преобразовал StopWatch.ElapsedTicks за считанные секунды, а также заявил, что я хотел увеличить на 10, но это не сработало, поскольку оценка должна была увеличиться nting 60 раз в секунду на 10. – 6a6179

ответ

1

ли что-то вроде этого:

if (timer > TimeSpan.Zero) 
{ 
    timer -= gameTime.ElapsedGameTime; 
    if (timer <= TimeSpan.Zero) 
    { 
     playerScore += 10; 
     timer = TimeSpan.Zero; 
    } 
} 

Конечно, вы должны установить timer = new TimeSpan(0, 0, 5);

+0

спасибо Pinckerman, похоже, что это работает, хотя я использую класс StopWatch ... возможно, я смогу немного приспособить его, однако это, похоже, работает, и это относительно просто вперед. Спасибо: D – 6a6179

+0

Это то, что я делаю каждый раз, когда мне нужно обрабатывать временной интервал, поэтому я уверен, что он действительно работает: D – pinckerman

0

Во-первых - рекомендую не использовать тики, так как один тик - очень небольшое количество времени. Второй - при обновлении каждые х секунд, используя оператор модуля, если он более эффективен.

if((Stopwatch.ElapsedMilliseconds%2000)==0){playerScore+=10}

В этом примере, оценка должна быть обновлена ​​каждые 2 секунды.

+0

Спасибо за ответ. По какой-то причине это, похоже, не работает. Я прокомментировал предыдущий код, и я просто использовал то, что вы рекомендовали выше. На самом деле, я только что запустил свою игру снова, и она случайным образом работала один раз, однако я запускал ее до и после ее работы, и тогда она не работала. Я надеюсь в этом есть смысл. Еще раз спасибо за ответ, я ценю его :) – 6a6179

+0

Он работает только при вызове другой функцией. Создание отдельного потока может быть хорошей идеей, только тогда вы должны использовать цикл while (true), который увеличивает счет и спит в течение x миллисекунд, пока он не будет запущен снова. Синтаксис должен быть довольно простым, см. [System.Threading] (http://msdn.microsoft.com/en-us/library/system.threading.thread.aspx). –

+0

Прохладный, хорошо, я отдам его. Спасибо v much Ianis :-) – 6a6179