![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Игровой цикл [Delphi, Windows]
Игнатенков Станислав © (2005-03-10 23:16:00)Подскажите как лучше реализовать?????
cyborg (2005-03-12 08:43:00) [1]А чего ты хотел? Хочешь чтобы по максимуму было, так и будет 100% загрузка процессора. Либо делай Sleep, когда вычисления и отрисовка не нужны.
parovoZZ (2005-03-12 04:33:00) [2]Короче :
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;
с (2005-03-12 01:00:00) [3]
while (true)
{
//бла-бла-бла
}
Sphinx (2005-03-11 21:24:00) [4]> XProger © (11.03.05 21:08) [7]
Я имел в виду занятость процессора именно циклом...добавив вычислений и отрисовку и т.д. снижаем нагрузку на выполнение самого цикла, естественными "тормозами" уже будут служить процедуры рендера и расчет физики и прочего в игре...особенно заметно будет при включенной VSync.
Это не значит конечно, что в Диспетчере задач занятость упадет с 100 скажем до 50, это значит, что снизится занятость процессора именно на выполнение циклаwhile ... do .... К примеру при включенной верт. синхронизации при выполнении процедуры перестановки буферов процесс будет простаивать, и соответственно процессор не будет загружен...та же история и если будут выполняться длительные операции на графическом ядре в которых центральный процессор не учавствует...и всё это как раз снизит 100%-ную занятость ЦП.
Если я не прав, подправьте пожалуйста...
XProger (2005-03-11 21:08:00) [5]Sphinx, 100% загрузка не снизится при добавлении вычислений :)
Да и особых тормозов такой "пустой цикл" вызывать не будет...
Sphinx (2005-03-11 09:55:00) [6]Извените, не понял сразу :) сперва подумал вы про собственно "геймплэй" спрашиваете :)
А по поводу непосредственно цикла, всё правильно, команда GetMessage ждёт прихода сообщения, и пока сообщение не будет получено, работа приложения не будет продолжена. Можно попробовать отсылать сообщения основному окну из дополнительного потока, но только не PostMessage, а SendMessage иначе будут "подтормаживания". Но в целом это не самый лучший вариант (я про потоки).
А 100%-ная загрузка процессора...во-первых она несколько снизится когда вы добавите вычисления и собственно игровой процесс...а во-вторых, если игра полноэкранная - то проблемы в этом нет ни какой, всё равно пользователь будет играть в игру, а не бродить параллельно по Интернету, а если в окне, тогда лучше вариант с GetMessage.
З.Ы. Это только моё мнение и оно может отличаться от мнения истинных мастеров...
> гораздо лучше чем статьи всякие дурацкие.
А без статей и анализа "как это сделано у других" ограничиваясь только чужим кодом ни чего не добьётесь, совершенно...в лучшем случае повторите то что было сделано в исходном коде, ну може чуть-чуть добавите пару эффектов, но это не есть творчество... Зачем тогда по вашему выпускают книги "Как написать игру", "Алгоритмы игр" (названия придуманные, но что-то в духе видел в продаже) ?
Игнатенков Станислав (2005-03-11 00:51:00) [7]Спасибо... только возникает сложность...
если написать
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%
крокодил гений (2005-03-11 00:27:00) [8]в смысле, исходники тама.
гораздо лучше чем статьи всякие дурацкие.
крокодил гений (2005-03-11 00:25:00) [9]на сколько я знаю люди предпочитают делать на api. Окно получает сообщения и как-то реагирует на них, а если не получает - пересчитывает сцену и перерисовывается. Интервал времени узнаётся через GetTickCount.
в общем, на http://code.rpro.ru/можете посмотреть.
Игнатенков Станислав (2005-03-10 23:31:00) [10]Игра будет на подобии героев...
Лучше сделать как поток? просто как цикл while: sleep: ProcessMessages: end; ;)
Sphinx (2005-03-10 23:28:00) [11]Уточните вопрос пожалуйста.
Жанр игры, цель игры как минимум не названы...
А если интересно, попробуйте с http://www.gamedev.ruскачать диздок на только что закончившийся конкурс...там более чем подробно всё описано...только надеюсь они её еще не удалили ;)