Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.08.14;
Скачать: CL | DM;

Вниз

TDxInput в ДэлфиХ   Найти похожие ветки 

 
Green_Templar ©   (2005-04-20 21:45) [0]

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


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

> 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 уже давно не работал :)


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

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


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

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

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


 
boalse ©   (2005-04-21 04:25) [4]

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


 
Green_Templar ©   (2005-04-21 11:25) [5]

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


 
Домовенок ©   (2005-04-21 15:50) [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 уменьшаться - одновременно.


 
Sphinx ©   (2005-04-21 22:47) [7]

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

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

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


 
boalse ©   (2005-04-22 06:22) [8]


> 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, и прошло определённое время после вылета последнией пули, то создаём новую пулю - автомат стреляет! Помоему, всё гораздо проще чем в инпуте, главное гибко. Достаточно просто поменять один флажок, и автомат начинает стрелять, либо перестаёт.


 
boalse ©   (2005-04-22 06:27) [9]

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


 
Green_Templar ©   (2005-04-23 01:26) [10]

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


 
Sphinx ©   (2005-04-23 12:48) [11]

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

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



Страницы: 1 вся ветка

Текущий архив: 2005.08.14;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.031 c
1-1122368068
dddim
2005-07-26 12:54
2005.08.14
winexec


4-1119361483
Grief
2005-06-21 17:44
2005.08.14
вызов из dll процедуры, выдающей массив


5-1092222402
far
2004-08-11 15:06
2005.08.14
Перехват изменения набора полей DataSet-а в design-time (2)


14-1122291789
vajo
2005-07-25 15:43
2005.08.14
Как сохранить данные с формы html страницы?


1-1122551928
vigo
2005-07-28 15:58
2005.08.14
Вопрос по TOpenDialog