Задать вопрос
  • Какие инструменты нужны для разработки игр?

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

    Первый способ популяризирует публичные универсальные инструменты разработки.
    Второй способ эксплуатирует проприетарные инструменты.

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

    DirectX, Vulkan и OpenGL, равно как Metal и ряд проприетарных GAPI некоторых закрытых платформ, не являются графическими библиотеками. Это все - Graphics Application Programming Interface - GAPI.
    Это - низкоуровневые интерфейсы драйвера GPU, позволяющие эксплуатировать ресурсы видеокарты в своих целях. Не только для рисования чего-то, а для ИИ, ML, сложных статистических вычислений, предсказаний и прочих расчетов на больших объемах данных.
    Под капотом любого инструмента, будь-то проприетарный или публичный, в его графическом слое используется один или несколько GAPI. Без этого никак.
    OpenGL, как и DirectX 11, нисколько не устарели, поскольку предоставляют упрощенный интерфейс управления ресурсами GPU. Они используются тогда, когда разработчикам не нужны самые тонкие механизмы управления ресурсами GPU, которые предоставляют DirectX 12 или Vulkan. Потому что последние, помимо прочего, требуют от разработчиков более глубокой экспертизы и больше ресурсов на разработку всего того же, что на OpenGL и DirectX 11 реализуется меньшими силами и за меньшее время.

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

    Информации по каждой отдельной области разработки игр хоть отбавляй. Ее настолько много, что одному человеку за жизнь не усвоить. Поэтому от современного специалиста сегодня требуется спрофилироваться, т.е. определиться со своим профилем работы и стать экспертом.
    Я больше 15 лет занимаюсь разработкой игровых движков и медиаферймворков. Более 10 лет занимаюсь коммерческой разработкой кросслпатформенных инструментов. Я начинал свое обучение по книгам и документации для всех интересующих меня областей еще 20 лет назад. Я самостоятельно освоил множество API, включая графические, сетевые, звуковые и API целевых платформ, используя книги и документацию. Экспертные знания C++ и прочих языков я получил тоже через изучение документации, стандартов и книг.
    Я могу сказать что обучаться по книгам и документации можно и самостоятельно. Еще можно заплатить деньги и получить более точечные знания через их интерпретацию на распространенных сегодня онлайн-курсах. Такие знания не всегда бывают лучше полученных самостоятельно, но времени на освоение того же объема знаний на курсах уйдет меньше чем при самостоятельном изучении. Иными словами, занятия на онлайн-курсах не отменяют важности самостоятельного изучения основных источников информации.
    По открытым видеоурокам на ютубе и прочих видеохостингах обучаться нечему. Цель этих видео - чтобы зритель посмотрел рекламу и этим принес доход автору.
    Ответ написан
    2 комментария
  • Как сделать массовую проверку https прокси?

    saboteur_kiev
    @saboteur_kiev
    software engineer
    Может, есть решения, которые позволяют из файла вытаскивать все серверы прокси и проверять их?


    ЛЮБОЙ скриптовый язык программирования, и скрипт на 1-5 строк
    Ответ написан
    Комментировать
  • Как получить понимание разработки игры?

    saboteur_kiev
    @saboteur_kiev Куратор тега Разработка игр
    software engineer
    Тебе же прямо сказали. Нужно изучить язык программирования.
    Не на уровне "почитал книжку". Не на уровне интерн/джуниор. А на уровне уверенного разработчика.

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

    Поэтому правильный путь - это потратить МНОГО времени и МНОГО усилий.
    Ты же сам сказал, что все что ты изучил - там давали базовое понимание что это такое.

    Поэтому вместо того, чтобы делать крутую 3д игру, сперва начни делать приложения попроще.
    Добейся, чтобы у тебя просто двигался персонаж. Потом сделать лабиринт, чтобы со стенками взаимодействовал. Потом может быть попробуй добавить прыжок и высоту. И так потихоньку сделаешь основу для игры. Потом будешь добавлять и добавлять. Может через года два будет демо-версия с одним рабочим уровнем.
    Ответ написан
    Комментировать
  • Поможет ли изучения C++ выучить C#?

    Хорошее понимание C++ значит хорошее понимание работы компьютера, памяти, ОС.
    На понимание C#, кмк, знание C++ влияет не очень сильно. Хотя мб какие-то моменты в C#, после плюсов будут казаться невероятно удобными и понятными, почему они сделаны именно такими
    Ответ написан
    2 комментария
  • Зачем нужно выравнивание памяти? Точнее, почему процессор обращается 2 раза к невыравниным данным?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Для процессора x86 с word 32bit. Как будут выполняться fetch?
    Хочу ответ в таком формате.

    Что мешает взять спецификацию на процессор и почитать, например, раздел 5.3.6?

    почему процессор обращается 2 раза к невыравненным данным?

    Если посмотреть на схему i386 на первой же странице документа по ссылке выше, то можно увидеть, что шина адреса процессора имеет линии A2 - A31. Линий A0 и A1 тупо вообще нет, физически.
    Ответ написан
    Комментировать
  • POST работает как GET, почему?

    ipatiev
    @ipatiev Куратор тега PHP
    Потомок старинного рода Ипатьевых-Колотитьевых
    Надо проснуться, попить кофию, собраться с мыслями, и задать свой вопрос.

    Хотя нет. Всё перечисленное проделать, а потом вернуть file_get_contents() как было.
    И не воображать себе, будто curl - это просто такой оригинальный способ вызвать file_get_contents(), а все настройки волшебным образом останутся те же.
    Ответ написан
  • Почему не работает System.Text.Encoding? Ошибается на 1 символ?

    twobomb
    @twobomb
    Ну потому-что ваш генератор тупо генерирует рандомные числа от 0 до FFFF, а в UTF16 там есть определенные правила. Почитайте например в вики

    Я не вникал ну вики говорит что там есть диапазон для суррогатных пар тоесть символы которые кодируются двумя 16битными словами, тоесть 4 байтами. Крч как вариант или тупо добавить проверку в генератор чтобы если рандомное число входит в диапазон исключений D80016..DFFF16 то пропускать и генерировать другое. Или замарачиваться с этими парами, ну это будет сложнее.

    Принцип кодирования
    В UTF-16 символы кодируются двухбайтовыми словами с использованием всех возможных диапазонов значений (от 0 до FFFF16). При этом можно кодировать символы Unicode в диапазонах 000016..D7FF16 и E00016..FFFF16. Исключенный отсюда диапазон D80016..DFFF16 используется как раз для кодирования так называемых суррогатных пар — символов, которые кодируются двумя 16-битными словами.

    Символы Unicode до FFFF16 включительно (исключая диапазон для суррогатов) записываются как есть 16-битным словом.

    Символы же в диапазоне 1000016..10FFFF16 (больше 16 бит) кодируются по следующей схеме:

    Из кода символа вычитается 1000016. В результате получится значение от нуля до FFFFF16, которое помещается в разрядную сетку 20 бит.
    Старшие 10 бит (число в диапазоне 000016..03FF16) суммируются с D80016, и результат идёт в ведущее (первое) слово, которое входит в диапазон D80016..DBFF16.
    Младшие 10 бит (тоже число в диапазоне 000016..03FF16) суммируются с DC0016, и результат идёт в последующее (второе) слово, которое входит в диапазон DC0016..DFFF16.
    Ответ написан
    Комментировать
  • Как поставляются игры на компьютеры?

    @mletov
    Сложно было сформулировать вопрос более косноязычно.

    Кто такие "обычные люди"? Есть разработчики, есть клиенты, которые покупают и играют.

    Что такое "поставка"? Кто-то по старинке покупает игры на дисках, кто-то качает в торрентах или стим.
    О чем вообще речь?

    Игра - такая же скомпилированная программа, как и любая другая программа, зачем передавать клиенту исходники игры и собирать на его компе?

    но в таком случае как читы пишут

    Декомпиляция, сканеры памяти, процессов и т д.
    Ответ написан
    Комментировать
  • Можно ли начать разрабатывать игры в Unity, зная основы c#?

    @oleg_ods
    Смотря что Вы подразумеваете под фразой «знаю основы».

    Можете устроить себе тест. Возьмите 200 последних вопросов с тэгом Unity с этого ресурса и попробуйте сами на них ответить(большинство проблем в них как раз таки связано с незнанием основ языка). Если нашли ответ на 80% то смело беритесь за Unity, если меньше то у Вас будет список тем по которым Вам нужно подтянуть знания.
    Ответ написан
    3 комментария
  • Как ограничить копирование данных из сетевых папок, локального ПК, на флешки и внешние ресурсы?

    @12rbah
    Руководство боится утечки данных. Просит сделать так, чтобы никто ничего не мог скопировать из сетевых папок, с локального компа, на флешки и т.д.
    По сути от копирования электронного документа нет защиты т.к. при просмотре файл все равно попадет в память. В целом можете конечно пробовать шифровать, тогда встанет вопрос, где безопасно хранить ключи. Хороший вариант использовать аудит и знать когда и кто получал доступ к файлу и настроить доступы в ad ds, если файл должен иметь ограниченный доступ, то наверное к нему не должен получать доступ любой сотрудник.
    флешки
    Можно отключить порты, если эта информация такая ценная, но все равно достаточно опытный пользотель сможет это обойти.
    Ответ написан
    5 комментариев
  • Почему PostgreSQL ругается?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    А почему PostgreSQL не должен ругаться на диалект DB2? Разные СУБД, разные диалекты. Не всё, что возможно в одной СУБД, напрямую переносится в другую.
    Хотите, чтобы запросы работали везде более-менее одинаково - используйте подмножество ANSI (SQL-89 или SQL-92). Хотите переносить нативные запросы из одной СУБД в другую - изучайте обе и ищите аналоги команд/функций/опций.
    Ответ написан
    Комментировать
  • Чем обусловлены различия в работе со строками и другими массивами?

    mayton2019
    @mayton2019
    Bigdata Engineer
    И ещё хотелось бы понять, почему каждый такой указатель является константой?


    Это - тяжелое наследие старых систем. В данном примере ты разбираешся с ASCIIZ-строками. С массивами символов которые завершаются нулем. Такая организация позволяет хранить строки компактно. Маркер const защищает строку от случайного изменения. И правильно делает. От этого больше проблем. Тот формат и тот способ хранения строки вообще не предполагает активных изменений. Особенно с размером. Максимум что можно делать - только читать.

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

    Для С++ более удобной строкой является std::string. Его использовать приятнее. И с размерами там веселее.
    В легаси исходниках можно встретить причудливые CString (MFC), TString (Borland). Это все разные реализации строк.

    Для Qt есть тоже свой тип строк.
    Ответ написан
    Комментировать
  • Как игровые движки понимают инородные языки?

    Интерпретатор lua (в случае Love2D и Cocos), и Mono (в случае Unity) можно подключить, как обычную сишную библиотеку.
    В этом случае C++ не нужно "понимать" чужой язык, достаточно лишь понимать, какие сишные функции надо вызывать, чтобы запустить код на "чужом" языке, и как туда передать доступ к функциям движка (это делается, обычно, путём передачи указателей на функции)
    Ответ написан
    Комментировать
  • Как передать координаты GPS через ссылку?

    firedragon
    @firedragon
    Не джун-мидл-сеньор, а трус-балбес-бывалый.
    POST https://site.com/api/geolog/

    payload

    {
    "longitude": 57,55
    "latitude": 32,765
    }


    либо https://site.com/api/geolog/?lon=57,55&lat=32,765
    Ответ написан
    Комментировать
  • Как повесить скрипт на нажатие по метке Яндекс Карты?

    dmitryfx
    @dmitryfx
    Изменение свойств объекта.

    my_map.geoObjects.each(function(ob){
    
            if( ob.properties.get("ob_type") == "Point" ){
    
              ob.options.set({iconColor: "#EAA6A5"});
              ob.properties.set({active: false});
    
              if( ob.properties.get("iconContent") == ptid ){
                om_point = ob;
                ob.options.set({iconColor: "#f15a22"});
                ob.properties.set({active: true});
              }
    
            } else if( ob.properties.get("ob_type") == "LineString" ){
    
              ob.options.set({strokeColor: "#EAA6A5"});
              ob.properties.set({active: false});
    
              if( ob.properties.get("description") == ptid ){
                om_line = ob;
                ob.options.set({strokeColor: "#f15a22"});
                ob.properties.set({active: true});
              }
    
            }
    
          });


    Обработка событий:

    var new_mark = new ymaps.Placemark( coord,
            {
              iconCaption: icon_caption,
              iconContent: icon_content,
              ob_type: "Point",
              active: true
          }, {
              iconColor: color_default,
              preset: 'islands#redDotIcon'
          });
    
          new_mark.events.add("click", function(e){
            var ptid = parseInt(  e.get('target').properties.get("iconContent") );
            Show_Addr( ptid );
          });
    
          new_mark.events.add("mouseenter", function(e){
            if( e.get('target').properties.get("active") === false ){
              e.get('target').options.set({iconColor: color_mouseenter});
            }
          });


    var new_line = new ymaps.GeoObject({
            geometry: {
              type: "LineString",
              coordinates: coords,
              description: descr,
            },
            properties:{
             // hintContent: "",
             description: descr,
             ob_type: "LineString",
             active: true
            }},
            {
              //draggable: true,
              strokeColor: "#ed4543",
              strokeWidth: 6
          });
    
        new_line.events.add("click", function(e){
          var ptid = parseInt( e.get('target').properties.get("description") );
          Show_Addr( ptid );
        });
    Ответ написан
    Комментировать
  • Какой формат (кроп или полное с разметкой) изображения лучше применять для обучения нейросети (yolov5)?

    mayton2019
    @mayton2019
    Bigdata Engineer
    А позвольте спросить вы занимаетесь обучением сети "для чего" ?

    Вот в самом вопросе обычно заложен ответ. Если вы хотите проектировать систему детектирующую угон машин по камерам на перекрестках - то никакой кроп вам не нужен. Вы должны создавать условия приближенные к реальным. Если вы просто автоматизиурете учет машин на паркинге (шлакбаум) - тогда можете кропать. Но никаких других требований к вашей системе уже нельзя предьявить.
    Ответ написан
    Комментировать
  • Как выглядит файл Логирование в гейм-дев документации?

    saboteur_kiev
    @saboteur_kiev Куратор тега Разработка игр
    software engineer
    эм. логирование может быть разнообразным, и вообще не обязательно в файл.
    Зависит от игры, зависит от того, что надо.

    Можно логировать технические моменты, например работу 3д движка, подключаемые библиотеки и функции, детект что может карточка, разрешение, мониторы, использование ресурсов.
    Можно логировать игровые действия игроков или npc
    Можно логировать сетевую активность
    Можно логировать пользовательскую активность по интерфейсу (сбор метрик для ui дизайнеров)
    Мало ли что.
    формат НИЧЕМ не отличается от логирования любого другого софта.
    Смотришь сколько логов, думаешь нужно больше или меньше. думаешь как оптимизировать.
    можно в файл, можно в базу, можно в несколько сразу
    Ответ написан
    3 комментария
  • Можно ли сравнивать через переопределенный GetHashCode() в C#?

    GetHashCode - это не про сравнение, а про генерацию хэша для объекта.
    Хэши могут пересекаться, тк количество хэшэй принципиально меньше количества уникальных объектов.
    По тому, если тебе нужно ответить на вопрос "равен ли объект А объекту Б", то обязательно нужно проверить на Equals.
    Чтобы при разных типах у тебя не было ложного совпадения - просто сравнивай ещё и тип в Equals (через GetType)

    Если тебе нужно сравнить объекты по принципу больше/меньше/равно, то тут к тебе на помощь приходит интерфейс IComparable.
    Ответ написан
    2 комментария
  • Что из этого исходный код?

    @Voland69
    bin - результаты компиляции вашего приложения - в гите не нужно
    obj - промежуточные результаты компиляции - в гите не нужно
    ConsoleApp.csproj - файл проекта, метаданные и зависимости - кладем в гит
    ConsoleApp.sln - файл решения (это проект из других вложенных проектов) - кладем в гит
    Program.cs - собственно исходный текст вашей программы - кладем в гит

    Чтобы делать это не руками, освойте .gitignore.
    У github есть для вас шаблон для c# и VS
    Ответ написан
    4 комментария
  • Как снизить нагрузку на API?

    BasiC2k
    @BasiC2k
    .NET developer (open to job offers)
    Включите логгирование. Выясните - какие запросы чаще всего поступают, какие запросы дольше всего выполняются. Оптимизируйте.
    Следующий этап - создание очереди запросов (возможно потребуется пересмотр имеющейся архитектуры) приложения.
    Ответ написан
    Комментировать