• Использование ImGui с SFML для создания инструментов для разработки игр
    0

    Нужно добавить imgui.cpp, imgui_demo.cpp и imgui-sfml.cpp в билд

  • Использование ImGui с SFML для создания инструментов для разработки игр
    0

    Без полного сообщения об ошибке сложно помочь чем-то. Скорее всего это незалинкованный OpenGL

  • Использование ImGui с SFML для создания инструментов для разработки игр
    0

    А можете кинуть полное сообщение об ошибке?

  • Использование ImGui с SFML для создания инструментов для разработки игр
    –1

    Рад слышать. :D

  • Использование ImGui с SFML для создания инструментов для разработки игр
    0

    Вот ссылка на изображение


    Элементы, которые не попадают во вьюпорт/перекрываются другими виджетами рендериться не будут, ImGui делает проверки, чтобы не добавлять в DrawList невидимые элементы.


    Вот тут есть больше скринов, но пока что Github почему-то не даёт смотреть всем этот тред, автор репозитория сказал, что скоро пофиксит это. :)

  • Использование ImGui с SFML для создания инструментов для разработки игр
    +1

    Да, они создаются заново каждый кадр, но данных содержат мало, так что это всё происходит быстро. Мало того, элементы, которые в данный момент скрыты, не обрабатываются (например когда свёрнуто окно или дерево в TreeView). До их создания просто не доходит код, например:


    if (ImGui::TreeNode("SomeTree")) { // TreeNode возращает true когда дерево развёрнуто
        if (ImGui::TreeNode("Node")) { // код вот здесь не выполняется, если дерево свёрнуто
            ...
        }
    }

    И ImGui позволяет гораздо больше, чем кажется, некоторые делают вот такое:


    И да, некоторые вещи делаются не так просто. Например для реализации OnLeftMouseClick/OnRightMouseClick видимо нужно изменить код ImGui::Button, либо сделать свой виджет, который ведёт себя как кнопка. Но к счастью бОльшая часть виджетов и необходимых поведений присутствует.

  • Использование ImGui с SFML для создания инструментов для разработки игр
    –1
    Хотел несколько упростить для тех, кто не знаком с Qt. По сути сигналы и слоты — это практически то же самое, что и callback'и. Слот — это callback. В коде связывание кнопки и слота осуществляется путём вызова QObject::connect, который затем генерирует код, который при нажатии на кнопку вызывает данную функцию. В дизайнере происходит почти то же самое, просто код генерируется из xml-файла.

    Здесь же кнопка создаётся путём вызова ImGui::Button внутри условия if, а код внутри по сути является кодом callback'а. Всё же немного проще, чем создание QPushButton, функции и дальнейшего вызова connect.
  • Полезные книги для программиста в геймдеве
    +2
    Довольно интересна, особенно мне понравились первые главы о том, как в целом устроен геймдев, что в нём хорошего, а что плохого. Это стоит прочесть всем, кто занимается или хочет заниматься геймдевом. В то же время, есть множество вещей, которые специфичны для DirectX и, насколько я помню, WinAPI, что может быть не особо полезно для всех, но как референс — вполне себе. Мне кажется, «Game Engine Architecture» лучше описывает структуру движков, без привязки к конкретным технологиям и более систематизировано, что ли.
  • Использовать Lua c С++ легче, чем вы думаете. Tutorial по LuaBridge
    +1
    Мне не нравится luabind из-за того, что он использует boost. Ничего против boost не имею, просто мой проект его не использует и отсутствие зависимостей от boost — большой плюс LuaBridge для меня
  • Использовать Lua c С++ легче, чем вы думаете. Tutorial по LuaBridge
    0
    Не пробовал, но в документации LuaBridge указано, что работает.
  • Использовать Lua c С++ легче, чем вы думаете. Tutorial по LuaBridge
    +1
    Не знаком с ними, если честно, а я пишу только о том, что знаю хорошо.
  • Полезные книги для программиста в геймдеве
    +9
    Могу посоветовать парочку книг по гейм дизайну

    image
    «The Art of Game Design: A book of lenses» by Jesse Schell
    Наверное одна из самых популярных книг о гейм дизайне и одна из самых высоко оценённых. И не зря. Эта книга, которая рассказывает абсолютно о всём, что связано с геймдизайном, причём делает это очень подробно и заставляет взглянуть на многие вещи под другим углом. Книга огромная, читал её несколько месяцев, но не пожалел. Наверное, около 80% моих знаний о гейм дизайне из этой книги. :)

    image
    «Level Up!: The Guide to Great Video Game Design» by Scott Rogers
    Замечательная книга, которая рассказывает о многих аспектах гейм дизайна, в том числе про то, что делает уровни, монстров, вещи и сюжет игры интересным. Книга написана очень живым языком, видно, что автор — фанат видеоигр. Must read.

  • Использовать Lua c С++ легче, чем вы думаете. Tutorial по LuaBridge
    0
    Да, с отладкой есть некоторые проблемы, стек вызовов нужно пролистывать на 4-5 вызова вниз. Но исключения делают всё гораздо проще, многие биндинги Lua их не поддерживают вообще, так что здесь LuaBridge хорош.

    Про инструменты отладки не слышал, мне хватает этих самых исключений и простого дебаггера на C++ :)
  • Использовать Lua c С++ легче, чем вы думаете. Tutorial по LuaBridge
    +4
    Lua используют множество игр. Вот список, думаю, что неполный. :)
  • Использовать Lua c С++ легче, чем вы думаете. Tutorial по LuaBridge
    0
    Это в теории. На практике же, иногда приходится писать код модулей swig, а иногда изменять код на C++.
    И мне всё ещё кажется, что библиотеки для биндинга и swig преследуют разные цели.
  • Использовать Lua c С++ легче, чем вы думаете. Tutorial по LuaBridge
    0
    Когда я писал статью про Lua C API, я написал свою библиотеку. А вот LuaBridge — это не моё творение, и в этом туториале я лишь показал как легко им можно пользоваться без написания своей библиотеки. :)
  • Использовать Lua c С++ легче, чем вы думаете. Tutorial по LuaBridge
    +3
    Это всё с помощью Lua C API делается?

    Просто различные библиотеки для биндинга пишутся не просто так, и довольно сильно облегчают жизнь.
  • Использовать Lua c С++ легче, чем вы думаете. Tutorial по LuaBridge
    0
    Не думаю, что swig можно сравнивать с LuaBridge и подобными библиотеками, потому что у них разный механизм работы. Механизм работы swig показался мне сложнее для освоения, поэтому я начал искать биндинги и нашёл LuaBridge.
  • Использовать Lua c С++ легче, чем вы думаете. Tutorial по LuaBridge
    +2
    Вот тем и не устраивает, что примитивный. Есть только базовые функции, для чего-то более продвинутого нужно писать интерфейсы, которые не так легко пишутся. Нужно вручную работать со стеком, с функциями работать не так удобно, exceptions нет и пр.
  • Что такое Entity System Framework и зачем он нужен в геймдеве?
    0
    После долгого поиска информации о Component-Entity-System модели я нашёл полезными следующие ссылки:
    entity-systems.wikidot.com/
    gamadu.com/artemis/
    cowboyprogramming.com/2007/01/05/evolve-your-heirachy/
    t-machine.org/index.php/2007/09/03/entity-systems-are-the-future-of-mmog-development-part-1/
  • Яндекс запускает PaaS Cocaine
    +1
    Порадовала цитата в Readme.
  • Что такое скрипты и с чем их едят — Lua & C++
    +3
    1. Код не стоит привязывать к системе, а тем более к IDE, когда это возможно. Можно разрабатывать на том же Visual Studio, но компилировать с помощью других компиляторов под остальные системы.
    2. Да ладно? Неужели ни разу не видели API panic в Lua? luaL_loadfile, возвращающее bool, lua_pcall не созданы просто так. Да и пользователя ведь надо оповещать о том, что произошло что-то плохое, не стоит надеяться лишь на то, что скрипт не выполнится.
    3. Тогда нужно придумать название получше. «pushToLua», хотя бы.
    4. Вы противоречите сами себе. Сначала указываете, что нужно приличное знание языка (некоторые новички статью на этом дальше не читают), а потом вдруг оказывается, что она нацелена на новичков.

    «у всех свои вкусы»
    Тут не только дело вкуса, иначе бы не существовало стандартов, и все программировали, как им захочется. Стиль обеспечивает читаемость. Почитайте тот же Code Complete — поймёте, в чём дело.
  • Что такое скрипты и с чем их едят — Lua & C++
    0
    «Проще написать какой-нибудь редактор XML и свой рудиментарный псевдоязык».
    1. XML не поддерживает и десятой части возможности Lua. Да и вообще их сравнивать нельзя. XML — язык разметки, а Lua — скриптовый язык.
    2. Если бы все профиты съедались, то такое огромное количество игр не использовали бы Lua.

    Lua используется в основном на этапе загрузки чего-либо(использовать его в частях программы, где требуется производительность, глупо, конечно), где лучше пожертвовать сотней миллисекунд времени работы программы, чем создавать глюченный и нестабильный собственный язык(в отличие от языка, написанного на чистом C, который разрабатывается уже 20 лет), от которого будет больше проблем, чем профита. Ещё Lua часто используют того, чтобы была возможность писать часть кода на нём, при этом не рекомпилируя каждый раз проект. Когда у вас есть огромный проект, который компилируется несколько часов, то легче уже написать часть кода на Lua, чтобы избежать рекомпиляции.
  • Что такое скрипты и с чем их едят — Lua & C++
    +10
    Критика.
    1. Зачем использовать <windows.h> и <cohio.h>? Кроссплатформенность напрочь убивается, да и они здесь ни к чему.
    2. Почти нет проверок на ошибки. Если что-то не работает, код не обеспечивает безопасное выполнение.
    3. Script::Return вводит в замешательство. Название функции обещает что-то вернуть, а в итоге ничего не возвращает.
    4. Вы пишете «С++ на приличном уровне (в уроке будут шаблоны — template)», а потом рассказываете про include guard'ы и прочие банальности. Думаю, что человеку, знающему C++ на «приличном уровне», это давно известно.
    5. «Если непонятно, что это значит, то тамошная таблица все равно что массив». Таблица в Lua — куда больше, чем просто массив.
    6. «Используйте редакторы Lua кода». Должно быть «используйте редакторы с подстветкой Lua кода». Многие пишут в них и не жалуются. А ещё можно в repl запускать, чтобы проверить на ошибки до запуска из под C++.

    А ещё можно долго придираться к стилю и другим неточностям, но хватит пока что и шести пунктов выше.
  • Пишем игры на C++, Часть 3/3 — Классика жанра
    +1
    Начинание хорошее, но:
    1. Лучше разбивать код на какие-то логические кусочки, описывать вкратце алгоритм, а затем уже показывать реализацию. Комменты не так хорошо читаются, как текст, разбитый на абзацы. Ведь это tutorial, а не «почитайте-ка код, который я написал».
    2. Желательно добавлять хоть какие-то картинки, диаграммы или схемы.
    3. Разбивайте огромный файл на файлы поменьше, по ним ориентироваться куда проще.
  • Использование Lua и C++ для обработки и хранения данных
    0
    Попробую перефразировать. И почему же решение не самое оптимальное?
  • Использование Lua и C++ для обработки и хранения данных
    0
    Возможно, вы просто не так поняли суть статьи. Моя ошибка, признаю, наверное пример выбрал сомнительный.
    Я не использую Lua для хранения тех данных, которые используются самой программой, я использую Lua для хранения некоторых начальных данных, используемых на этапе загрузки. И «player.position» нужно воспринимать не как текущую позицию игрока(было бы очень глупо хранить её в отдельном скрипте), а как начальную позицию. Далее Lua не используется, объект класса Player получает начальные position.x и position.y из скрипта, а дальше эти переменные изменяются лишь с помощью C++.
  • Использование Lua и C++ для обработки и хранения данных
    0
    Бинарные данные пусть и быстрее, но они их не так легко модифицировать (с Lua я могу просто редактировать файлы в любом текстовом редакторе), а читать diff вообще невозможно.
  • Использование Lua и C++ для обработки и хранения данных
    0
    Огромное количество модулей можно взять здесь: luarocks.org/repositories/rocks/
  • Использование Lua и C++ для обработки и хранения данных
    0
    Да, этот метод будет лучше того, который описан мной в комментарии.
  • Использование Lua и C++ для обработки и хранения данных
    0
    Я думаю, что уже инициализированные lua_state могут храниться на сервере. О том, как запускать код Lua с помощью C++, я напишу в следующей части туториала, но суть в том, что конкретные функции можно запускать на сервере, при этом lua_state перезагружать или как-то изменять не нужно. Схема такая: у вас есть какой-то список Lua файлов. Вы загружаете каждый из них в отдельных lua_state. Затем, когда пользователь использует какую-либо функцию, вы находите соответствующий lua_state и просто получаете функцию с помощью
    lua_getglobal(L, "some_func"); // где L - lua_state отвечающий файлу, в котором находится some_func
    

    А затем эту функцию можно вызывать с помощью
    lua_call(0, 1); // сейчас в стеке Lua на вершине находится функция, поэтому вызовется именно она.
    // Первый аргумент - кол-во аргументов
    // второй - кол-во возвращаемых значений
    

    А затем удалить функцию из стека:
    lua_getglobal(L, -1);