Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Игры";
Текущий архив: 2005.08.14;
Скачать: [xml.tar.bz2];

Вниз

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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.47 MB
Время: 0.013 c
4-1118784775
ranetka
2005-06-15 01:32
2005.08.14
запустить свой логон


6-1115112105
Pavelkq
2005-05-03 13:21
2005.08.14
try finally для IdFTP


14-1121882365
LargeR
2005-07-20 21:59
2005.08.14
Сайты по системному программированию


4-1118676140
voe
2005-06-13 19:22
2005.08.14
Запись CD-R собственными руками!


4-1118514492
ctranik
2005-06-11 22:28
2005.08.14
Получение данных





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский