Вы можете использовать переменную GameTime
. Вы могли бы попробовать что-то вроде этого:
float cooldowntime = 0;
Update(GameTime gameTime)
{
GamePadState controller = GamePad.GetState(PlayerIndex.One);
cooldowntime += gameTime.ElapsedGameTime.TotalMilliseconds;
//if you are using XNA 3.1 or earlier, use GameTime.ElapsedRealTime
if(cooldowntime >= 5000 && controller.Buttons.A == ButtonState.Pressed)
{
UseAbility();
cooldowntime = 0;
}
}
Используя это, каждый метод обновления, то cooldowntime
получит истекшее Gametime в миллисекундах добавленными к нему (если вы используете XNA 3.1, вы можете использовать ElapsedRealTime
, что время в «реальной жизни». Это было бы полезно, если бы вы получили менее 60 кадров в секунду). Тогда, если cooldowntime
больше 5000 мс (5 секунд), способность будет включена для одного метода обновления. Если вы хотите быть точнее, чем GameTime.ElapsedGameTime.TotalMilliseconds
, вы можете использовать, например, Stopwatch
или DateTime.Now
. HTH
Примечание: если вы получаете ровно 60 кадров в секунду на обновление, ElapsedGameTime
должно быть абсолютно точным.
EDIT: Чтобы уменьшить линии, используемые, попробуйте это:
float cooldowntime = 0;
Update(GameTime gameTime)
{
GamePadState controller = GamePad.GetState(PlayerIndex.One);
cooldowntime = (cooldowntime >= 5000 && controller.Buttons.A == ButtonState.Pressed) ? 0 : cooldowntime + gameTime.ElapsedGameTime.TotalMilliseconds;
if (cooldowntime == 0) UseAbility();
// we know to use the ability if cooldowntime = 0 since it will only equal zero
// when cooldowntime >= 5000 and the button is pressed.
}
Upvote для исправления проблемы синхронизации. Какие-нибудь идеи по очистке кода немного? (В этом примере это неплохо, но в моей игре этот метод довольно запутан.) – Evorlor
Не могли бы вы объяснить, что вы имеете в виду, довольно грязно? Является ли переменная 'cooldowntime', что делает ее грязной? – davidsbro
Да, я надеялся найти однострочный для моего заявления if. В противном случае у меня есть 20 дополнительных переменных для отслеживания. Это не огромная сделка, но у меня уже есть кластер **** с моим кодом. Надеюсь, у него есть один хороший элемент :) – Evorlor