Как ограничить частоту действий KeyDown

Я разрабатываю свою первую игру в Silverlight. Это что-то вроде двухмерного лабиринта, а движения пользователя по холсту основаны на событии UserControl_KeyDown. У меня пока нет геймлупа. Но теперь я немного застрял - мне нужно ограничить частоту события UserControl_KeyDown или что-то в этом роде, потому что мне нужно, чтобы некоторые объекты в лабиринте двигались быстрее, чем игрок. Я полагаю, что могу каким-то образом использовать gameloop, но я действительно не знаю, как это сделать, и Google не помог. Надеюсь, вы могли бы показать мне, как это сделать, я был бы очень признателен за это.


person Gabbo    schedule 04.10.2011    source источник


Ответы (1)


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

private DateTime _LastExecution = DateTime.MinValue;

public void UserControl_KeyDown(object sender, EventArgs ea) {
    if ( ( DateTime.Now - _LastExecution ).TotalMilliSeconds > 500 ) {
        /* do you stuff */
        _LastExecution = DateTime.Now;
    }
}
person Sascha    schedule 04.10.2011
comment
Саша, спасибо за ответ, звучит очень умно, попробую. - person Gabbo; 04.10.2011
comment
отлично, я узнал новую функцию, он находится в stackoverflow (я здесь новичок :)) - person Gabbo; 05.10.2011