• Какой движок выбрать для создания интернет-магазина аддонов\модов для игры?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    Такое лучше делать в самой игре.

    На примере Стима - есть воркшоп. Но если игра поддерживает моды, то в ней встроена возможность создания и публикации прямо в самой игре. Возможно, есть отдельный редактор. Возможно, есть отдельный публикатор (приложение для публикации). Но напрямую в воркшоп заливать нельзя.

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

    На примере Террарии: сделали браузер модов внутри самой игры. Именно такое решение.

    Ну а так разработчик может и без магазинов выложить своё детище на каком-нибудь itch.io например. Платно или бесплатно, по желанию. Там и обновлять может, и юзеры могут скачивать апдейты без доплаты и т.д.
    Ответ написан
  • Как написать правильно условие if в if-e, чтобы после 10 го символа часть текста скрывалась и вместо них появлялись три точки(..)?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    function getArgument(str) {
    	if (typeof str != 'string') str+='';
    	if (str.length <= 10) return str;
    	str = str.slice(0, 10) + '...';
    	return str;
    }
    console.log(getArgument('test'));
    console.log(getArgument('test_test_test'));

    Чем меньше вложенности, тем лучше. Так что, по возможности, избегайте ситуаций if в if'е и более глубоких.
    Ответ написан
    1 комментарий
  • Хорошие платные курсы геймдизайна на русском?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    В целом, этому не учат. Конечно, если задача сделать именно что-то новое, а не тупо клон.

    Есть куча книжек по геймдизайну. И считается, что прочитать 2-3 из них - это мало.

    С другой стороны, есть мнение, что нафиг эти книги, а надо учить программирование (математику) и психологию, и именно это решает в геймдизайне.

    В общем, наиболее близкое из хорошего в РФ - это платные курсы в вышке. И когда плотно вольетесь в русскую тусовку геймдева, то дальше сможете смотреть, кто что делает, быть в тренде, брать какие-то чужие идеи, улучшать их, делиться ими и т.д. Правда, придется посещать конференции, митапы, знакомиться. Плюс на вашем конкретном игровом проекте вам, скорее всего, будут поставлять идеи многие члены команды. Ну или вы сможете перейти в проект, где ваши идеи и навыки больше всего подойдут. В остальном всё зависит от вас, вашего ума, фантазии и изобретательности, а не от курсов.
    Ответ написан
    2 комментария
  • У кого-то этот код работает так же?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    Вместо
    alert(x);
    попробуйте
    alert(performance.now());
    Тогда увидите, как на самом деле: через секунду или больше.
    Ответ написан
    Комментировать
  • Есть ли сервис создания мобильных сайтов с возможностью добавления произвольного HTML?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    github.com
    Ответ написан
    Комментировать
  • Как вычислить, какие программы потребляют больше ресурсов чем остальные?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    В Process Explorer есть колонка CPU Time - суммарно времени процесса использовано.

    Но не ясно, какую проблему вы решаете. Вы хотите так на оплате электричества сэкономить или что? Например, если какой-то процесс постоянно работает и стабильно кушает 2%, то он в сумме может переплюнуть одноразовый запуск приложения, которое в течение одной минуты загрузило проц до 100% и замедлило всю работы системы. Как по мне, второе приложение больше подходит под термин "паразит". Хотя в любом случае важному процессу можно повысить приоритет, а второстепенному - понизить, и никто никому не будет мешать.
    Ответ написан
    2 комментария
  • Как открыть веб инспектор браузера iOS на Windows?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    Есть такое решение:
    https://washamdev.com/debug-a-website-in-ios-safar...
    Ответ написан
    Комментировать
  • Почему не работает javascript в PWA?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    Проблема может быть в ошибке javascript. Либо синтаксическая, тогда весь код не работает. Либо фатальная, тогда весь код ниже места с ошибкой не работает.

    Ещё может быть, что javascript отключён в браузере.
    В iOS, например, есть такая опция
    5d1f16f737090033183598.png
    Ответ написан
  • В какую сторону дует кулер Palit Geforce gtx StormX 1660?

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

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

    Во-вторых, температура выдуваемого воздуха значительно ниже температуры видеокарты. То есть на вход воздух, скажем, 25 градусов, а на выход - 35. И даже такой теплый воздух в плане охлаждения блока питания лучше, чем полный штиль (не берем в расчет тот факт, что у блока питания обычно есть свой кулер).
    Ответ написан
    2 комментария
  • Как на стороннем сайте ВООБЩЕ запретить переход по ссылкам и открытия новых окон в браузере? Какой код ввести в консоли?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    Для начала проверьте запрет новых окон в браузере. Для этого: в хроме перейдите в настройки и введите там в строке поиска "всплывающие окна", потом внесите сайт в список блокировки.
    spoiler
    5d1ee58a4ce05806866250.png


    Далее попробуйте просто запустить блокировщик рекламы. Авось настройки по умолчанию устранят проблему. Лучшее расширение (на сегодня) - uBlock Origin. Но выбор конкретного расширения - дело вкуса.

    Хотя ещё можно отключить на сайте JavaScript. Это можно сделать средствами браузера: в хроме нужно зайти в настройки и там в поиске набрать javascript, дальше очевидно. Но удобнее использовать расширение. Лично я использую Quick Javascript Switcher (при этом у меня JS по умолчанию отключён везде, и по надобности включаю на некоторых сайтах, но это опять-таки дело вкуса). Ещё есть расширение NoScript. Кстати, блокировщики рекламы тоже умеют блокировать скрипты (см. ниже).

    Иногда некоторые сайты без JS отображают заглушку (placeholder), которая мешает просматривать контент. В большинстве случаев решается тем же блокировщиком рекламы, только нужно создать правило, скрывающее заглушку.
    Пример

    Правило для блокировщика: pcdreams.com.sg###pageloader
    Сайт из примера прекрасно работает без JS, но требуется убрать заглушку.


    Если же без JS совсем никак, то тем же блокировщиком рекламы можно настроить фильтр, который запрещает определенный файл js или даже inline js по какому-то условию (имя файла или содержимое скрипта). Но для этого придется немного окунуться в то, как устроен сайт изнутри. То есть зависит от конкретного сайта.

    Чтобы добавить свой скрипт на страницу, понадобится расширение Tampermonkey. Как подсказали в комментариях, можно попробовать обмануть код страницы и таким способом:
    unsafeWindow.open = e=>0;

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

    В общем, это война снаряда и брони. В ней не может быть победителя. Но сейчас в среднем по всем сайтам перевес сил на стороне пользователя.
    Ответ написан
    Комментировать
  • Для того, чтобы обезопасить свой сайт, достаточно ли преобразования трех символов: &, < и >?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    Достаточно одного символа <
    Но тема безопасности обширнее, чем только противодействие XSS.
    Ответ написан
    Комментировать
  • Что значит такая ссылка?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    Это нужно спрашивать у разработчиков VK.

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

    Это нужно, чтобы целевой сайт не узнал URL страницы, с которой был переход по полю referer, которое браузер обычно передаёт сайтам. Иначе просто целевой сайт сможет косвенно вычислить личную информацию о пользователе (предпочтения, например).

    Либо, наоборот, если у VK какая-то договорённость с целевым сайтом, то, возможно, VK хочет передать id пользователя, чтобы сайт мог таргетно показывать рекламу и всякое такое.

    В общем, гадать можно долго. А вопрос по сути нарушает п.2.3 правил, так что, скорее всего, будет удалён.
    Ответ написан
    Комментировать
  • Почему в меню Toster.ru нет 'Мои вопросы'?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    У меня есть :)
    spoiler
    5d1c44ce1b25c388943576.png

    А вообще просто кликаешь по своему нику - и переходишь в свой профиль, там всё есть.
    Ответ написан
    3 комментария
  • Как перебрать массив строк?

    dollar
    @dollar Куратор тега Lua
    Делай добро и бросай его в воду.
    1) А что вам важнее, изящество или скорость?
    1.а) Во-первых, изящнее использовать встроенную функцию ipairs, которая как раз интерирует индексный массив:
    lines = {"sdss", "vfbf"}
    for i, line in ipairs(lines) do
      print(line)
    end

    Это изящнее, чем просто обращение по индексу, потому что исчезает строка создания переменной line, она задаётся в самом цикле. Однако с точки зрения производительности такой способ медленнее, потому что конструкции языка быстрее, чем обращение к функциям, даже встроенным. Так что если у вас миллиарды строк, то лучше ваш вариант, хоть он и менее изящен.

    1.б) Во-вторых, в вашем примере создаётся переменная line глобально. Это не ошибка, но может привести к ошибке в будущем, если код будет сложный. Поэтому делать так совсем не изящно. Лучше писать так:
    local line = lines[i]
    Это создаст локальную переменную внутри цикла. Она не будет доступна вне цикла. А если есть одноименная глобальная переменная, то с ней ничего не произойдет. Везде, где только можно, лучше использовать слово local, оно ограничивает область видимости переменной текущим блоком (и вложенными блоками).

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

    2) nil выводит потому, что строки в lua не являются итерируемыми объектами, в отличие от строк в javascript, например. То есть строка является объектом, поэтому обращение к свойству [j] не является синтаксической ошибкой, но свойства такого у строки нет, поэтому line[j] возвращает nil.

    Обращение к символу в Lua происходит через функцию подстроки:
    line:sub[j,j]
    То есть мы буквально вырезаем подстроку с позиции j до позиции j, это и есть один символ.

    Опять же, красиво создавать локальные переменные, чтобы читателю вашего кода было понятно, что происходит, а потом их использовать. Желательно с комментариями. Например, так:
    local c = line:sub[j,j] --Получаем символ с номером j
    print(c) --Выводим символ


    3) Ну и, наконец, если вам не важна скорость и производительность совсем, а под изяществом вы понимаете как можно более короткую (и/или сложную для понимания) запись кода, то вам подойдёт что-то вроде этого:
    Пример
    lines = {
      "sdss",
      "vfbf",
    }
    
    for i,line in ipairs(lines) do
      for c in line:gmatch"." do
        print(c)
      end
    end
    Пример 2
    lines = {
      "sdss",
      "vfbf",
    }
    
    for i,line in ipairs(lines) do
      line:gsub(".",function(c)
        print(c)
      end)
    end

    Ведь в Lua использовать в качестве итератора любую функцию, кроме pairs и ipairs, очень необычно, не всем понятно, зато "изящно" (если это можно так назвать). Передавать функции в качестве аргументов другой функции - приём также чуть сложнее, чем просто цикл. Ну и регулярные выражения, само собой разумеется, отдельная сложная тема. Тем более, что в Lua регулярки немного иначе устроены, то есть ещё +10% к сложности.
    Ответ написан
    1 комментарий
  • Как реализовать спрайтовую анимацию в андроид (для объектов в игре)?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    Обычно делают "кучу склеенных в один файл кадров" на полотне 1024х1024 или 2048х2048.
    Ещё больше размер - плохо.

    Соответственно, в самом спрайтере лучше экпортировать в виде "кучи отдельных кадров". Но! При этом нужно сделать свою небольшую софтину, которая будет конвертировать удобочитаемый XML (или JSON) от спрайтера и отдельные изображения в свой собственный формат анимаций, удобный вам.

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

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

    dollar
    @dollar
    Делай добро и бросай его в воду.
    Думаю, лучше перейти с JSOUP на чисто хром.
    Меньше шанс, что что-то сломается.
    Да и проще реализовать, не нужно копаться в (обфускированном?) коде, а достаточно работы с DOM.
    То есть просто делаешь расширение для хрома (личное) - и оно уже во вкладке парсит выдачу яндекса, одновременно прокручивая страницу для подгрузки новых изображений.
    Ответ написан
    Комментировать
  • Какое направление подготовки выбирать, чтобы стать GameDeveloper?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    Основных направлений в геймдеве я бы выделил всего четыре:
    1) Программирование
    2) Дизайн
    3) Менеджмент (сюда же включу маркетинг, и всяких КМ, биздевов, секретарш и пр.)
    4) Геймдизайн

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

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

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

    P.S. А ответ на предыдущий вопрос вас не устроил? Спрашиваю, потому что правильные ответы принято помечать решениями.
    Ответ написан
  • Почему Array.prototype является массивом, но к нему нельзя обратиться по индексу?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    Можно обратиться по индексу:
    Array.prototype.length; //0
    Array.prototype[0]; //undefined, но не ошибка!
    Array.prototype[0]=123; 
    Array.prototype[0]; //Теперь 123
    Array.prototype.length; //Теперь 1 (автоматически)

    Возможно, вы думали, что массивы не могут содержать свойств? Но массивы - объекты, так что могут:
    typeof Array.prototype; //"object"
    var a = [];
    typeof a; //"object";
    a.x = 123;
    a.x; //123
    a.length; //0

    Кстати, мысль о том, что Array.prototype это массив, довольно спорная, не смотря на документацию. Смотря как проверять:
    [] instanceof Array; //true
    Array.prototype instanceof Array; //false

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

    А в общем случае ответить нельзя, потому что массив или не массив это просто термин. Например, если вам достаточно, чтобы массив содержал лишь метод forEach, то некоторые якобы массивы вам тоже вполне сгодятся:
    document.querySelectorAll('div').forEach; //function - подходит
    document.getElementsByTagName('div').forEach; //undefined - не подходит

    То есть копать можно долго в эту тему. Но надо понимать, зачем.
    Ответ написан
    Комментировать
  • Запретить перевод определённого текста?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    Так: <span translate="no">Москва</span>
    Или так: <span class="notranslate">Москва</span>
    Есть документация, которую вы, по идее, должны были прочитать до написания вопроса.
    Ответ написан
    9 комментариев