![]() |
Модераторы: xvr |
![]() ![]() ![]() |
|
zmaximka |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 65 Регистрация: 27.5.2006 Где: Украина, Одесса Репутация: нет Всего: нет |
Здравствуйте. Я решил написать небольшую игру на C++ с использованием ncurses. Я использую объектно-ориентированный подход, но поскольку ncurses написан на С я хочу написать класс "обвертку" который будет инкапсилировать нуженые мне функции из ncurses. Инициализацию и деинециализацию ncurses можно делать в конструкторе и деструкторе класса. Но я соверщенно не могу придумать обработку нажатия клавиш. В процедурной программе нажатие клавиши я обрабатываю в цикле:
Подскажите пожалуйста, как можно инкапсулировать обработку нажатия клавиш c помощью ncurses? |
|||
|
||||
boostcoder |
|
|||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 16 Всего: 110 |
виртуальным методом.
|
|||
|
||||
zmaximka |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 65 Регистрация: 27.5.2006 Где: Украина, Одесса Репутация: нет Всего: нет |
Расскажите пожалуйста по подробнее. Как можно инкапсулировать бесконечный цикл? |
|||
|
||||
boostcoder |
|
|||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 16 Всего: 110 |
|
|||
|
||||
zmaximka |
|
||||
Шустрый ![]() Профиль Группа: Участник Сообщений: 65 Регистрация: 27.5.2006 Где: Украина, Одесса Репутация: нет Всего: нет |
Да, я представляю что такое виртуальный метод. Но мне кажется или я вас или вы меня неправильно понимаете. Немного погуглив, я понял что мой вопрос больше относиться к событийно-ориентированному программированию. В идеале хотелось бы что-то на подобие MFC, но как я понял в UNIX-подобных системах понятие события отсутствует. И мой вопрос как раз, какими возможностями можно написать цикл обработки события нажатия кнопки инкапсулированное в классе c использованием ncurses. PS: Еще мне кажется что я усложняю. Возможно есть более простые решения данной проблемы? |
||||
|
|||||
boostcoder |
|
|||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 16 Всего: 110 |
вот теперь понятней.
тут два варианта: 1. в отдельном потоке запустить цикл читающий клаву. 2. реализовать очередь событий, и чтоб она помимо прочего, еще и постоянно читала состояние клавы. по поводу первого - просто в реализации, но создаст множество проблем в будущем, ибо придется из другого потока звать обработчик нажатия. |
|||
|
||||
zmaximka |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 65 Регистрация: 27.5.2006 Где: Украина, Одесса Репутация: нет Всего: нет |
Спасибо. Тогда подскажите пожалуйста, как можно организовать очередь событий в UNIX-подобных системах. А вообще было бы здорово если посоветовали книжку где можно почитать об этом.
|
|||
|
||||
boostcoder |
|
|||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 16 Всего: 110 |
очередь событий не зависит от системы. это обычно std::list<> хранящий указатели на базовый тип, в то время как сами объекты на которые указывают указатели - реализации конкретных задач. я хз. я в книжках это не читал. самая простая(на мой взгляд) реализация событийной модели реализована в FLTK. |
|||
|
||||
zmaximka |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 65 Регистрация: 27.5.2006 Где: Украина, Одесса Репутация: нет Всего: нет |
Мне бы все таки хотелось самому реализовать очередь событий. На сколько я понял очередь событий можно организовать с помощью сигналов. Но мне не понятно как же заставить срабатывать обработчик сигнала по нажатию на клавишу. |
|||
|
||||
boostcoder |
|
|||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 16 Всего: 110 |
||||
|
||||
zmaximka |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 65 Регистрация: 27.5.2006 Где: Украина, Одесса Репутация: нет Всего: нет |
||||
|
||||
boostcoder |
|
|||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 16 Всего: 110 |
смотри реализацию Fl::run() 'Fl' - пространство имен, не класс. ну я тут хз. никогда не использовал. |
|||
|
||||
xvr |
|
||||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 20 Всего: 223 |
Нет. UNIX сигналы не имеют никакого отношения с клавиатуре
Цикл чтения и обработки клавиатуры у вас останется в любом виде (и в OOP и в не-OOP). Но в OOP случае он будет спрятан внутри ваших оберток, и наружу будут торчать только обработчики клавиш (точнее они будут торчать вверх ногами - извне вашей библиотеки внутрь её ![]() |
||||
|
|||||
![]() ![]() ![]() |
Правила форума "С/С++: Программирование под Unix/Linux" | |
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, xvr. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Программирование под Unix/Linux | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |