Модераторы: Rickert, Alexeis, BorisVorontsov

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Цикл обработки сообщений игры, Создание цикла обработки сообщений 
:(
    Опции темы
konekt
Дата 11.8.2008, 22:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 23
Регистрация: 1.5.2008

Репутация: нет
Всего: нет



Изменяю цикл обработки сообщений следующим образом:

MSG mssg;

PeekMessage(&messg,NULL,0,0,PM_NOREMOVE);

while(mssg.message!=WM_QUIT){
          
          if(PeekMessage(&mssg,NULL,0,0,PM_REMOVE)){
                     TranslateMessage(&mssg);
                     DispatchMessage(&mssg);
           }
          else{
                      ///Нет сообщений для обработки - выполнить код игры
                     Render();
           }
}
Вроде бы цикл обработки сообщений должен постоянно вызывать Render()
Но на самом деле такого у меня не происходит. Если кто знает причину то помогите разобраться.

PM MAIL   Вверх
Mazzi
Дата 12.8.2008, 08:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Правильный
**


Профиль
Группа: Комодератор
Сообщений: 825
Регистрация: 3.4.2003

Репутация: нет
Всего: 21



поставь в обе ветви ( if   и    else) счётчики для подсчёта количества входов в каждую ветвь.

Увидишь куда чаще заходишь.


--------------------
Мне нужны помощники.
PM MAIL WWW   Вверх
konekt
Дата 12.8.2008, 12:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 23
Регистрация: 1.5.2008

Репутация: нет
Всего: нет



Счетчики ставил. Получается, что функция Render() никогда не вызывается, а должна , по идеи, вызываться все время smile .
Зато сообщение WM_PAINT вызывается постоянно. Логика вроде в этом коде есть и он ДОЛЖЕН вызывать функцию Render() но он НЕ ВЫЗЫВАЕТ.
PM MAIL   Вверх
Mazzi
Дата 12.8.2008, 12:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Правильный
**


Профиль
Группа: Комодератор
Сообщений: 825
Регистрация: 3.4.2003

Репутация: нет
Всего: 21



Ветвь else не вызовется никогда, перенеси свой render в ветвь if и всё.

Добавлено через 2 минуты и 7 секунд
А не вызовется, потому, что для этого нужно, чтобы не было  сообщения для функции. А без сообщения не вызовется твоя функция обработки сообщений. Понял?


--------------------
Мне нужны помощники.
PM MAIL WWW   Вверх
konekt
Дата 12.8.2008, 22:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 23
Регистрация: 1.5.2008

Репутация: нет
Всего: нет



Вообще вставить функцию Render() в тело if веще хорошая, но этот код взят из книги по DirectX9 Алена Торна и по всем параметрам должен работать.
Если есть сообщений для обработки, то должна выполняться ветвь if, а если нет сообщений (тоесть я не посылаю окну ни-каких команд) должна выполняться ветвь else, которая минуте Translant Message и DispatchMassage. 
PM MAIL   Вверх
Supersedes
Дата 13.8.2008, 07:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 36
Регистрация: 29.7.2008

Репутация: нет
Всего: нет



Код

ZeroMemory( &msg, sizeof( msg ) );
while ( msg.message != WM_QUIT ) {
    if ( PeekMessage( &msg, NULL, 0, 0, PM_REMOVE ) ) {
        TranslateMessage( &msg );
        DispatchMessage( &msg );
    } else render();
}


Все прекрасно работает. Ищи ошибку где-нить еще. Кстати у тебя я надеюсь "messg" и "mssg" -- это одно и то же!?
PM MAIL ICQ   Вверх
konekt
Дата 17.8.2008, 10:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 23
Регистрация: 1.5.2008

Репутация: нет
Всего: нет



Спасибо за цикл. Видно что он идентичен моему. Messg=mssg, просто я не могу копировать исходники т.к. интернет подключен к другому компьютеру.

Но к сожалению, этот цикл тоже не работает. Так как я пишу с помощью Visual Studio 2008 и свой проект создавал как не Win32 а как EmptyProgect.  У меня все работает если функцию Render() запихать в if, но должен работать в теле else и код от Supersedes тому наглядный пример.
 

PM MAIL   Вверх
mes
Дата 17.8.2008, 11:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: нет
Всего: 250



и свой проект создавал как не Win32 а как EmptyProgect
a где расположен цикл обработки?


--------------------
PM MAIL WWW   Вверх
Rickert
Дата 18.8.2008, 03:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ситхи не пройдут!
****


Профиль
Группа: Комодератор
Сообщений: 3356
Регистрация: 11.7.2006
Где: Лакрима

Репутация: 2
Всего: 52



Перенеси функцию Render в обработку WM_PAINT - самый правильный вариант. ИМХО


--------------------
Ни что не внушает сна крепче, чем день приисполненный трудов!
PM MAIL WWW Skype GTalk   Вверх
Supersedes
Дата 18.8.2008, 07:07 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 36
Регистрация: 29.7.2008

Репутация: нет
Всего: нет



Rickert, далеко не самый правильный вариант.
PM MAIL ICQ   Вверх
Rickert
Дата 18.8.2008, 07:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ситхи не пройдут!
****


Профиль
Группа: Комодератор
Сообщений: 3356
Регистрация: 11.7.2006
Где: Лакрима

Репутация: 2
Всего: 52



Supersedes, утверждение без аргументов - сотресание воздуха.


--------------------
Ни что не внушает сна крепче, чем день приисполненный трудов!
PM MAIL WWW Skype GTalk   Вверх
Supersedes
Дата 18.8.2008, 08:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 36
Регистрация: 29.7.2008

Репутация: нет
Всего: нет



Rickert
Цитата

Перенеси функцию Render в обработку WM_PAINT - самый правильный вариант.

Цитата

Supersedes, утверждение без аргументов - сотресание воздуха.


Абсолютно с тобой согласен!! Читай что сам пишешь!

Это сообщение отредактировал(а) Supersedes - 18.8.2008, 08:16
PM MAIL ICQ   Вверх
Rickert
Дата 18.8.2008, 08:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ситхи не пройдут!
****


Профиль
Группа: Комодератор
Сообщений: 3356
Регистрация: 11.7.2006
Где: Лакрима

Репутация: 2
Всего: 52



А программисту разве нужно уже всё разжёвывать чтобы он понял, что отрисовка сцены OpenGL, после отрисовки самого окна - это логично smile 


--------------------
Ни что не внушает сна крепче, чем день приисполненный трудов!
PM MAIL WWW Skype GTalk   Вверх
Supersedes
Дата 18.8.2008, 08:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 36
Регистрация: 29.7.2008

Репутация: нет
Всего: нет



Rickert, во-первых я не уверен что konekt на самом деле достаточно опытный программист.
Во-вторых, если бы ты сам был хорошим программистом, то ты наверняка бы понял что именно хочет автор статьи!
То что функцию render() надо запихнуть в WM_PAINT это по-моему и так понятно.. Тем не менее я думаю что автор статьи хотел чтобы данная фунция выполнялась постоянно и, соответственно постоянно отрисовывалась сцена. В данном случае изречение: 
Цитата

Перенеси функцию Render в обработку WM_PAINT - самый правильный вариант. ИМХО

неуместно smile 
PM MAIL ICQ   Вверх
Rickert
Дата 18.8.2008, 09:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ситхи не пройдут!
****


Профиль
Группа: Комодератор
Сообщений: 3356
Регистрация: 11.7.2006
Где: Лакрима

Репутация: 2
Всего: 52



У человека есть проблема - я предложил решение. Все остальные наши разговоры неуместны в этой теме, предлогаю продолжить через ЛС.


--------------------
Ни что не внушает сна крепче, чем день приисполненный трудов!
PM MAIL WWW Skype GTalk   Вверх
Ответ в темуСоздание новой темы Создание опроса
Вы можете найти полезным что...
Alexeis
Rickert
  • Английская документация по DirectX лежит где-то здесь.
  • Английская документация по OpenGL лежит где-то там.
  • Гейм-дев у нас обсуждают где-то тут

Ждём вас! С уважением, Alexeis, Rickert.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Мультимедия, OpenGL/DirectX | Следующая тема »


 




[ Время генерации скрипта: 0.1282 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.