![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Нет эффекта от переключения раскладки
Трин © (2008-07-15 12:56:00)Здравствуйте, Мастера!
Пишу игрушку, но появились траблы при обработке нажатий клавиш.
Управление типа WASD, поэтому проверку нажатий осуществляю функцией:
procedure iskeydown(c: Char): boolean;
var
vk: integer;
begin
vk := VkKeyScan(c) and $FF;
if vk <> $FF then
Result := (GetAsyncKeyState(vk)<0)
else Result := False;
end;
В действии это выглядит так:
if iskeydown('w') then Player.Go(dForward);
Но по-умолчанию у многих стоит раскладка, являющаяся стандартной для проживающей страны (Русская, Украинская, Итальянская, пр...).
Чтобы избавиться от этого я в Form.Create добавил:
LoadKeyboardLayout('00000409', KLF_ACTIVATE);
При этом языковая панель Windows показывает, что текущий язык Английский, но обработка клавиш не происходит, поэтому мне приходится переключать сначала на русский язык, а потом снова на английский и только тогда программа начинает обрабатывать нажатия клавиш.
Трин (2008-07-17 14:10:00) [1]сянкс, думаю тему можно закрывать
Johnmen (2008-07-15 13:43:00) [2]Обработка клавиш в играх никаким боком не связана с раскладками и прочими локальными явлениями.
Обрабатываются скан-коды клавиш. Они абсолютны :)
Обрати внимание на WM_KEYDOWN, читай здесь
http://www.delphikingdom.com/asp/viewitem.asp?catalogid=169
KilkennyCat (2008-07-15 13:10:00) [3]использовать конструкцию case
использовать коды клавиш
Трин (2008-07-15 12:57:00) [4]Использую TurboDelphi под WindowsXP