Задать вопрос
  • Существуют ли фильтры против директа?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    А uBlock Origin уже не работает или вы не пробовали?
    Ответ написан
  • Проскакивает контроль прыжка ГГ в сторону, по нажатию двух клавиш. Как переделать управление ГГ?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    Вариант 1 (тупой)
    Добавить задержку в 200 мс перед тем, как герой начнет двигаться от клавиш вправо-влево. Это делается просто. В момент нажатия запоминаем текущее время с точностью до миллисекунд.
    А условие движения такое: клавиша вправо зажата И время зажатия больше 200 мс

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

    Вариант 3 (сложный, для комбо)
    Если у вас одновременное нажатие вправо+вверх - это какое-то особое комбо, то можно аналогично первому варианту отслеживать время нажатия вправо и в пределах этой задержки разрешать пользователю совершать данное комбо.
    То есть при нажатии клавиши вправо нужно запомнить текущее время.
    А при нажатии клавиши вверх проверяется условие.
    Условие такое: клавиша вверх нажата И клавиша вправо была нажата менее 200 мс назад

    Вариант 4 (улучшенный, комбо)
    Аналогично предыдущему варианту, только еще нужно сделать откат координат героя на ту позицию, где он нажал клавишу вправо. Ведь это комбо считается только с места?

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

    Вариант 6 (домашнее задание)
    В случае, если герой в прыжке может менять направление ускорения стрелками, то нужно подойти к геймдизайнеру и спросить, как быть в этому случае. Ведь в конечном итоге всё зависит от его задумки, какие ощущения у игрока он хотел вызвать.
    Ответ написан
    Комментировать
  • Как сделать таймер при помощи команды на сервере игре, чтобы он появился на Сайте?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    Веб-сайт в данном случае тоже сервер, и для понимания введем понятия:
    • Игровой сервер (или просто сервер)
    • Веб-сервер (бекенд)
    • Браузер пользователя или клиент или фронтенд


    Далее задачу можно разделить на два (три) этапа:

    Этап первый

    Вам нужно, чтобы ваш сервер отсылал на веб-сервер информацию о начале и конце. Это делается по протоколу HTTP или HTTPS, что-то типа java.net.HttpUrlConnection, но я точно не знаю, что вам лучше подойдет для этой цели.

    Соответственно, на веб-сервере у вас должен быть свой скрипт на любом языке, обычно это PHP. Этот скрипт сохраняет информацию в базу (обычно MySQL).

    Чтобы хранить таймер, который всё время меняется, нужно хранить неизменные его части. А именно - начало и конец, или начало и продолжительность, или просто время окончания (timestamp) с точностью до секунды.

    Этап второй
    Это общение веб-сервера и браузера (клиента). И тут есть свои тонкости.

    Во-первых, сразу вилка на функционал - либо у вас таймер появляется по нажатию по F5 (обновить страницу). То есть вы обновляете страницу, браузер запрашивает новые данные с веб-сервера, и после этого показывает таймер. Либо у вас страница веб-сайта открыта, и там в реальном времени вдруг появляется таймер. Сам! Это можно сделать по-разному, но самый банальный способ - чтобы веб-страница (то есть браузер) делала запрос каждые 10 секунд в фоне (ajax), и если вдруг появляются новые данные, то страница преображается.

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

    В остальном всё просто. Информация из базу тупо посылается на клиент, то есть время окончания, и дальше на клиенете скрипт работает локально. Он показывает отсчет времени до старта игры. Собственно, написание этого мини скрипта на JavaScript можно считать третьим этапом.
    Ответ написан
    Комментировать
  • Событие на смену текстуры в материале?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    Немного странный запрос. Вы же делаете свою игру, а не модификацию к чужой игре. То есть у вас есть полный доступ к ее внутренностям. В таком случае, почему бы не генерировать событие в момент смены текстуры в том месте кода, где эта самая смена текстуры осуществляется?

    По-хорошему нужно даже событие не смены текстуры, а более осмысленное в соответствии с логикой игры. Например, если у объекта есть несколько состояний, то хорошо бы иметь переменную (свойство) с этим состоянием и соответствующее событие на смену состояния. Текстуры тогда будут вообще ни при чем.
    Ответ написан
  • Почему сервер майнкрафт просто так выключается?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    Так написано же, что все подробности ошибки сохранены здесь:
    C:\Users\User\launcher\updates\HiTech\crash-reports\crash-2019-11-17_16.29.11-client.txt

    Скорее всего, какой-то мод глючит. Пробуйте отключать моды по одному. Ну или не по одному, а по 5. Или сначала одну половину отключить, потом другую половину отключить, а первую включить. В общем, нужно искать виновника методом исключения.
    Ответ написан
  • Какой хостинг взять для сайта майнкрафт?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    Бесплатный хостинг брать точно не стоит. Там обычно проблем больше, чем пользы.

    Из дешевых, попробуйте набрать в поисковике "хостинг за 12 рублей". Довольно неплохой (со словом food в названии), должен покрыть ваши нужды. Это уже НЕ бесплатно, что важно. Это значит, что то, что заявлено, должно, скорее всего, работать без проблем в будущем. Конечно, по мере роста амбиций, возможно, потребуется перейти на другой тариф, но тоже не слишком дорогой.

    В остальном дело не в хостинге, а в умении настраивать лаунчер и дружить его с сайтом. Также настраивать БД на сайте, делать сам сайт и т.д.
    Ответ написан
    Комментировать
  • Есть ли сервис по мониторингу статусов пользователя whatsapp?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    Теоретически такой сервис легко создать, так что потенциально точно есть.
    Главный встречный вопрос: нафига?
    Ответ написан
    Комментировать
  • Как считает цикл for?

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

    Далее следует уделить внимание логике работы программы, то есть ее описанию. Сейчас описание у вас такое, что глаза можно сломать, пытаясь понять, что же должна делать программа. Нужно подтянуть оформление вопроса в плане русского языка, пунктуации, падежей. В самой программе переменные должны иметь говорящие названия. То есть не qwe, а осмысленное имя, про start и out нужны комментарии, что они делают и т.д.

    Если это не поможет, то можно на выбор:
    1. Заняться отладкой программы, то есть пошагово смотреть, как программа выполняется, и соотносить это с логикой её работы.
    2. Попытаться доказать работу программы чисто математически, как учили в школе. То есть из-за использования циклов и рекурсии понадобится применить метод математической индукции.
    Ответ написан
    Комментировать
  • Пропадают ли метаданные фотографий, если скачать их из мессенджера?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    Обычно да, пропадают, потому что это разумно, особенно в свете всяких GDPR, да и по моему опыту это так, но точную гарантию может дать только соответствующий мессенджер или сайт. Нельзя сказать за всех сразу.

    Чисто теоретически, если вы отправляете фото с метаданными в Интернет, то они могут как остаться и всплыть где-то, так и потеряться. В этом смысле однозначно ответить на вопрос нельзя.
    Ответ написан
    Комментировать
  • Снижает ли производительность множество addEventListner?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    Если в большинстве случаев стоит не очень сложная проверка, то нагрузки не будет. Точнее, она будет незначительной. Собственно, такая проверка и нужна, чтобы не было нагрузки от (холостой) работы модуля (к примеру, перерисовывания, что и так нормально нарисовано).

    Если у вас в каждом модуле одним и те же проверки, и они довольно сложные (например, поиск, сортировка), то стоит задуматься о смене архитектуры.

    Но всё равно, конечное решение (ответ на вопрос) зависит от текущих замеров производительности. Даже если убрав все модули, вы снизите нагрузку в 1000 раз, то есть время работы всех этих обработчиков упадёт с 1 мс до 1 нс, то оно того не стоит. А вот если время лага уменьшится всего лишь в 10 раз, то есть с 1 с до 100 мс, то это уже полезно.

    Попробуйте воспользоваться функцией:
    performance.now()
    Для измерения производительности. Можно делать замеры до и после работы кода, которого вы считаете достаточно тяжелым, и потом считать разницу.
    Ответ написан
    1 комментарий
  • Собственные проекты. Стоит ли доводить до идеала?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    Не совсем понятно, какую цель вы преследуете. Исходя из вашего слова "профитнее" (т.е. по-русски "выгоднее") её можно трактовать по-разному.

    1) Если вы рассматриваете свои игры, как дополнительные пункты в резюме разработчика игр, и выгода для вас означает профессиональный рост и потенциальную зарплату у работодателя, то нужно не вылизывать игру до идеала, а повышать KPI. То есть нужно обращать на те моменты, которые приносят прибыль, а которые не приносят - забить. Однако к программированию это имеет мало отношения, это больше маркетинг, психология, геймдизайн, и вот это вот всё. Одному человеку это, как правило, не под силу. Но если вдруг хотя бы одна из ваших игр будет иметь коммерческий успех, пусть даже вы будете лишь одним из ее разработчиков внутри небольшой команды, то это считается серьезным достижением при устройстве на работу и имеет реально солидный вес, какую бы более узкую специальность вы ни выбрали.

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

    3) Если выгода для вас означает собственно продажа своих игр, то эта цель сильно пересекается и первым пунктом, с той лишь разницей, что вы максимизируете прибыль (причем, для себя). Аналогично первому пункту, это сложная тема, и нужно уметь во многое, что одиночке не под силу. А если вы хотите свою команду (а не вхождение в чужую), то также нужен солидный бюджет. Программирования здесь будет еще меньше, точнее лично у вас на это просто не будет времени. Но этому пункту противоречат ваши слова "для саморазвития и дропа на гитхаб", что как бы намекает, что деньги непосредственно с игр вам не нужны.

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

    P.S. На уровне джуна можно быть только помощником. То есть хорошо зная лишь теорию, получать замечания от более опытных товарищей, которые отвечают за успех. Хотя деление это довольно условно. Пет-проекты могут как способствовать росту, так и просто отнимать время, смотря что и как качать.
    Ответ написан
    Комментировать
  • Как правильно написать это регулярное выражение?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    Всё меняет. Легко проверить в консоли:
    5dcff51033564306707279.png
    Возможно, у тебя помимо (или вместо) \n есть также \r
    Попробуй так:
    str.replace(/@tag(.|\n|\r)*?@tag/gm, 'replace')
    Или так (универсально):
    str.replace(/@tag[\s\S]*?@tag/gm, 'replace');
    Ответ написан
    1 комментарий
  • Как лучше всего строить сетки и клеточные автоматы?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    Canvas, например.

    Рисовать игру типа жизнь, да и вообще любую игру, в виде таблицы с помощью тега <table> - это очень странное решение.
    Ответ написан
    Комментировать
  • Увеличил кеш браузера хром в ярлыке --disk-cache-size-4294967296, как теперь протестировать, вступило ли в силу?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    Вылет отдельных вкладок разве связан с дисковым кешем?

    Скорее всего, к концу рабочего дня отдельные вкладки слишком долго висят открытыми, поэтому и вылетают.

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

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

    На самом деле здесь есть много нюансов, поэтому универсального рецепта нет. Зависит от вашей игры. Например, если игра очень динамична, то на клиенте должно быть обязательно сглаживание. Ведь будет убого выглядеть, если после нажатия W пройдет 200мс, и только затем квадратик сдвинется. Нужно, чтобы он двигался сразу, а уж потом, если вдруг это оказалось неправомерным, сервер может прислать новые координаты и оттелепортировать игрока назад. И наоборот, если игра медленная и неповоротливая (например, пошаговая), то выгоднее перепроверять каждый чих пользователя перед тем, как отобразить действие на экране у него и всех остальных.

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

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

    Что касается того, что игрок может у себя поменять какие-то данные, приходящие от сервера, то это не должно касаться других игроков. Да, игрок сможет нарисовать себе миллион долларов и переместить себя за стену, изменив координаты локально. Но на сервере это должно игнорироваться. То есть сервер должен посчитать, что игрок не мог туда попасть, и блокировать все попытки действий в той области. Как посчитать - это уже зависит от игры, от логики геймплея. Например, у игрока было слишком мало времени, чтобы преодолеть такое расстояние (считаем путь обхода стены).

    Если говорить про чисто техническую защиту от изменения кода на клиенет, то лучшее, что вы можете сделать, это обернуть весь код в анонимную функцию. Она будет как бы глобальным пространством для других функций и переменных, но через консоль к ней нельзя будет получить доступ.
    (function() {
      let x = 50;
      let y = 50;
      // и т.д. всё, как обычно, только в обертке
    })();

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

    dollar
    @dollar
    Делай добро и бросай его в воду.
    Устроить этому сайту реверс инжиниринг, а затем сделать хороший инжект в функцию бесконечной загрузки.

    Это довольно сложная задача. Так что полный ответ будет работой.
    Ответ написан
    3 комментария
  • Как правильно организовать взаимодействие между скриптами?

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

    dollar
    @dollar
    Делай добро и бросай его в воду.
    Math.floor(2.453690 * 10) / 10
    Math.floor(2.99 * 10) / 10
    //Соответственно для вывода
    (Math.floor(2.99 * 10) / 10).toFixed(1)
    Ответ написан
  • Как использовать webP на iOS устройствах?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    Зачем?
    Слишком большой процент устройств не поддерживает webp.
    Так что рано ещё активно переключаться на эту технологию.
    Ответ написан
    Комментировать