2014-12-04 3 views
3

ОК, надеюсь, я не слишком усложняю это. Я знаю, что могу просто использовать timer.Enabled = false или timer.Stop(), чтобы остановить таймер, но я хотел бы включить свойство в свой основной класс игрока, который будет управлять таймером. Например, если у моего игрока было свойство bool «исцеление», я бы хотел, чтобы свойство игрока было установлено на исцеление == true, для запуска таймера и когда свойство player.healing изменено на исцеление = = false, чтобы таймер остановился. Причина этого в том, что я хочу, чтобы мой основной игровой цикл продолжал работать, пока мой игрок продолжает играть в игру и исцелять, и когда действие предпринимается в игре или когда игрок достигает полного здоровья, для таймера остановиться.Использование свойства класса для включения/выключения таймера

В настоящее время у меня есть функция, которая запускает каждый таймер, и оценивает, является ли игрок полным или нет, и если да, то останавливает таймер. Тем не менее, я просто думаю, что возможность перевернуть свойство bool из false в true или наоборот будет более полезным. Любая помощь/мысли/советы приветствуются!

+0

Когда вы устанавливаете свойство bool для здоровья игроков? Установите таймер для запуска, когда вы установите bool. – stackErr

ответ

5

Свойство сеттер это просто функция, поэтому его довольно просто:

private bool healing = false; 
public bool Healing 
{ 
    get { return healing; } 
    set 
    { 
     healing = value; 
     if (healing) 
      timer.Start(); 
     else 
      timer.Stop(); 
    } 
} 

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

public bool Healing { get; set; } 

public void SetHealingWithTimer(bool status) 
{ 
    Healing = status; 
    if (Healing) 
     timer.Start(); 
    else 
     timer.Stop(); 
} 
+0

hah! Быстрее, чем я :) – Kell

+0

Спасибо! Я думаю, что это будет работать отлично, и я не знал, что вы можете использовать такое свойство. :) Есть ли какое-либо реальное преимущество в этом методе против использования таймера.Enabled == true/false и с таймером.Элементный метод оценил, остановить ли таймер или нет? Просто любопытно. – tchock

+1

@parrotsnest Я не уверен, что вы имеете в виду. Что касается 'timer.Enabled', я думаю, что' Start/Stop' делает больше идиоматического смысла. На самом деле это не имеет значения. Что вы спрашиваете с помощью 'timer.Elapsed'? – BradleyDotNET

2

Cant вы делаете это:

private Timer timer; 

public bool Healing 
{ 
    get 
    { 
     return timer.Enabled; 
    } 
    set 
    { 
     timer.Enabled=value; 
    } 
} 
+0

Исправлено форматирование для вас. Я был бы осторожен с этим, действительно ли включен режим таймера * действительно *, если игрок исцеляет? – BradleyDotNET

+1

Спасибо за это :) Также я предположил, что это так. – Phoenix

1

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

if(health < maxHealth) 
{ 
    healing = true; 
    health += healthModifier; 
} 
else 
{  
    healing = false;   
} 

//fix health meter, if above maximum 
if(health > maxHealth) 
{ 
    health = maxHealth; 
} 

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

+0

Правда, но у вас могут быть причины для состояния «Исцеление» (если вам нужно активировать умение, или если враг может остановить его). – BradleyDotNET

+0

@BradleyDotNET: Это имеет смысл теперь? – Neolisk

+1

Да, вам не нужно было ничего менять, это был просто комментарий :). Я поддержал ваши ответы и ответы Pheonix в качестве действительных альтернатив для решения этой проблемы. – BradleyDotNET

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