Задать вопрос
  • Какие книги существуют для изучения библиотеки PyGame для Python(на русском)?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    но самые простые игры безумно хочется поклепать :)

    Оставьте Python для других задач, которые вы хотели решать с его помощью, а самые простые игры пишите на Unity.

    Как говорится, лучше день потерять, потом за пять минут долететь (Unity). Либо можно продолжать всю жизнь ходить пешком (PyGame). Когда-нибудь придётся решиться, если так хочется делать простые игры. Но лучше рано, чем поздно.

    Просто поймите, что языки создаются изначально для какой-то цели, поэтому хорошо подходит для неё и смежных областей, и плохо подходит для других, поэтому не применяется там. Нормальному программисту, даже начинающему, нет особой проблемы изучить синтаксис нового языка. Сложности начинаются, когда этот язык начинает применяться для несвойственных ему задач. Возможно, когда-то давным давно PyGame был хорошим началом и подавал светлые надежды на развитие в будущем. Но по состоянию на сегодня (2019) Unity бьёт все остальные движки почти по всем фронтам, в том числе по удобству и простоте обучения. А ведь это именно то, что вам нужно, не так ли? Быстро делать простые игры - это как раз про Unity.
    Ответ написан
    2 комментария
  • Как сделать так, чтобы пули на платформе pygame стреляли по вертикали?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    Процесс поиска ошибок называется "отладка". Как программист, вы первым делом должны овладеть этим навыком. И не важно, начинающий вы или нет.

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

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

    Пример того, как можно было бы сделать отладку через консоль в вашем случае:
    for bullet in bullets:
            print("lastmove:", lastmove)
            if bullet.x > 0 and bullet.x < 1920:
                if lastmove == 1 or lastmove == 2:
                    bullet.x += bullet.speed
            if lastmove == 3 or lastmove == 4:
                    bullet.y += bullet.speed
            if bullet.x < 0 or bullet.x >1920:
                print("bullets.pop!!!")
                bullets.pop(bullets.index(bullet))


    Но где, что и как вы будете проверять - вам решать.
    Ответ написан
    Комментировать
  • На чем сделаны такие приложения?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    Если нет реальной трехмерной графики, то на чем угодно. Это может быть и неизвестный вам фреймворк.

    Но что вам даст ответ? Предположим, вы выяснили, что это полуигра полуприложение сделано на Unreal Engine. Странно решение, но вот так оказалось. Что дальше? Побежите изучать этот движок?

    Кто бы что на чём ни делал, лучше думать своей головой при принятии решения, а не просто делать "как у них". Ещё куда ни шло посмотреть, как устроено приложение, и взять идеи, с пониманием, зачем и почему так сделано. А почему разработчики выбрали именно такой движок, а не другой, они вам не расскажут, пока вы с ними не познакомитесь.

    И у вас наверняка будет не 100% клон (хотя кто вас знает), а другое приложение, так что и решение будет основано на других исходных данных. Даже если клон, то зачем копировать неудачное решение?

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

    dollar
    @dollar
    Делай добро и бросай его в воду.
    Вообще-то весь рынок стоит на Unity.

    Не на Юнити только игры, которым нужно что-то особенное, чего нет в Юнити, либо которым много лет, и они изначально были не на Юнити. Ещё вариант, как у вас, попробовать что-то другое, необычное, вплоть до того, чтобы свой движок написать. Но на сегодня (2019) и ближайшие несколько лет переплюнуть Юнити вряд ли кому удастся, а у одиночек вообще нет шансов.

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

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

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

    Насчёт виртуальной машины не совсем вас понял. Если, к примеру, у вас троян в основной системе и он сканирует нажатия клавиш и делает снимки экрана, а потом отсылает это всё злоумышленнику, то как виртуалка поможет защитить ваши платёжные данные и пароли?
    Ответ написан
    5 комментариев
  • Как физический движок использовать для 3D графики С++?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    Если вам для разработки игр так не нравится шедевральный Unity с его языком C#, который нынче (2019) практически все используют, и вы хотите именно C++, то обратите внимание на Unreal Engine. Этот движок очень хорошо устроен внутри, имеет красивый и понятный код. Для C++ это лучший движок, примерно на равне с Unity, только с более высоким порогом вхождения (школьники его уже не осилят, нужен бородатый программист).
    Ответ написан
    Комментировать
  • Какие языки нужны для написания игр и приложений на Android?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    Для начала немного не по теме вопроса:
    • Чтобы стать разработчиком игр, нужно знать не только языки. Причем, языки составляют где-то 10% от всех знаний.
    • Разрабатывать игры в одиночку почти невозможно. Конечно, если это не пятнашки без особых фич. Средние игры, и даже хорошие игры с оригинальной идеей будут приносить околонулевой доход. Игра должна быть отличной, чтобы шанс на успех был выше нуля. А для этого нужен широкий спектр знаний и навыков, которые одном человеку освоить сложно (долго).

    По теме вопроса:
    • Делать игры лучше на Unity, поэтому язык C#. Но Unity это не только язык, это ещё и движок конкретно для игр, который на сегодня (2019), можно сказать, победил все остальные движки. Он имеет большие возможности, производителен, удобен в использовании, и всё это в купе с простотой освоения (низкий порог вхождения).
    • Для собственного сайта подойдёт почти любой язык, но выбор зависит от игры. Ведь вам нужен не столько сайт, сколько игровой сервер (бэкенд). И реализация будет зависеть от специфики игры. Если у вас игра сама как сайт, т.е. переходы по страницам через кнопки, то можно игровой сайт поместить в приложение. В этом случае и PHP подойдёт. Если игра в реальном времени (типа шутера или гонок), при этом огромное число пользователей, то узким местом станет нагрузка на сервер, да и вообще стабильность. Так что бэкенд придется делать на высокопроизводительном языке, таком как C/C++. Ну или, например, Elixir (Erlang). Если у вас что-то среднее между этим, то подойдёт, опять-таки, любой язык, умеющий работать с сокетами и поддерживать сессию игрока. Как я и говорил в преамбуле, всё это сложно, и даже для выбора и реализации архитектуры сервера желателен отдельный специалист.
    Ответ написан
    Комментировать
  • Как получить и записать в ячейку все совпавшие элементы из столбца гугл таблицы?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    1. Выберите пункт меню Инструменты -> Редактор скриптов.
    2. В появившийся редактор скопируйте следующий код:
      Код
      function TOSTER(input) {
        var first = input[0];
        var s  = "";
        var col_search = -1;
        var col_name = -1;
        var col_code = -1;
        var x,y;
        for (x=0;x < first.length; x++) {
          if (first[x] == 'SEORCH_VALUE') col_search = x;
          else if (first[x] == 'NAME') col_name = x;
          else if (first[x] == 'CODE') col_code = x;
        }
        if (col_search === -1) return "Ошибка! Нет колонки с шаблонами поиска.";
        if (col_name === -1) return "Ошибка! Нет колонки со значениями.";
        if (col_code === -1) return "Ошибка! Нет колонки с кодами значений.";
        var table = [['RESULT']];
        for (y=1; y < input.length; y++) {
          var search_text = input[y][col_search];
          if (!search_text || search_text === "") continue;
          var result = "";
          for (var yy=1; yy<input.length; yy++) {
            if (search_text == input[yy][col_name]) { //Совпадение
              if (result !== "") result += ", ";
              var code = input[yy][col_code];
              result += code;
            }
          }
          if (result === "") result = "Not found.";
          table[y] = [result];
        }
        return table;
      }

    3. В любом месте страницы вставьте формулу =TOSTER(A1:C23)
    Ответ написан
    Комментировать
  • Обновлятся до нового макбука или нет?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    Подними до 16 Гб. Новый дорого. Когда старый сломается, тогда новый можно покупать. К тому же в новых моделях добавлять память уже нельзя. Если диск старый, то его тоже можно поменять, но ключевой фактор скорости это всё же оперативная память, на неё упор и делай.
    Ответ написан
    Комментировать
  • Как в Google Таблицах сделать функцию которая проверяет все ячейки в одном столбце и передает эту строку в другой лист?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    В первом столбце: =IF('Лист1'!A1="Яблоко";'Лист1'!A1;"")
    Во втором и последующих (растянуть): =IF(A1="";"";'Лист1'!B1)
    Далее можно растянуть вниз. Пример
    Ответ написан
    8 комментариев
  • Как оптимизировать выборку с одновременной сортировкой?

    dollar
    @dollar Автор вопроса
    Делай добро и бросай его в воду.
    В общем, оказалось, что существенно ускорить алгоритм можно, если хоть капельку известна природа исходных данных.
    • Если известно распределение и границы, то почти точно вычисляем порог, выше которого будут наши 10 элементов. Раскладываем массив на две части (выше порога и ниже порога) за O(N). Даже если набрали 11-12 элементов больше порога, то за O(мало) уже смело сортируем и находим 10.
    • Если распределение не известно, но известны границы (то есть минимум и максимум), то делаем предположение, что распределение равномерное, после чего вычисляем порог и задача сводится к предыдущему пункту.
    • Если границы не известны, то за O(N) вычисляем минимум и максимум, после чего задача сводится к предыдущему пункту.

    Конечно, всегда можно специально подсунуть такие данные, что алгоритм будет не эффективен. Но противодействие такому за рамками вопроса.
    Ответ написан
    Комментировать
  • Почему у Godot в android версии не работает per-pixel освещение?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    Попробуйте заменить per-pixel на per-vertex.

    P.S. Не лишним было бы в вопросе указать модель смартфона и версию Android.
    Ответ написан
  • На чём создавать игры? Kivy или PyGame?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    Говоря по существу, игры на Python лучше вообще не делать, тем более под Android. Если вы хотите именно делать игры, то сразу откажитесь от Python в пользу C# (движок Unity) или Java (потому что чисто под Android, так что тоже обоснованный выбор). Если же очень нравится Python, то посмотрите на движок Godot, это интересный зверь, и там встроенный язык очень похож на Python. Ну а Kivy и PyGame не вариант ни разу, разве что змейку сделать, а в чуть сложнее проекте намучаетесь.
    Ответ написан
    4 комментария
  • Прошу помощи с GameMaker Studio 2?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    но этого не происходит

    А что происходит? Нужно указывать такие подробности.
    Теперь придется перебирать варианты на основе догадок...
    • Объект не отображается. Это значит, что вы его не добавили в комнату. Нужно перетянуть объект в комнату, чтобы он там был виден. Естественно, у объекта должен быть хоть какой-то вид, спрайт или даже анимация, иначе его также не будет видно даже после добавления в комнату.
    • Объект не двигается. На самом деле двигается. У вас же событие Create, которое срабатывает единожды при создании. Вот оно и срабатывает, и объект смещается влево на 200 пикселей. Просто вы этого не замечаете, потому что для вас объект сразу как бы спавнится в других координатах в момент запуска игры.


    Попробуйте так:
    1. Add Event ---> Key Down ---> Left
    2. Добавьте код:
      move_contact_all(180,200);
    3. Запустите игру и нажмите стрелку влево. Объект должен перемещаться при нажатой клавише и останавливаться при отжатии.


    И еще вопрос, можно ли пользоваться данной справкой

    К слову, это нарушение п.3.7 правил Тостера. Лучше было бы отдельный вопрос создать, никто за это не осудит и не накажет. Но всё же отвечу:
    Справка та по Game Maker 8.0, что как бы совсем другой продукт. Пользоваться ей не стоит, она устарела. Пользуйтесь встроенной справкой в GameMaker Studio 2, там всё есть. А чего нет, всегда можно спросить на официальном форуме. Здесь, на Тостере, про этот движок почти не знают (кроме меня разве что), а там обязательно подскажут. Но нужно знать английский.

    Добавлю, что лучше не тратить время на освоение данного движка. Но это моё личное мнение.
    Ответ написан
    Комментировать
  • Где найти программиста и сколько заплатить?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    Огорчу. Ваша идея ничего не стоит (как и любая идея). Если вы по каким-то причинам думаете, что идея стоящая, то это главная ошибка. Естественно, я измеряю стоимость в деньгах, то есть в прибыли.

    Поэтому всё зависит от ваших целей. Если вы хотите игру для себя, то программиста можно найти на фрилансе, либо среди знакомых ваших знакомых. При этом игру даже не обязательно выводить в стор, вы и ваши друзья и так сможете играть.

    Если же вы хотите заработать, то советую поскорее отказаться от этой затеи, потому что без опыта у вас нет шансов. Каждый день выходит около 200 мобильных игр. Но сколько из них стали известны и успешны? Причём, это только те игры, которые дошли до публикации в сторе. Но ещё больше игр, которые разрабатывались и были заброшены.

    Понадобится не только программист, но и другие специалисты. Минимальная стоимость хорошей игры будет более 100 тыс. долларов. В случае успеха это ничто, потому что прибыль всё окупит многократно, но шансы успеха крайне малы. А в случае провала, что более вероятно, вы просто потеряете эти деньги. Вы готовы к этому?

    Как вы хотите
    Вы платите программисту немного денег, он всё делает. Вы публикуете игру, а дальше толпы фанатов бросают в вас деньгами. Вы не спеша их собираете, изредка поощряя какими-нибудь словами.
    Как будет
    Вы нанимаете программиста. Но оказывается, что еще нужен и художник. Вы нанимаете и его. Но время разработки оказывается 8 месяцев. Всё это время вы практически платите зарплату из своего кармана. В конце получается нечто типа игры, что вы публикуете. 10 человек скачивают игру, и всё, больше никто о вашей игре не знает и не узнает никогда.
    Как надо
    Вы изучаете, что такое геймдев и с чем его едят, читаете статьи, проходите курсы, получаете второе высшее в этой сфере. Затем вы подробно описываете свою идею, находите инвестора, который готов дать вам 300 тыс. долларов, собираете команду из 10-15 человек. Проходите через все этапы разработки, держите KPI на высоте. Готовую игру тестируете на небольшой аудитории (например, на Филиппинах). Это значит, что вы закупаете трафик оттуда, а не просто выкладываете игру в стор. Смотрите, как пойдет, что подрихтовать и т.д. Если игра в целом успешна, т.е. стоимость игрока меньше, чем прибыль с игрока (LTV > CPI), то вливаете огромные деньги для закупки трафика по всему миру, что естественно окупается и вы становитесь миллионером. Если же игра плохо себя показала, то больше не тратитесь на эту игру, а закрываете её, и приступаете к разработке следующей, но с учётом ошибок, либо вообще уходите из геймдева.
    Ответ написан
    Комментировать
  • Как правильно избавиться от дублирования js кода?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    Универсальный способ в лоб - взять и создать отдельную функцию.
    Код
    let modal = document.getElementById('modal');
    let modal2 = document.getElementById('modal2');
    
    function commonFn(e) {
        e.style.display = "block";
    }
    
    link.onclick = function() {
        commonFn(modal);
    }
    
    link2.onclick = function() {
        commonFn(modal2);
    }

    Более хитрый, но странный способ - каким-то образом получить массив элементов. Способы есть разные, не о них речь.
    Код
    let modal = document.getElementById('modal');
    let modal2 = document.getElementById('modal2');
    
    let links = [link, link2];
    let modals = [modal, modal2];
    
    links.forEach((L,i)=>L.onclick = function() {
        modals[i].style.display = "block";
    });

    К слову, вместо .onclick= лучше использовать .addEventListener('click',

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

    dollar
    @dollar
    Делай добро и бросай его в воду.
    1) Unity - отличный вариант. Хорошее соотношение возможностей движка и простоты изучения. Несомненный лидер в геймдеве. Шедевр по современным меркам движков.
    2) Unreal Engine - отличный вариант. Но только если вы опытный программист С++, да ещё и точно знаете, что хотите от игры, и вам нужно больше свободы и специфических возможностей, чем предлагает Unity.
    3) CryEngine - довольно плохой вариант из-за низкой гибкости. Как говорится, что ни делай на CryEngine, всё Crysis выходит.

    Какую лучше выбрать программу для 3D моделирования для движков?

    А это нарушение п.3.7 правил данного сервиса, потому что отдельный вопрос. Но всё же отвечу. Программы для 3D моделирования примерно одинаковы. Совместимость с движками везде хорошая. Я бы выделил 3dsmax, также blender выделяется бесплатностью (но не какими-то супер фичами). Но всё же возможности примерно одинаковые, потому лучше использовать ту программу, к которой уже привыкли, или выбрать по другим (любым) соображениям. Основные - это Blender, Maya, 3ds Max.
    Ответ написан
    Комментировать
  • Как организовать учетную запись клиента в игре?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    У нас на обоих клиентах должно по идее одно и то же отображаться?

    Вовсе не обязательно. Всё зависит от того, что вы хотите и как устроен ваш сервер. Можно не позволять так делать, либо можно разрешить двум разным людям (устройствам) входить под одним и тем же логин\паролем, но выступать как два разных человека (хотя никнейм будет одинаковый). Как сделаете, так и будет у вас. А сделать можно, что душе угодно.

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

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

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

    В общем, ответ: 1) сделайте сессии 2) кикайте из старой сессии при создании новой.
    Ответ написан
    5 комментариев
  • Ошибка скрипта: bad argument #2 to 'format' (number expected, got string) stack traceback: [C]: in function 'format'?

    dollar
    @dollar Куратор тега Lua
    Делай добро и бросай его в воду.
    sampSendChat(string.format('/get guns %d', tonumber(msg)))


    А еще можно проще:
    sampSendChat('/get guns ' .. msg))
    Ответ написан
    Комментировать
  • Как понять устройство Unity?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    Разные тематические видео-курсы:
    https://learn.unity.com/

    За деньги более индивидуальный подход:
    https://unity.com/ru/learn-premium

    Ну а так вообще можно просто API смотреть или читать официальное руководство, вот и всё. Ничего более чёткого не придумано пока что.

    На пальцах могу дать вводную. Вам предлагается иерархия объектов, к которой будет привязана вся логика работы игры (в рамках одной сцены). В каждом объекте могут быть в свою очередь разные компоненты, несущие различную функциональность, например расположение объекта в игровом мире и прочие свойства. Координаты объекта считаются не от глобального начала координат мира, а от координат родителя. Гениально и просто, как говорится. Удачи в освоении!
    Ответ написан
    Комментировать