Программирование игр, создание игрового движка, OpenGL, DirectX, физика, форум
GameDev.ru / Программирование / Форум / c++ реализуема такая конструкция? (2 стр)

c++ реализуема такая конструкция? (2 стр)

Поделиться

Страницы: 1 2

loysoПостоялецwww29 окт. 201713:50#15
innuendo
> а можно услышать лично твой опыт с конкретными проектами ?
Непонятно - что именно ты хочешь услышать.
Магия Крови 1 - это RC.
Невышедшая Магия Крови 2 и прочие продукты на Skystudio - там тупо все симметрично создается и удаляется пачками, иногда in-place,
а удаление рантайм объекта - это задача аля "удали ноду из двусвязного списка". Ну и плюс Lua.

Stormrise - без RC.
London Olympics 2012 - GC из Lua всем управляет (как в LuaCSP)
В Blink выпилили RC в пользу GC из-за желания иметь первазивный GC с V8, но сложность такая что и врагу не пожелаешь.

Человек - это цель, а не путь. Как говорит Ницше. На войне все средства хороши.

innuendoПостоялецwww29 окт. 201713:58#16
loyso
> Непонятно - что именно ты хочешь услышать.

Лично твой опыт rc vs non rc, не надо проводить  цитаты других

> Магия Крови 1 - это RC.

The Engine ... до сих пор кошмары по ночам сняться :)
Кстати, что-то не помню там rc... утечку в SoundSystem помню

> и прочие продукты на Skystudio - там тупо все симметрично создается и
> удаляется пачками, иногда in-place,

код от Death Track и Skystudio  лично не видел, врать не буду... но кодосгенерированный BMParticles.dll на 20 мегабайт видеть приходилось
сколько лицензий продано на Skystudio? я так понимаю Боря был главным вдохновителем кодогенерации ???

> это задача аля "удали ноду из двусвязного списка".

QLinkT<T> правильно помню ?

> Stormrise - без RC.
> London Olympics 2012 - GC из Lua всем управляет (как в LuaCSP)
> В Blink выпилили RC в пользу

я так понимаю это проекты под конкрентные ТЗ, то есть проект сделали и код выкинули на помойку?

Правка: 29 окт. 2017 21:21

loysoПостоялецwww29 окт. 201714:08#17
innuendo
> QLinkT<T> правильно помню
Речь о метафоре. Создать игровой объект - это "снять копию с template" и добавить копию в граф объектов, где надо.
Добавление в граф - оно принципиально не отличается от добавления ноды в двусвязный список.
Удаление из графа - удаление ноды из двусвязного списка.

> я так понимаю это проекты под конкрентные ТЗ, то есть проект сделали и код выкинули на помойку?
При чем тут ТЗ? Lua с GC к примеру всегда была и будет.
Разумеется у каждого технического решения есть контекст его использования.
Разумеется для большинства людей лучшая дорога - это знакомая дорога.
Поэтому в поп-культуре распространен RC.

innuendoПостоялецwww29 окт. 201714:14#18
loyso
> Разумеется у каждого технического решения есть контекст его использования.

В n раз пишу, ничего не имею против хардкора для конзольных решений.

> > QLinkT<T> правильно помню
> Речь о метафоре.

не, просто вспомнилось как kas выпендривался типа у нас свои кошерные контейнеры и всё круто... я когда это двухсвязный список увидел чуть не получил инфаркт c инсультом

> Поэтому в поп-культуре распространен RC.

Возможно. для меня rc это общий случай когда не нужна крутизна пупизна

Правка: 29 окт. 2017 14:20

innuendoПостоялецwww29 окт. 201714:23#19
loyso
> При чем тут ТЗ? Lua с GC к примеру всегда была и будет

а причём тут Lua?

ТЗ чётко определяет что как и почему

например, нужно ли в конзолных пиф-паф возможность создания своих миссий и тд как в стратежках ? нет, не нужно

loysoПостоялецwww29 окт. 201714:31#20
innuendo
> а причём тут Lua?
Ну ты спрашивал про технологии для масс и технологии на выброс.
Lua - технология вполне себе широкого использования.
И можно сделать чтобы lifetime всех C++ объектов в игре управлял Lua GC.
(Так было в London Olympics 2012)

> ТЗ чётко определяет что как и почему
Я уже понял, что ты берешься только за задачи с ТЗ. :)

innuendoПостоялецwww29 окт. 201714:36#21
loyso
> И можно сделать чтобы lifetime всех C++ объектов в игре управлял Lua GC.
> (Так было в London Olympics 2012)

