Казуальные игрыФорум

Игра "Лес" на конкурс казуалок (3 стр)

Страницы: 1 2 3 4 Следующая »
#30
23:14, 2 мар 2010

Вот смотри:
Вариантов организации игрового цикла много.
Я использовал следующий вариант (в псевдокоде):

пока True делаем
{
  Обработка сообщений окна
 
  рассчитываем длина_игрового_такта:

  пока длина_игрового_такта >= (1000 div ФА) делаем
      {
        UpdatePhysic;
        Dec(длина_такта, длительность_физ_апдейта);
      }
 
  UpdateRender;

}

ФА - число подбираемое таким образом, чтобы 1000 div ФА - получилось примерно длительность одного апдейта физики.
Таким образом получаем, пока длина игрового такта (допустим что у тебя стоит фиксированное кол-во кадров в сек) больше времени на апдейт физики - физика рассчитывается столько раз, сколько "влазит" в продолжительность игрового такта. Потом - один рендер.

При этом длина_игрового_такта рассчитывается с применением функции наподобие:

function GetTime: Integer;
var
  F, C: LARGE_INTEGER;
begin
  QueryPerformanceFrequency(int64(F));
  QueryPerformanceCounter(int64(C));
  Result := Trunc(1000 * C.QuadPart / F.QuadPart);
end;


В общем, понимаю что мутно объяснил... Я просто найти ссылку на хороший материал по игровым циклам не могу. Давали мне, а я посеял... Вот надеюсь - кто-то из постояльцев поможет с этим вопросом.

Конечно могу скинуть в личку конкретный кусок своего кода с организацией цикла. Но оно - на Дельфи.

#31
0:12, 3 мар 2010

C# рождён С++ом, но воспитан Делфёй))

Я начинал программировать на бэйсике в 6м классе (gwbasic), с девятого изучал Qbasic, в универе 1,5 года Pascal, а потом Делфи 7. Во втором полугодии пятого курса нам читали Borland C++. На работе сначала программировал pascal и asm(микроконтроллеры), потом только на С. В целях саморазвития рассматривал doger на delphi в OpenGL. Потом попалась книжка Миллера про Managed DirectX и с тех пор я поклонник C#.

Итог: любой код на вышеперечисленных языках мне не чужд.

#32
1:02, 3 мар 2010

Измерить сколько милисикунд прошло между кадрами и столько же нафигачить обсчетов одним циклом, а потом прописать рендер, разве так нельзя? Как по мне, так лучше вообще на 2 потока разбить - видео и мышь в один, а клава и физика в другой. В физическом фиксированное число обсчетов и кадров, а в графическом сколько угодно. Получается очень недурно и на тебе оптимизация на 2 ядра )))

#33
8:38, 3 мар 2010

LifeKILLED
> Измерить сколько милисикунд прошло между кадрами и столько же нафигачить
> обсчетов одним циклом, а потом прописать рендер, разве так нельзя

В общем-то я и привел пример ТАКОГО режима. Только у меня - плавающее число физ. апдейтов, на случай низкого быстродействия железа.

Столько же обсчетов ты не нафигачишь - надо учитывать сколько времени на один обсчет физики потребуется. Ну а оттуда - число физ. апдейтов.

С потоками есть свои подводные камни, поэтому, для проектов такой степени сложности, я вот, пока что не заморачивался разделением.

Повторюсь - вариантов организации игрового цикла - много. У меня - просто плавающий апдейт физики на один рендер, завиясящий от общей производительности системы.
Есть более сложный вариант - учитывающий "сложные" кадры, когда такт игры "вылетает" за пределы некоего временного "фрейма". Тогда в более "легких" кадрах - идет компенсация. Но я, честно говоря, не разобрался в механизме.

В помощь могу дать ссылку. Найти линк на качественное описание ВСЕХ возможных вариантов ОДНОПОТОЧНОЙ организации игрового цикла я так и не смог. :( Как откопаю - сразу выложу.

#34
11:24, 3 мар 2010

Homeship, на си шарпе многопточность реализуется достаточно просто, чтобы соответствовать уровню моего проекта. Достаточно каждую парралельную операцию обернуть функцией без параметров и можно запускать её в отдельном потоке. И, для оптимизации, не обращаться из неё к глобальным переменным.

LifeKILLED, я пока не представляю как клавиатуру и мышь раскидать по разным потокам, но для физики поток найдётся.

#35
11:28, 3 мар 2010

Да речь то в общем-то не о многопоточности а о рассинхре рендера и физики.
Опять таки - это не есть гарантия что у тебя проблемы с пулями исчезнут. Может там косяк в расчете столкновений с террайном.

#36
13:36, 3 мар 2010

Homeship, я понял.

#37
13:47, 3 мар 2010

В личку кинул пример кода.

#38
14:12, 3 мар 2010

Пасиба.

#39
17:30, 4 мар 2010

Мне кажется, фигня все это, сколько раз цикл не повтори, функция-то остается та же.

#40
18:52, 4 мар 2010

Согласен что скорее всего - ошибка в вычислении пересечений.
Но исключать ошибку возникающую из-за неточности физики тоже нельзя.

Опять же - думаю от более корректной организации главного игрового цикла - хуже не будет.

Прошло более 10 месяцев
#41
19:53, 14 янв 2011

> Закончился срок хранения файла. Файл удален с сервиса.
Жаль, поглядел бы.

#42
18:59, 16 янв 2011

Voltt
Я снова залью, раз интересно.

#43
20:37, 18 янв 2011

Дважды пробовал играть, оба раза никого не встретил, в кого можно было бы стрелять. ЧЯДНТ?)
Доставляют танцующие деревья.

#44
20:37, 18 янв 2011

HandriX
http://narod.ru/disk/3618572001/ЛесНаКонкурс.rar.html

Страницы: 1 2 3 4 Следующая »
Казуальные игрыФорум

Тема в архиве.