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

Вниз

Игровой цикл   Найти похожие ветки 

 
Signate ©   (2005-09-12 17:36) [0]

Здраствуйте!
Подскажите как лучше ораганизовать игровой цикл? (обработка клавиш мыши, рендер, игровой процесс)...

Может использовать таймеры или потоки?

Все пишеться на WinApi


 
A22 ©   (2005-09-12 18:34) [1]

ИМХО, потоки только если без них никак. С 1 потоком головной боли меньше...


 
Signate ©   (2005-09-12 20:03) [2]

я хотел узнать как будет рациональней...


 
OSokin ©   (2005-09-13 19:55) [3]

сначала обработка клавиш, потом игровой процесс, потом рендер


 
XProger ©   (2005-09-13 20:57) [4]

http://xproger.mirg.ru/files/src/XTropper.rar
XTropper.dpr смотри, никаких потоков использовать не надо, и никаких delta time в физике.


 
Sphinx ©   (2005-09-13 21:14) [5]

Вот мой вариант...много всего...хотелось сделать поуниверсальней...
 // цикл обработки сообщений системы
 while boolAppRun do
   begin
     // получаем очередное сообщение
     if PeekMessage( recRenderTargetWindow.WindowMessage, 0, 0, 0, PM_REMOVE) then
       // если сообщение есть и получено
       begin
         // если сообщение об уничтожении окна - прервать выполнение цикла
         if recRenderTargetWindow.WindowMessage.message = WM_QUIT then boolAppRun := False;
         // обработать сообщение
         TranslateMessage(recRenderTargetWindow.WindowMessage);
         DispatchMessage(recRenderTargetWindow.WindowMessage);
       end
     else // if PeekMessage - если сообщение отсутствует
       begin
         // вычисляем промежуток времени с прошлого выполнения цикла
         if boolQPSupport then
           begin
             try
               QueryPerformanceCounter(intQPCountCurrent);
               if intQPCountCurrent < intQPCountLast then
                 dTick := (High(Int64) - intQPCountLast + intQPCountCurrent) / intQPFrequency
               else
                 dTick := (intQPCountCurrent - intQPCountLast) / intQPFrequency;
               intQPCountLast := intQPCountCurrent;
             except
               boolQPSupport := False;
               dTick := 0;
               dwLastTick := GetTickCount;
             end;
           end
         else
           begin
             dwCurrentTick := GetTickCount;
             dTick := ((dwCurrentTick - dwLastTick) / 1000);
             dwLastTick := dwCurrentTick;
           end;
         // считаем FPS
         Inc(dwFPSTick);
         dFPSCount := dFPSCount + dTick;
         if dFPSCount > 1.0 then
           begin
             dFPSCount := dFPSCount - 1.0;
             dwFPS     := dwFPSTick;
             dwFPSTick := 0;
           end;        
         // если провалена функция приложения - прервать выполнение цикла
         if Failed(ExecuteFunctionEXE(dTick)) then boolAppRun := False;
         // если окно вывода активно
         if recRenderTargetWindow.WindowActive then
           begin
             // если провалена отрисовка сцены - прервать выполнение цикла
             if Failed(DrawScene) then boolAppRun := False;
           end
         else // if recRenderWin.WindowActive - если окно вывода неактивно
           begin
           end;
       end;

ExecuteFunctionEXE(dTick) - тут идет обработка сцены, передвижения, контроль клавишь (вот состояние клавиш пока что обновляю в этой функции, но думаю вынести в функцию таймера).
DrawScene - собственно отрисовка всей сцены.



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

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

Наверх




Память: 0.49 MB
Время: 0.028 c
9-1126442970
whatisthematrix1
2005-09-11 16:49
2006.03.19
Что-то с текстурой в OpenGl не так...


10-1115290907
Santyago
2005-05-05 15:01
2006.03.19
Как в Excel документе можно определить конец файла


11-1121939783
shalex
2005-07-21 13:56
2006.03.19
Есть ли StatusBar для KOL ?


5-1127302633
RDS
2005-09-21 15:37
2006.03.19
Access violation in design time


15-1140972179
Fl@sh
2006-02-26 19:42
2006.03.19
Materboard i810 driver