не-не-не, чтобы lifetime всех C++ объектов в игре управлял Lua GC это не для меня :)

> Я уже понял, что ты берешься только за задачи с ТЗ. :)

нет, есть проекты с чётким ТЗ (который прописали и не меняется до конца проекта либо меняется незначительно) и нечётким

innuendoПостоялецwww29 окт. 201717:14#22
loyso
// $Id: aappwin.h,v 1.13 2006/01/14 15:00:11 loyso Exp $

узнаешь ? :)

MrShoorУчастникwww29 окт. 201719:03#23
loyso
> Процитирую aruslan'а:
aruslan вообще товарищ местами очень категоричный. Он вроде даже предлагал заранее все необходимые таблички проаллоцировать и не создавать объекты в рантайме вообще.  Сейчас не хочу искать этот тред в жж.
Скажу что на моей практике было скорее наоборот. Приходилось чаще впиливать счетчик ссылок, потому что либо течет постоянно то тут то там, либо ходят в удаленные объекты и оно даже работает какое то время, а потом бац, и гейзенбаг.

loyso
> Реально тормозит или утечки потому что цикл в ссылках можно неделями искать в
> огромном проекте.
А циклические ссылки - это от непродуманной архитектуры, когда каждый как попало лепит зависимости - конечно потом все течет и тяжело разобраться.

innuendoПостоялецwww30 окт. 201710:34#24
MrShoor
> Он вроде даже предлагал заранее все необходимые таблички проаллоцировать и не
> создавать объекты в рантайме вообще. Сейчас не хочу искать этот тред в жж.

Это жёсткий конзольный хардкор

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

Очень хочется посмотреть, сколько займёт времени это самое продумывание. Или как обстоит дело с изменениями по ходу дела :)

Daniil PetrovПостоялецwww30 окт. 201711:45#25
Funtik
Слушай, а такой вопрос = тебе зачем выносить регистрацию окна в отдельный класс = хочешь регистрировать несколько окон в зависимости от какой-то ситуации?
Насколько я понимаю, если даже создавать несколько окон для нескольких мониторов, то вполне достаточно зарегистрировать один класс окна :)))

Правка: 30 окт. 2017 11:46

FuntikПостоялецwww30 окт. 201713:53#26
Daniil Petrov
> зачем выносить регистрацию окна в отдельный класс
Чтобы получить структурированную архитектуру!
Да ты ведь сам тему недавно создавал, с временным окном... для получения расширенного формата пиксела.
Даже в твоём случае это было бы уместно... там же делается элементарно:
в .h
class RegisterWindowClass final
{
public:
  RegisterWindowClass(const std::string& name, WNDPROC procedure = DefWindowProc);
  ~RegisterWindowClass();
  
  RegisterWindowClass(const RegisterWindowClass&) = delete;
  RegisterWindowClass& operator=(const RegisterWindowClass&) = delete;
  
private:
  std::string name_;
};
в .cpp
RegisterWindowClass::RegisterWindowClass(const std::string& name, WNDPROC procedure)
  : name_{name}
{
  WNDCLASSEX wc {};
  wc.cbSize = sizeof(WNDCLASSEX);
  wc.style = CS_HREDRAW | CS_VREDRAW | CS_OWNDC;
  wc.lpfnWndProc = procedure;
  wc.cbClsExtra = 0;
  wc.cbWndExtra = 0;
  wc.hInstance = GetModuleHandle(nullptr);
  wc.hIcon = LoadIcon(nullptr, IDI_APPLICATION);
  wc.hCursor = LoadCursor(nullptr, IDC_ARROW);
  wc.hbrBackground = nullptr;
  wc.lpszMenuName = nullptr;
  wc.lpszClassName = name.c_str();
  wc.hIconSm = LoadIcon(nullptr, IDI_APPLICATION);
    
  if (!RegisterClassEx(&wc))
  {
    throw std::runtime_error("RegisterClassEx() failed");
  }
}

RegisterWindowClass::~RegisterWindowClass()
{
  UnregisterClass(name_.c_str(), GetModuleHandle(nullptr));
}

и доступ как-то так:

std::unique_ptr<RegisterWindowClass> regClass;
внутри функции:
regClass.reset(new RegisterWindowClass(windowClassName.c_str(), App::windowProc));
  
    auto hwnd = CreateWindowEx(wndExStyle, windowClassName.c_str(), appTitle.c_str(), wndStyle,
    CW_USEDEFAULT, CW_USEDEFAULT, rc.right - rc.left, rc.bottom - rc.top,
    nullptr, nullptr, nullptr, this);

Страницы: 1 2

/ Форум / Программирование игр / Общее

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