Форум: "Игры";
Текущий архив: 2005.06.06;
Скачать: [xml.tar.bz2];
ВнизИгровой цикл Найти похожие ветки
← →
Игнатенков Станислав (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;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.014 c