• Что нужно знать для создания собственного движка?

    GavriKos
    @GavriKos Куратор тега Разработка игр
    Нужно очень хорошо знать и понимать принципы рендера изображений, работу с опенГЛ и вот это все. Т.е. как рисуется картинка, как на нее натягивается текстура, как все это масштабируется и поворачивается, что тут в этом всем делают шейдера и прочее прочее. Чем глубже эту тему знаете - тем круче графика у движка.

    Из математики обязательно: матрицы, тригонометрия, плани/стереометрия (декартовы координаты). Без этого вообще никак - это основа основ.

    Из ЯП стандартно: алгоритмы поиска, сортировки, структуры данных (особенно деревья), ну и навык проектирования и архитектуры больших систем
    Ответ написан
    1 комментарий
  • Как удалить приложение из Launchpad Mac OS X?

    meeshanya
    @meeshanya
    кодокот
    1 перетянуть ярлык в док
    2 вызвать меню ярлыка в доке и выбрать "показать в finder"
    3 из открывшегося окна перетянуть в корзину
    4 удалить ярлык из дока
    Ответ написан
    4 комментария
  • Как написать подсчет времени проведенного в игре для лаунчера?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    Просто следишь, что такой-то процесс всё ещё запущен и находится в памяти.
    В Стиме сделано так, что эта инфа периодически отсылается на сервер, и там уже происходит подсчет времени.
    Ответ написан
    Комментировать
  • Я придумал новый гениальный способ оптимизации игр?

    Zoominger
    @Zoominger
    System Integrator
    Ура, вы изобрели динамическую подгрузку локаций.
    Предлагаю ещё обратить внимание на круглый такой объект, на который можно навесить ось и что-нибудь на ней возить. Не знаю, как называется, не изобрели ещё.
    Ответ написан
    Комментировать
  • Выбор игрового движка для C++?

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

    Cocos2d-x является одним из самых популярных открытых движков. У него большое сообщество и масса поклонников. Есть документация и все нужное для старта.

    Defold является еще одним очень популярным кроссплатформенным и открытым решением для разработки 2D игр. Сообщество тоже очень большое, документация и уроки для начинающих тоже на месте.
    Defold часто выбирают в качестве решения для своей первой игры. И этот выбор далеко не случаен.

    Godot Engine не менее популярен и не менее поднят по возможностям. В чем-то Godot даже будет лучше чем Cocos. Сообщество у него тоже большое. Документация тоже присутствует.

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

    Дальше пойдут не такие популярные решения, однако и проходить мимо них тоже не стоит.

    Urho3D является нареченной Open-Source альтернативой Unity. Движок используется многими энтузиастами. По разным уголкам сети раскиданы многочисленные группы обсуждения этого движка. Документация и примеры у него на месте.

    GDevelop - это довольно популярное решение для небольших игр. Документация на месте.

    Panda3D - тоже довольно популярное решение со своим сообществом. Документация имеется.

    Hazel Engine - один разработчик - один движок. Полностью вся разработка изложена в видео на youtube. Пользоваться можно... на свой страх и риск.

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

    GZDoom - современная инкарнация движка DOOM.

    Дальше решения пойдут или сложные, или экзотические. Всё на свой страх и риск.

    CryEngine - от Crytek.
    X-Ray - движок S.T.A.L.K.E.R.
    UE 3 - для коммерческих проектов использовать нельзя.
    Lumberyard - от Amazon. Да-да, тот самый.
    Banshee Engine - он просто существует.
    Diligent Engine - у него есть свое сообщество.
    Atomic Engine - на нем тоже выпускают игры.
    Lumix Engine - тоже что-то может.
    Horde 3D - просто существует и этого уже достаточно.
    Ответ написан
    Комментировать
  • GIT: Как подсчитать вклад каждого разработчика?

    @barbarisbk
    просто количество коммитов по пользователях
    git shortlog -s -n
    Ответ написан
    Комментировать
  • Найдите перестановку по её номеру в лексикографическом порядке. Total - кол-во элементов, К - номер перестановки. Как сократить время программы?

    wataru
    @wataru Куратор тега Алгоритмы
    Разработчик на С++, экс-олимпиадник.
    Вы генерируете перестановки по одной, пока не отсчитаете k. Это медленно, потому что k может быть очень большим. Перестановок-то n! - это дофига много.

    Надо генерировать ее сразу по номеру.

    Посмотрите на первый элемент. У первых (n-1)! перестановок там 1, у следующих (n-1)! - там 2, потом идет группа, начинающихся с 3 и т.д.

    Уже вы можете понять в какой группе искомая k-ая перестановка. Тупо floor(k/(n-1)!) (если нумерация с 0 и перестановок и групп). Фактически, формула для первого элемента - a[0] = (k-1)/(n-1)! + 1.

    Дальше вы можете выкинуть из рассмотрения первый элемент. Сфокусируйтесь на группе с заданным известным первым элементом. Какой номер искомая перестановка имеет среди этих (n-1)!? Надо из k вычесть количество перестановок c меньшими первыми элементами (их (a[0]-1)*(n-1)!. Потом задача сводится к преведущей - сгенерировать k-ую перестановку среди оставшихся n-1 элементов.

    Если использовать какое-нибудь дерево отрезков, чтобы быстро искать j-ый пока не занятый элемент, то все решение будет за O(n log n). Если делать совсем просто - двумя циклами - то будет O(n^2). Гораздо быстрее вашего O(n!).

    Надо только аккуратно обработать случаи, когда (n-1)! слишком большое. Фактически, вам надо найти максимальный факториал, который меньше k. Пока не спуститесь до этого момента нужно сразу брать первый незанятый элемент и не считать факториал вообще.
    Ответ написан
    Комментировать
  • Python-проверка, начинается ли строка c "@"?

    fox_12
    @fox_12 Куратор тега Python
    Расставляю биты, управляю заряженными частицами
    Выбирайте:
    import re
    text1 = '@0'
    text2 = '0'
    print(text1, text1.startswith('@'))
    print(text2, text2.startswith('@'))
    print(text1, bool(re.match('^@', text1)))
    print(text2, bool(re.match('^@', text2)))
    print(text1, text1[:1] == '@')
    print(text2, text2[:1] == '@')
    # @0 True
    # 0 False
    # @0 True
    # 0 False
    # @0 True
    # 0 False
    Ответ написан
    3 комментария
  • Как зациклить выполнение события через каждую единицу времени?

    MinTnt
    @MinTnt
    Решения два.
    1) Использовать потоки
    2) Не "прибавлять", и нагружать код постоянно. А лишь во время вызова, просчитывать на сколько увеличилась переменная простым алгоритмом.
    (time.time() - Время последнего обновления данных) // 20 * 8 . Обновив при этом время последнего "апдейта"
    Ответ написан
    1 комментарий
  • Как сделать два последних слова - ссылкой?

    rozhnev
    @rozhnev Куратор тега PHP
    Fullstack programmer, DBA, медленно, дорого
    Используем preg_replace
    <?php
    $string = 'This is my habr';
    $pattern = '/(\w+ \w+)$/i';
    $replacement = '<a href="habr.com">${1}<a>';
    echo preg_replace($pattern, $replacement, $string);


    Test PHP preg_replace here
    Ответ написан
    Комментировать
  • Как сделать добычу дерева в 2D игре?

    yupiter7575
    @yupiter7575
    Python программист
    Смотрите, у вас есть игрок и инструмент Топор, и вам нужно сделать что когда топор прикасался к дереву (с помощью анимации), то у дерева отнимались жизни и оно ломалось и давало ресурсы. Так понятно?
    Ответ написан
    2 комментария
  • Почему в играх в системных требованиях вместо реальных характеристик в 99% пишут названия процессоров и видеокарт?

    GavriKos
    @GavriKos Куратор тега Разработка игр
    Окей, вот реальные системные требования:
    процессор x86 с поддержкой асм-инструкций "длинющщий список инструкций", видеокарта с шейдерными конвейерами такой то реализации с такими то спеками (еще страница мелкого шрифта) и т.д.

    Пишут приблизительные требованя потому что универсализация. Все i3 имеют такую то технологию, все видяхи начиная с такого то поколения поддерживают шейдера нужной версии.
    Ответ написан
    Комментировать
  • Как сделать идеальный квадрат задав только размер одной стороне блока?

    SmthTo
    @SmthTo Куратор тега CSS
    Все перепёлки мира будут оплакивать мою смерть.
    Ответ написан
    Комментировать
  • В чем ошибка..?

    hottabxp
    @hottabxp Куратор тега Python
    Сначала мы жили бедно, а потом нас обокрали..
    Бегло прочитал, вижу в строке print:('...моментально съедает ваc!') ошибку, лишнее двоеточие. Дальше не читал, так как вы не оформили код в тег.
    Ответ написан
    Комментировать
  • В чем ошибка..?

    SoreMix
    @SoreMix Куратор тега Python
    yellow
    Второй знак = лишний.
    friendlyCave == random.randint(1, 2)

    Лишнее двоеточие
    print:('...моментально съедает ваc!')
    Ответ написан
    1 комментарий
  • Безопасная передача данных на сервер?

    like-a-boss
    @like-a-boss
    Признайся,тебяТянетНаКодМужика,ты—программный гей
    Очки должны прибавляться на сервере, а не передаваться на сервер.
    Ответ написан
    9 комментариев
  • Какой результат даст int(input()) если нажать enter?

    hottabxp
    @hottabxp Куратор тега Python
    Сначала мы жили бедно, а потом нас обокрали..
    ValueError - это исключение, возникающее в случаях, когда в функцию передан аргумент с неподдерживаемым значением.

    Когда вы вводите данные с клавиатуры, по умолчанию такие данные являются строкой. Но вы пытаетесь эти данные преобразовать в число с помощью функции int(). Если бы вы ввели число, и нажали enter, тогда бы в переменной n было бы число. А так, скорее всего вы ввели либо не числовые символы, или вообще ничего не ввели и нажали enter. В таком случае разумеется Python не может преобразовать данные в число. Думаю тут все логично.
    Ответ написан
    2 комментария
  • Можно ли создать свою программу?

    Jeer
    @Jeer
    уверенный пользователь
    Привет, сделать, разумеется, можно.
    Если одним из ключевых языков требуется использовать javascript, то можете начать с веб версии.
    Для нативных платформ нужно будет писать свои клиенты, например, мобильные приложения или приложение для настольного компьютера. Для них на js будет тяжело и не очень хорошо, но веб версию осилить сможете.
    Начинайте с простых вещей, вначале это просто текстовый файл. Затем будете добавлять свои хотелки с картинками и т.д. в порядке очереди.
    Туториалов, чтобы сделать простой чат выше головы, вначале гуглите "сделать чат на node js"
    Ответ написан
    1 комментарий
  • Как изменить значение счетчика?

    john36allTa
    @john36allTa
    alien glow of a dirty mind
    // Найти уникальный селектор для искомого элемента
    var elem = document.querySelector('div.xserver__status');
    // спарсить значения
    let [a, b] = elem.innerText.split(/\D*\/\D*/).map(Number);
    // вернуть новые
    elem.innerText = `${a + 20} / ${b - 200}`;
    Ответ написан
    Комментировать
  • Как выровнять этот календарь?

    @o5a
    formatmonth(2015, 3, w=3)
    Ответ написан
    Комментировать