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

Вниз

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

 
Игнатенков Станислав   (2005-03-10 23:16) [0]

Подскажите как лучше реализовать?????


 
Sphinx ©   (2005-03-10 23:28) [1]

Уточните вопрос пожалуйста.

Жанр игры, цель игры как минимум не названы...

А если интересно, попробуйте с http://www.gamedev.ru скачать диздок на только что закончившийся конкурс...там более чем подробно всё описано...только надеюсь они её еще не удалили ;)


 
Игнатенков Станислав   (2005-03-10 23:31) [2]

Игра будет на подобии героев...
Лучше сделать как поток? просто как цикл while: sleep: ProcessMessages: end; ;)


 
крокодил гений   (2005-03-11 00:25) [3]

на сколько я знаю люди предпочитают делать на api. Окно получает сообщения и как-то реагирует на них, а если не получает - пересчитывает сцену и перерисовывается. Интервал времени узнаётся через GetTickCount.

в общем, на http://code.rpro.ru/ можете посмотреть.


 
крокодил гений   (2005-03-11 00:27) [4]

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


 
Игнатенков Станислав   (2005-03-11 00:51) [5]

Спасибо... только возникает сложность...
если написать

While GetMessage(Msg,0,0,0) do
 begin
  TranslateMessage(Msg);
  DispatchMessage(Msg);
 end else
  MEGAGAME;

все работает ок, но игра рисует только когда окну приходят сообщения

а если

While PeekMessage(Msg,0,0,0,pm_remove) do
 begin
  TranslateMessage(Msg);
  DispatchMessage(Msg);
 end else
  MEGAGAME;

то процессор загружаеться до 100%


 
Sphinx ©   (2005-03-11 09:55) [6]

Извените, не понял сразу :) сперва подумал вы про собственно "геймплэй" спрашиваете :)

А по поводу непосредственно цикла, всё правильно, команда GetMessage ждёт прихода сообщения, и пока сообщение не будет получено, работа приложения не будет продолжена. Можно попробовать отсылать сообщения основному окну из дополнительного потока, но только не PostMessage, а SendMessage иначе будут "подтормаживания". Но в целом это не самый лучший вариант (я про потоки).

А 100%-ная загрузка процессора...во-первых она несколько снизится когда вы добавите вычисления и собственно игровой процесс...а во-вторых, если игра полноэкранная - то проблемы в этом нет ни какой, всё равно пользователь будет играть в игру, а не бродить параллельно по Интернету, а если в окне, тогда лучше вариант с GetMessage.

З.Ы. Это только моё мнение и оно может отличаться от мнения истинных мастеров...

> гораздо лучше чем статьи всякие дурацкие.

А без статей и анализа "как это сделано у других" ограничиваясь только чужим кодом ни чего не добьётесь, совершенно...в лучшем случае повторите то что было сделано в исходном коде, ну може чуть-чуть добавите пару эффектов, но это не есть творчество... Зачем тогда по вашему выпускают книги "Как написать игру", "Алгоритмы игр" (названия придуманные, но что-то в духе видел в продаже) ?


 
XProger ©   (2005-03-11 21:08) [7]

Sphinx, 100% загрузка не снизится при добавлении вычислений :)
Да и особых тормозов такой "пустой цикл" вызывать не будет...


 
Sphinx ©   (2005-03-11 21:24) [8]

> XProger ©   (11.03.05 21:08) [7]

Я имел в виду занятость процессора именно циклом...добавив вычислений и отрисовку и т.д. снижаем нагрузку на выполнение самого цикла, естественными "тормозами" уже будут служить процедуры рендера и расчет физики и прочего в игре...особенно заметно будет при включенной VSync.
Это не значит конечно, что в Диспетчере задач занятость упадет с 100 скажем до 50, это значит, что снизится занятость процессора именно на выполнение цикла while ... do .... К примеру при включенной верт. синхронизации при выполнении процедуры перестановки буферов процесс будет простаивать, и соответственно процессор не будет загружен...та же история и если будут выполняться длительные операции на графическом ядре в которых центральный процессор не учавствует...и всё это как раз снизит 100%-ную занятость ЦП.

Если я не прав, подправьте пожалуйста...


 
с   (2005-03-12 01:00) [9]

while (true)
{
//бла-бла-бла
}


 
parovoZZ ©   (2005-03-12 04:33) [10]

Короче :
while Msg.message <> WM_QUIT do
if PeekMessage (Msg, 0, 0, 0, PM_REMOVE) then
 begin
  TranslateMessage (Msg);
  DispatchMessage (Msg);
 end
   else
     if Active then OnDraw else WaitMessage;


 
cyborg ©   (2005-03-12 08:43) [11]

А чего ты хотел? Хочешь чтобы по максимуму было, так и будет 100% загрузка процессора. Либо делай Sleep, когда вычисления и отрисовка не нужны.



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

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

Наверх




Память: 0.5 MB
Время: 0.033 c
6-1111352201
redlord
2005-03-20 23:56
2005.06.06
охрана блокированного сокета


1-1116698048
Marina_Sm
2005-05-21 21:54
2005.06.06
Внешняя компонента для 1С


1-1116881272
Erick
2005-05-24 00:47
2005.06.06
Как нарисовать точку из 3-х координат?


3-1114680917
Bocman
2005-04-28 13:35
2005.06.06
автоинкремент в Paradox


1-1116676673
antol
2005-05-21 15:57
2005.06.06
как ввести логическое выражение