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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 14.01.2009, 10:16   #1
Pyton
Пользователь
 
Аватар для Pyton
 
Регистрация: 18.12.2008
Сообщений: 47
По умолчанию Однопоточность и многопоточность приложения

Люди добрые, помогите срочно плз!
У меня игра на двоих игроков, и, следовательно, 2 управления с клавиатуры.Когда я нажимаю клавишу идти для 1-го игрока и он движется,
то нажатая клавиша идти для 2-го игрока не работает! Или то, или другое!
Как сделать такую многопоточность приложения ?

Очень срочно надо, плз помогите!
Заранее благодарю.
Pyton вне форума Ответить с цитированием
Старый 14.01.2009, 11:17   #2
Kostia
Участник клуба
 
Аватар для Kostia
 
Регистрация: 21.11.2007
Сообщений: 1,690
По умолчанию

Во-первых если вы сделали управление на стрелках, то убирайте его и делайте например одно на буквах WASD, а второе на доп. клавиатуре 8456.
Дальше все просто.
Заводите массив
keys:array[0..255]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;
И проверка нажатия клавиши...
if keys[27] then form1.Close;
Kostia вне форума Ответить с цитированием
Старый 14.01.2009, 11:25   #3
mutabor
Телепат с дипломом
Старожил
 
Аватар для mutabor
 
Регистрация: 10.06.2007
Сообщений: 4,929
По умолчанию

Цитата:
Во-первых если вы сделали управление на стрелках, то убирайте его
А почему так? Помоему стрелки хорошо сочетаются с WASD.
The future is not a tablet with a 9" screen no more than the future was a 9" black & white screen in a box. It’s the paradigm that survives. (Kroc Camen)
Проверь себя! Онлайн тестирование | Мой блог
mutabor вне форума Ответить с цитированием
Старый 14.01.2009, 11:56   #4
Kostia
Участник клуба
 
Аватар для Kostia
 
Регистрация: 21.11.2007
Сообщений: 1,690
По умолчанию

Ну для начала нужно включить шутер и настроить кнопки стрелок для управления и нажать вверх и влево и попытаться прыгнуть или присесть.
Вам этого не удастся, т.к. при таком условии больше никакой кнопки нельзя нажать.
А при wasd и 8456 я смог одновременно нажать по 3 кнопки с каждой связки(WAD и 456 например)
_________
>никакой кнопки нельзя нажать.
Ага, вру, можно WASD, но пробел и некоторые другие нельзя.

Последний раз редактировалось Kostia; 14.01.2009 в 12:05.
Kostia вне форума Ответить с цитированием
Старый 14.01.2009, 15:30   #5
Beermonza
Инженер ИС
Старожил
 
Аватар для Beermonza
 
Регистрация: 13.12.2006
Сообщений: 2,671
По умолчанию

А у меня на ноуте нет "8456" секции, и что делать? ...думаю, не имеет значения, какие клавиши пользовать, главное - алгоритм опроса клавиатуры. Как частный случай, это Form.KeyDown и Form.KeyUp использование флажков Boolean, плюс общая процедура на выполнения обновления игрового пространства через проверку флажков.
Руководитель проекта MMO 2D RPG: Настоящее имя Денис Стрижак (10.05.1981-6.02.2019) Мир духу его
Beermonza вне форума Ответить с цитированием
Старый 14.01.2009, 23:43   #6
Pyton
Пользователь
 
Аватар для Pyton
 
Регистрация: 18.12.2008
Сообщений: 47
По умолчанию

Попробую с FormKeyDown и FormKeyUp, а вот сделать с тем, что у меня происходит глюк при нажатии на стрелку влево(или) и сразу же нажатия на стрелку вправо, то есть шарик у меня размножается .=) Особенно меня
интересует, что скажет Kostia, т.к. половину кода я взял из его игр.
Вот, скидываю 1 вариант игры, помогите плз как можно быстрее.
Для игры есть описание, Esc-выход из игры.
Сегодня!
Вложения
Тип файла: rar SmileBall.Сумрак.rar (13.7 Кб, 11 просмотров)
Pyton вне форума Ответить с цитированием
Старый 15.01.2009, 17:05   #7
Beermonza
Инженер ИС
Старожил
 
Аватар для Beermonza
 
Регистрация: 13.12.2006
Сообщений: 2,671
По умолчанию

Pyton, пропиши условие, если оба флажка кнопок вправо и влево True, то стоять на месте.
Руководитель проекта MMO 2D RPG: Настоящее имя Денис Стрижак (10.05.1981-6.02.2019) Мир духу его
Beermonza вне форума Ответить с цитированием
Старый 15.01.2009, 17:14   #8
Kostia
Участник клуба
 
Аватар для Kostia
 
Регистрация: 21.11.2007
Сообщений: 1,690
По умолчанию

nitro в моих играх не было, так что это вы сами, а про раздвоение нужно что-то типа этого сделать:

Код:
if left then ... else
if right then ...;
if up then ... else
if down then ...;'
для определения нажатой кнопки я раньше всегда использовал getkeystate:
if getkeystate(key)shr 31=1 then ...
или
Код:
var 
  keys: tkeyboardstate;
begin
  getkeyboarstate(keys);
  if (keys[key]=128) or (keys[key]=129) then ...

Последний раз редактировалось Kostia; 15.01.2009 в 17:19.
Kostia вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
многопоточность в Delphi xakkkkker Свободное общение 12 13.08.2010 18:52
Многопоточность Indy AVer Работа с сетью в Delphi 14 14.02.2009 22:10
Многопоточность при отправке почты sanchopansa Работа с сетью в Delphi 4 04.10.2008 14:57
многопоточность в сетевых приложениях AlexandrY Работа с сетью в Delphi 9 13.07.2008 02:43
Делаю сайты, пишу маленькие/большие скрипты. Пишу веб-приложения и приложения под Windows. SkyM@n Фриланс 3 29.12.2007 16:21