Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > разработка игр, графический дизайн и моделирование > Gamedev - cоздание игр: Unity, OpenGL, DirectX
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 31.01.2012, 20:30   #1
jetei
Пользователь
 
Регистрация: 29.08.2011
Сообщений: 24
Вопрос Правильное управление

Привет всем, вот пытался сделать управление в игре через OnKeyDown, но он жутко тормозит, а потом через таймер:
Код:
var control : smallint;
...

procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
Case key of
  37:
    begin
control:= 3;
     end;
  39:
  begin
control:= 4;
  end;
  38:
  begin
  control:= 1;
  end;
  40:
  begin
control:= 2;
  end;
end;
end;


procedure TForm1.FormKeyUp(Sender: TObject; var Key: Word;
  Shift: TShiftState);
  var
  ie: word;
begin
ie:= key;
if ie = key then control:= 0;
end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
    if control = 1 then
begin
 //ну тут код
   end
   else
if control = 2 then
begin
 тут тоже...
end
else
if control = 3 then
begin
//
end
else
if control = 4 then
begin
 //
end;
application.ProcessMessages;

end;
А так тоже тупит, временем скорость скачет...
Подскажите, как еще можно организовать управление??
Заранее спасибо..
jetei вне форума Ответить с цитированием
Старый 01.02.2012, 17:15   #2
Selestis
Форумчанин
 
Аватар для Selestis
 
Регистрация: 21.01.2009
Сообщений: 719
По умолчанию

Советую в игровом цикле проверять кнопку на нажатие системными средствами, а не по событию формы - оно по сути своей идет иногда с задержкой.
Например такой функцией:
Код:
function IsKeyDown(Key: integer): boolean;
begin
Result := (GetKeyState(Key)and 128) = 128;
end;
Изобретатель велосипедов
Selestis вне форума Ответить с цитированием
Старый 01.02.2012, 18:26   #3
Kostia
Участник клуба
 
Аватар для Kostia
 
Регистрация: 21.11.2007
Сообщений: 1,691
По умолчанию

Код:
var
keys: array[256] of boolean; //не забудьте проинициализировать
...
procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
  keys[Key] := true;
end;

procedure TForm1.FormKeyUp(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
  keys[Key] := false;
end;
Kostia вне форума Ответить с цитированием
Старый 01.02.2012, 19:32   #4
jetei
Пользователь
 
Регистрация: 29.08.2011
Сообщений: 24
По умолчанию

Спс оромное!!!!
jetei вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Правильное добавление маГГ85 SQL, базы данных 5 14.01.2012 23:26
Решение правильное маГГ85 PHP 2 15.12.2011 21:30
Правильное позиционирование элемента ZvEr_HaCkEr HTML и CSS 5 13.06.2011 21:48
Правильное использование setw Андрей Чернуха Общие вопросы C/C++ 0 04.01.2011 21:24
правильное снятие хука majestic Win Api 1 11.01.2010 02:52