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

Поиск:

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


Новичок



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

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



Спасибо что пытаетесь помочь. Да программист я не опытный, но запихать в WM_PAINT это так мной было и сделано с самого начала ковыряния с этим кодом, так как по другому пока не работает кроме как установки функции в тело if что предложил мне Mazzi. 
Цитата
Ветвь else не вызовется никогда, перенеси свой render в ветвь if и всё.



и я бы особо и не парился, но зная что WM_PAINT вызывается только когда нужно перерисовать окно когда оно например закрыто, а потом мы вытаскиваем его наружу, мне очень странно и пока не понятно почему оно вызывается постоянно. Наблюдая за другими окнами и смотря какие им посылаются сообщения я не вижу, чтобы им посылалось бесконечно WM_PAINT. 

Да и само то что взятый из Тутора по DirectX цикл обработки сообщений который мне предложил Supersedes идентичен моему - он тоже не работает. 

Так вот скажите - это что инициализация DirectDraw вызвала такой шквал сообшений WM_PAINT в мое окно. Тогда почему взятый из учебника цикл (который по логике должен работать - я ведь не сам его придумал) не работает.
PM MAIL   Вверх
Supersedes
Дата 18.8.2008, 10:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



konekt, я был бы очень признателен если ты выволил весь код целиком. Думаю стало бы намного понятнее что к чему!

Цитата

Да и само то что взятый из Тутора по DirectX цикл обработки сообщений который мне предложил Supersedes идентичен моему - он тоже не работает.

Заметь я не предлагал тебе свой код. Я просто сказал что у меня он прекрасно работает smile 

Rickert
Цитата

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

Мне очень грустно об этом говорить, но решение ты не предложил... Если хочешь то можем поговорить об этом в аське. Мой UIN: 373706950
Знаешь что такое UIN !?))

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


Новичок



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

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



Supersedes, вываливать то особо и нечего. Стандартное Windowoe приложение в котором происходит инициализация DirectDraw. Затем стандартный цикл обработки переделывается в тот что я привожу (он взят из книги). 
Если я правильно понимаю работу стандартного цикла, то приложение ждет когда поступит сообщение, если оно поступает то начинается его обработка, если сообщений нет - программа бездействует.
Так вот мой новый цикл должен заставлять программу не бездействовать в это время, а выполнять функцию Render() в которую может быть запихано все, что угодно. Но этого не происходит.
Может быть я слишком тупой и мой вопрос уже всех достал. Но где в моих рассуждениях может быть ошибка. 
PM MAIL   Вверх
Rickert
Дата 25.8.2008, 02:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



konekt, текст функции WndProc в студию.


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


Новичок



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

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



konekt, да, покажи нам WndProc.
PM MAIL ICQ   Вверх
Rpahut
Дата 25.8.2008, 11:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


0xdeadbeef
*


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

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



Из хелпа по winapi(WM_PAINT):
Цитата

The system sends this message when there are no other messages in the application’s message queue.

так чо оно должно быть там постоянно, хотя чтобы сказать наверняка нужно глубоко копнуть в винапи.

И мне класть на книги и туторы - моя голова мне подсказывает следующий код:
Код

while (true) {
    while (PeekMessage(&Msg, NULL, 0, 0, PM_NOREMOVE)) {
        if (GetMessage(&Msg, NULL, 0, 0)) {
            TranslateMessage(&Msg);
            DispatchMessage(&Msg);
        }
        else {
            return TRUE;
        }
    }
    Render();
}

--------------------
C/C++ GameDevRSS Раздела программирования игрOpenGL - уроки от NeHeКак продать идею?
PM MAIL   Вверх
Supersedes
Дата 27.8.2008, 07:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Rpahut,
Код

while (true) {
    while (PeekMessage(&Msg, NULL, 0, 0, PM_NOREMOVE)) {
        if (GetMessage(&Msg, NULL, 0, 0)) {
            TranslateMessage(&Msg);
            DispatchMessage(&Msg);
        }
        else {
            return TRUE;
        }
    }
    Render();
}


Код

    for ( ; ; ) {
        if ( PeekMessage( &msg, NULL, 0, 0, PM_REMOVE ) ) {
            if ( msg.message == WM_QUIT ) break;
            TranslateMessage( &msg );
            DispatchMessage( &msg );
        }
        render();
    }

в чем разница?
PM MAIL ICQ   Вверх
VK_Techno
Дата 12.9.2008, 09:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Как вариант:
при обработке WM_CREATE (или где-нибудь рядом) запустить таймер с помощью SetTimer() на, скажем, 30 мс. В обработчике WM_TIMER (или функции таймера, указатель на которую передали SetTimer()) вызвать Render().
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Вы можете найти полезным что...
Alexeis
Rickert
  • Английская документация по DirectX лежит где-то здесь.
  • Английская документация по OpenGL лежит где-то там.
  • Гейм-дев у нас обсуждают где-то тут

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

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


 




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


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

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