Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Игры";
Текущий архив: 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
3-1114680917
Bocman
2005-04-28 13:35
2005.06.06
автоинкремент в Paradox


14-1116274252
aga
2005-05-17 00:10
2005.06.06
XP prof vs XP home


5-1086130651
Vinil
2004-06-02 02:57
2005.06.06
Как ограничить Memo ?


4-1112513000
Grief
2005-04-03 11:23
2005.06.06
Прозрачное окно (полностью) на API


1-1116644188
Roman_Bar
2005-05-21 06:56
2005.06.06
Ссылка с одной кнопке на другую





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский