Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

TDxInput в ДэлфиХ [Delphi, Windows]


Green_Templar ©   (2005-04-20 21:45:00) 

Как делают стрельбу из автомата мышой? У TDxdraw есть метод onmousedown & onmouseup, а метод, который говорит, что кнопка зажата, нету :(
Кто-нибудь сталкивался с такой проблемой, что некоторые клавиатурные кнопки dxinput в ДэлфиХ одновременно не ловит? Вот у меня кнопки (A or D) and J and U одновременно не ловит :( В чём проблема?
В Dxinput есть поле Mouse. Dxinput не предлагает свой доступ к мыши, а использует unit Controls?
А где можно подчерпнуть кладязь инфы по TDxInput в Дэлфи?


Sphinx   (2005-04-23 12:48:00) [1]

> Green_Templar ©   (23.04.05 01:26) [10]

Пропиши правильно путь до файла keyboard.pasи сделай Build проекту на всякий случай.


Green_Templar   (2005-04-23 01:26:00) [2]

"Cannot find keyboard.dcu", поделитесь пожалуйста на green_templar@rambler.ru!


boalse   (2005-04-22 06:27:00) [3]

В подтверждение моих слов, что всё нормально работает, можешь скачать мою игру: http://boalse.narod.ru/mf.htm, правда без исходников.


boalse   (2005-04-22 06:22:00) [4]


> Green_Templar ©   (21.04.05 11:25) [5]
Вот стрельбу из автомата ты бы как решил для мыши и клавы?


Да также как предложил Домовенок   (20.04.05 22:52) [1]
У объекта класса TAvtomat имеется булевское свойство fire. В стандартном событии OnMouseDown, или KeyDown, смотрю какая клавиша нажата. В первом случае либо Button=mbLeft либо mbRight, во втором случае получаю код клавиши и сравниваю его с тем, на котором у меня стоит стрельба. Если эти условия выполняются, меняю флаг TAvtomat.Fire в true. Аналогично в событиях OnMoseUp и OnKeyUp, только теперь меняю на false. При каждом игровом цикле обрабатывается событие, ну например TAvtomat.Go, в этом событии смотрим на флаг Fire, если он true, и прошло определённое время после вылета последнией пули, то создаём новую пулю - автомат стреляет! Помоему, всё гораздо проще чем в инпуте, главное гибко. Достаточно просто поменять один флажок, и автомат начинает стрелять, либо перестаёт.


Sphinx   (2005-04-21 22:47:00) [5]

> Green_Templar ©   (21.04.05 11:25) [5]

Почитай на XDev.ru статьи по DirectInput8 (если в С/С++ коде разбираешься хоть немного) и сделай всё сам, я к примеру сделал сам и теперь просто проверяю:

if DIObject.Keys[DI_Esc] then Close;приблизительный код, и события можно самому организовать на мыша...
короче совет...попробуй сделать сам :)


Домовенок   (2005-04-21 15:50:00) [6]

> IsKeyDown тоже не подходит - там ведь нельзя клавиши зажимать :)

Почему нельзя клавиши зажимать?


if IsKeyDown(VK_UP) then inc(y) else
 if IsKeyDown(VK_Down) then dec(y);

if IsKeyDown(VK_LEFT) then dec(x) else
 if IsKeyDown(VK_RIGHT) then inc(x);


Если зажать одновременно вверх и влево то Y будет увеличиваться, а X уменьшаться - одновременно.


Green_Templar   (2005-04-21 11:25:00) [7]

Домовёнок, IsKeyDown тоже не подходит - там ведь нельзя клавиши зажимать :)
Boalse - а чем ты пользуешься для инпута? Вот стрельбу из автомата ты бы как решил для мыши и клавы?


boalse   (2005-04-21 04:25:00) [8]

Моё мнение - ну его в баню этот инпут. Также как и DXSpiteEngine. Из DelphiX я использую только DXDraw, DXImageList, DXSound, DXTimer. Остальное всё предпочитаю сам обрабатывать, под конкретную задачу.


Домовенок   (2005-04-21 03:31:00) [9]

> Спрошу так: сколько клавиш ловит дхинпут одновременно? Давным-давно слышал, что одновременно можно словить максимум 6 кнопок, правда ли?

Ничего про DXInput не знаю. Пробуй добавить в Uses Keyboard; и использовать функцию if IsKeyDown(..) then //... Одновременно так можно проверять нажатие сразу нескольких клавишь. А вот сколько именно точно сказать не могу.


Green_Templar   (2005-04-21 00:41:00) [10]

>Что тут сложного?
Тогда при каждом OnDxtimer нужно смотреть, тру ли эта переменная, и если да, вызывать процедуру. Не сложно, но, кажется,сделать это ивэнтом было бы легче. Ну нет - так нет.
>Приведи код.
Не могу, СЛИШКОМ большой. Спрошу так: сколько клавиш ловит дхинпут одновременно? Давным-давно слышал, что одновременно можно словить максимум 6 кнопок, правда ли?


Домовенок   (2005-04-20 22:52:00) [11]

> Green_Templar (20.04.05 21:45)

> а метод, который говорит, что кнопка зажата, нету :(

Сделай переменную: MouseDown: Boolean; Когда происходит событие OnMouseDown присваивай ей значение True, а когда происходит OnMouseUp, присваивай значение False. А дальше уже исходи из значения этой переменной. Что тут сложного?

> Вот у меня кнопки (A or D) and J and U одновременно не ловит :( В чём проблема?

Наверное, ты как-то не правильно обрабатываешь нажатие клавиш. Приведи код.

> В Dxinput есть поле Mouse. Dxinput не предлагает свой доступ к мыши, а использует unit Controls?

Тут я вообще не понял о чем речь. Возможно потому что с DelphiX уже давно не работал :)


Наверх

Титульная страница Поиск, карта сайта Написать письмо