Казуальные игры
GameDev.ru / Сообщества / Казуальные игры / Форум / Игра "Лес" на конкурс казуалок (3 стр)

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

Страницы: 1 2 3 4 Следующая »
HomeshipПостоялецwww2 мар. 201023:14#30
Вот смотри:
Вариантов организации игрового цикла много.
Я использовал следующий вариант (в псевдокоде):

пока 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;


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

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

dyvniyПостоялецwww3 мар. 20100:12#31
C# рождён С++ом, но воспитан Делфёй))

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

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

LifeKILLEDПостоялецwww3 мар. 20101:02#32
Измерить сколько милисикунд прошло между кадрами и столько же нафигачить обсчетов одним циклом, а потом прописать рендер, разве так нельзя? Как по мне, так лучше вообще на 2 потока разбить - видео и мышь в один, а клава и физика в другой. В физическом фиксированное число обсчетов и кадров, а в графическом сколько угодно. Получается очень недурно и на тебе оптимизация на 2 ядра )))
HomeshipПостоялецwww3 мар. 20108:38#33
LifeKILLED
> Измерить сколько милисикунд прошло между кадрами и столько же нафигачить
> обсчетов одним циклом, а потом прописать рендер, разве так нельзя

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

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

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

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

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

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

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

HomeshipПостоялецwww3 мар. 201011:28#35
Да речь то в общем-то не о многопоточности а о рассинхре рендера и физики.
Опять таки - это не есть гарантия что у тебя проблемы с пулями исчезнут. Может там косяк в расчете столкновений с террайном.
dyvniyПостоялецwww3 мар. 201013:36#36
Homeship, я понял.
HomeshipПостоялецwww3 мар. 201013:47#37
В личку кинул пример кода.
dyvniyПостоялецwww3 мар. 201014:12#38
Пасиба.
LifeKILLEDПостоялецwww4 мар. 201017:30#39
Мне кажется, фигня все это, сколько раз цикл не повтори, функция-то остается та же.
HomeshipПостоялецwww4 мар. 201018:52#40
Согласен что скорее всего - ошибка в вычислении пересечений.
Но исключать ошибку возникающую из-за неточности физики тоже нельзя.

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

VolttПостоялецwww14 янв. 201119:53#41
> Закончился срок хранения файла. Файл удален с сервиса.
Жаль, поглядел бы.
dyvniyПостоялецwww16 янв. 201118:59#42
Voltt
Я снова залью, раз интересно.
HandriXПостоялецwww18 янв. 201110:39#43
dyvniy
> Я снова залью, раз интересно.

ссылку в студию!

VolttПостоялецwww18 янв. 201120:37#44
Дважды пробовал играть, оба раза никого не встретил, в кого можно было бы стрелять. ЧЯДНТ?)
Доставляют танцующие деревья.
Страницы: 1 2 3 4 Следующая »

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

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

2001—2018 © GameDev.ru — Разработка игр