Войти
ФлеймФорумПрограммирование

А почему бы не попробовать Сишечку?

Страницы: 1 2 337 38 Следующая »
#0
(Правка: 2 мая 2021, 19:27) 22:41, 1 мая 2021

Всем привет!

Для меня gamedev скорее способ изучения интересных штук, но желание погрузится в эту тему растет с каждым днем.
Так как задача для меня не выпустить готовый продукт на продажу а скорее познать внутренний мир игрового ПО я придумал себе интересное занятие в виде написания игры а может и когда-нибудь движка на Си. Попутно захотелось разбираться во всяких интересных темах типо выделения памяти, игровой физики, представление данных, анимации, внедрение скриптовых языков и т.п.

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

Мой, прости господи, проект.

P.S. Прошу прощения за то что отвечаю не очень красиво. Пока не разобрался с тем как тут правильно ссылаться на текст или комментарии.


#1
23:08, 1 мая 2021

localevil
Какой смысил в энтитьках, когда компоненты у тебя по куче гуляют?

#2
23:12, 1 мая 2021

попробовать на пол-сишечки

#3
(Правка: 0:45) 0:37, 2 мая 2021

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

вообще идеальная ECS должна предоставлять как можно более быстрый доступ к компонентам для итерации. например, ты должен как можно эффективнее пробежаться по всем трансформам и что-то там с ними сделать. или, например, пробежаться по всем парам <physics_component, visual_component>, чтобы их правильно связать. при этом сами энтити, которым эти пары компонентов принадлежат, тебя вообще не волнуют. а непосредственно взятие компонента у данной энтити в правильном дизайне не должно использоваться почти никогда, поэтому может работать сколь угодно медленно, хоть это на первый взгляд и контр-интуитивно.

я смотрю, ты очень любишь списки, но в высокопроизводительном коде они практически никогда не используются, по крайней мере в наивной реализации, где каждая нода отдельно аллоцируется (как у тебя). в таком случае даже при просто итерировании по такому списку, у тебя каждое обращение к каждому элементу практически гарантированно будет мимо кеша.

короче, рекомендую почитать https://skypjack.github.io/2019-02-14-ecs-baf-part-1/ там на плюсах, но идеи те же самые. ещё интересная реализация — это https://github.com/SanderMertens/flecs , он как раз именно на plain c реализован.

#4
(Правка: 9:18) 9:18, 2 мая 2021

localevil
> написания игры а может и когда-нибудь движка на Си

+ Показать

Пиши на полноценных языках - C++ или Rust, а не на недоассемблере с возможностью отстрела ноги в каждой строке.
#5
9:19, 2 мая 2021

Panzerschrek[CN]
> Пиши на полноценных языках - C++

ты это скажи Q1-Q3 или конзольщикам

#6
9:20, 2 мая 2021

Suslik
> ты пытаешься для каждого энтити хранить список компонентов. это на самом деле —
> наивная реализация

да, в UE4 почти так

#7
11:26, 2 мая 2021

innuendo
> ты это скажи Q1-Q3 или конзольщикам
В 90-е компиляторы C++ были ещё не развиты и поэтому на C++ сильно не писали.Хотя, уже Quake III содержит какое-то количество C++ кода, ну а Doom 3 так вообще, почти что чистый C++.
На консолях в 90-е окромя компилятора Си от производителя консоли ничего и не было. В худшем случае был вообще, только ассемблер. Сейчас же консоли это тупо x86_64 компы, под которые легко собираются движки, написанные на C++.

Короче, нынче нету ни одной причины писать на голом Си. На голом Си сейчас пишут или уж совсем упоротые ретрограды, или мазохисты, или недоучки.

#8
11:30, 2 мая 2021

Panzerschrek[CN]
> Пиши на полноценных языках - C++ или Rust
значит на C++ нельзя выстрелить себе в ногу? О_о...
Насколько я знаю C наиболее строг в типизации, чем C++ ?!

#9
11:34, 2 мая 2021

Mirrel
> Насколько я знаю C наиболее строг в типизации, чем C++ ?!
Кто тебе такое сказал?

#10
(Правка: 11:35) 11:35, 2 мая 2021

Mirrel
> значит на C++ нельзя выстрелить себе в ногу? О_о...
Выстрелить в ногу можно на чём угодно. Но вероятность этого различна.

> Насколько я знаю C наиболее строг в типизации, чем C++ ?
Как раз наоборот. В Си ты можешь указатели несовместимых типов спокойно преобразовывать или перегонять числа в указатели туда-сюда. В C++ это не позволено, надо вручную reinterpret_cast звать.
В Си можно невозбранно звать функции без объявления прототипа, что чревато ошибками из-за неверной сигнатуры. C++ такого нед опускает.

Кроме этого в Си нету важнейших вещей. устраняющих вероятность ошибок - конструкторов, деструкторов, шаблонов и т. д.

#11
11:47, 2 мая 2021

Panzerschrek[CN]
> Пиши на полноценных языках - C++
https://m.habr.com/ru/post/490222/
Полноценный лол

#12
12:05, 2 мая 2021

Добавь README.MD в свой репозиторий

#13
12:06, 2 мая 2021

Если есть желание писать свою реализацию ECS на основе архетипов, могу присоединиться.

#14
12:11, 2 мая 2021

Из плюсов у Си — быстрая компиляция.
Из минусов — количество дураков с С++ головного мозга вокруг.

Страницы: 1 2 337 38 Следующая »
ФлеймФорумПрограммирование