• Какой выбрать фреймворк для разработки 2D мобильных игр?

    dlnsk
    @dlnsk
    ПК Партнер 01.01 -> ПК Поиск -> IBM PC
    Godot - реальный конкурент Unity.
    Бесплатный. Поддерживает 2D и 3D. Скрипты можно писать на разных языках, в том числе C#. Язык по умолчанию GDScript - похож на Python.
    Собственное IDE доступно для всех платформ.
    Очень хорошо организован внутри.

    Если кто хочет попробовать 2D в действии, вот моя головоломка: (начиная с версии 3.0 использован Godot). Можно скачать через Google Play.
    Ответ написан
    Комментировать
  • Как получить координаты нужного километра на трассе или по километрам?

    Moskus
    @Moskus
    Для самостоятельного вычисления вам понадобится любая ГИС, куда вы сможете загрузить геометрию дороги, вынутую из osm через overpass turbo, а потом, начиная с известной точки километрового столба, разделить геометрию на отрезки заданной длины (километр), присвоив им соответствующие имена.
    Ответ написан
    1 комментарий
  • Как получить координаты нужного километра на трассе или по километрам?

    @EmelyanovKonstantin
    GIS архитектура, аналитика, разработка
    где можно скачать такую базу?

    В открытом доступе, скорее всего, не найдёте. Это очень специфично. Можно попробовать договориться с каким-нибудь институтом или организацией.
    PHP или JavaScript / jQuery

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

    zagayevskiy
    @zagayevskiy Куратор тега Java
    Android developer at Yandex
    Концепция Rx заключается в основном в том, что существуют потоки данных внутри приложения. Эти потоки где-то начинаются (create) и где-то заканчиваются(subscribe).

    Про наборы данных - не знаю, скорее нет. Например, может быть бесконечный Observable, следящий за БД. Когда вы к нему подписываетесь, он эмитит текущее состояние БД, когда оно изменяется - эмитит ещё. Переподписка для этого не нужна.

    То, что вы говорите про Observable, на который вы подписываетесь и работа идёт вне зависимости от этой подписки, это называется "горячий" Observable. Это можно сделать, но немного непонятно, зачем именно для сети нужно такое поведение. Зачем нужен выполняющийся запрос, если на его результат, возможно, никто больше не подпишется? В такой ситуации полезнее "холодный" Observable, который начинает запрос при подписке и отменяет его при отписке.

    Далее, насчёт ввода с клавиатуры. Смотрите RxAndroid, и, в частности, RxTextView. В этом случае абсолютно то же самое - пока никто не слушает, следить за клавиатурой не нужно. Когда появился подписчик - начинаем слушать. И в случае именно андроида нет возможности установить несколько листенеров на одну вьюху, потому не удивляйтесь, когда дважды вызвав RxView.clicks(button).subscribe(Log::d) на одной кнопке, обнаружите, что эмиттит только второй Observable, а первый замолчал навсегда.
    Ответ написан
    Комментировать
  • В чём основная концепция использования RxJava?

    @red-barbarian
    RxJava - это библиотека для реализации реактивного стиля в java
    реактивный стиль вещь похожая на более известный функциональный стиль программирования.
    выражается он в следующем
    есть поток данных, мы применяем к нему некие преобразования и получаем новый поток.
    например
    (поток запросов в сеть в виде адресов страниц)-> операторЗапросаВСеть -> ОператорПарсинга-> ОператорФормированияДатаОбъектов ->(отображение на экране)
    Популярность в андроиде, думаю, приобрел за счет простоты работы с многопоточностью. По крайней мере первые примеры применения в андроиде rx обычно про это.)
    вообще, это немного другой способ мышления. отличный от процедурного и ооп.
    есть источник, есть получатель и много преобразований.
    источник это observable, получатель это subscriber/observer . преобразования это разного рода операторы или их цепочки.
    В этом случае мы понимаем приложение как нити потоков данных. такая схема бывает проще чем схема из объектов. иногда.
    конечно, мы можем применять и гибриды из этих парадигм.
    вообще, это стоит попробовать. возможно она очень вам близка по стилю вашего мышления.
    Ответ написан
  • Почему не фокусируется InputField в Unity?

    MrMureno
    @MrMureno Куратор тега Unity
    VR for all
    скопирую в ответ, для кого-нибудь в будущем (тем более даже автор вопроса попросил)

    а скриншот иерархии? что там в настроиках инпутфилда у вас покажете?
    EventSystem есть в сцене?
    в канвасе евент камера выставлена? на самом канвасе висит график реикаст?
    чтоб оно могло ловить клики и прочее))

    рядом просто кнопки есть? они нажимаются? (ну то есть убедится ,что просто евенты кликов попадают на канвас)


    так же было предложение сделать пустую новую сцену и сделать тест на "чистовую"

    создайте просто из меню Юнити, в новой чистой сцене
    GameObject -> UI -> Canvas.
    Потом на канвасе - UI -> InputField.

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

    и как итог
    необходимо было добавить EventSystem.
    Вы были правы, спасибо.
    Ответ написан
    1 комментарий
  • Как получить стиль UITableView Cell с отступом в 15 и закругленными краями?

    ivanvorobei
    @ivanvorobei
    iOS разработчик, канал https://t.me/sparrowcode
    Вам нужно использовать UICollectionView.

    Автор вопроса хочет сделать коллекцию, но на базе таблицы. Такого инструмента для таблицы нет. Но можно костылить:
    • Установить для ячейки высоту на половину отступов больше, вью с контентом поместить по центру
    • Установить каждую ячейку в новую секцию, и задать отступ с помощью высоты headerView

    Сепаратор добавить линией в конце каждой ячейки. Или если хотите костыль - то в headerView для таблицы. То, что вы хотите сделать, в разы быстрее с помощью UICollectionView. Используйте коллекцию.
    Ответ написан
    5 комментариев
  • Как решить проблему с In-App Purchase in Unity3D 2018.3?

    MrMureno
    @MrMureno Куратор тега Unity
    VR for all
    там собственно везде пишут попробовать установить юнити так чтоб в пути не было пробелов.
    и проект так же) для верности)
    удалить, импортнуть заново IAP. и того гляди пройдет) а вообще наобещали что в Unity2019 исправят или уже исправили)))
    Ответ написан
    1 комментарий
  • Как проверить In-App Purchase в Unity3d?

    GavriKos
    @GavriKos Куратор тега Unity
    Как можно выявить проблему?

    Смотреть в лог

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

    LogCat из Android Studio в помощь (например)

    Скорее всего у вас не заведены покупки в самом сторе.
    Ответ написан
    2 комментария
  • Реализация алгоритма нормализации XML для СМЭВ 3?

    IvanU7n
    @IvanU7n
    Для будущих искателей: вот такой монстрик у меня получился (PHP 7.1). Он проходит все проверки из МР 3.5, но, возможно, некоторых нюансов не учитывает.
    <?php
    $in = new DOMDocument();
    $in->load($argv[1]);
    
    $out = new XMLWriter();
    $out->openMemory();
    
    $index = 0;
    $stack = [null, [$in->documentElement, []]];
    while (count($stack)) {
    	$item = array_pop($stack);
    	if ($item === null) {
    		$out->text('');
    		$out->endElement();
    		continue;
    	}
    	[$node, $nsList] = $item;
    	if ($node->nodeType == XML_ELEMENT_NODE) {
    		// Let the magic begin! ;)
    		// The element itself.
    		if ($node->namespaceURI !== null) {
    			$thisLevel = false;
    			if (($nsList[$node->namespaceURI] ?? null) === null) {
    				$thisLevel = true;
    				$nsList[$node->namespaceURI] = 'ns' . ++$index;
    			}
    			$out->startElement("{$nsList[$node->namespaceURI]}:{$node->localName}");
    			if ($thisLevel) {
    				$out->writeAttribute("xmlns:{$nsList[$node->namespaceURI]}", $node->namespaceURI);
    			}
    		}
    		else {
    			$out->startElement($node->localName);
    		}
    		// Attributes.
    		$attrs = iterator_to_array($node->attributes);
    		usort($attrs, function($a, $b) {
    			if ($a->namespaceURI !== null && $b->namespaceURI === null) return -1;
    			else if ($a->namespaceURI === null && $b->namespaceURI !== null) return 1;
    			else return strcmp($a->namespaceURI, $b->namespaceURI) ?: strcmp($a->localName, $b->localName);
    		});
    		foreach ($attrs as $attr) {
    			if ($attr->namespaceURI !== null && ($nsList[$attr->namespaceURI] ?? null) === null) {
    				$nsList[$attr->namespaceURI] = 'ns' . ++$index;
    				$out->writeAttribute("xmlns:{$nsList[$attr->namespaceURI]}", $attr->namespaceURI);
    			}
    		}
    		foreach ($attrs as $attr) {
    			if ($attr->namespaceURI !== null) {
    				$out->writeAttribute("{$nsList[$attr->namespaceURI]}:{$attr->localName}", $attr->nodeValue);
    			}
    			else {
    				$out->writeAttribute($attr->localName, $attr->nodeValue);
    			}
    		}
    	}
    	else if ($node->nodeType == XML_TEXT_NODE && strlen(trim($node->nodeValue))) {
    		$out->text($node->nodeValue);
    	}
    
    	if ($node->lastChild !== null) {
    		$stack[] = null;
    		for ($node = $node->lastChild; $node !== null; $node = $node->previousSibling) {
    			$stack[] = [$node, $nsList];
    		}
    	}
    }
    
    echo $out->outputMemory(), "\n";
    
    ?>
    Ответ написан
    9 комментариев
  • В чем разница между ActiveForm и Html Form yii2?

    ActiveForm тесно связана с моделью - сама получает из неё данные, сама заполняет.
    HtmlForm - просто реализация формы.
    Ответ написан
    3 комментария
  • Как разобраться в философии symfony2?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    Бандлы - самодостаточные модули инкапсулирующие какие-то сервисы и прочую штуку. По сути это расширения для DependencyInjection, если очень грубо.

    Модели - это те самые Entity грубо-говоря. Вообще есть такое понятие как Доменная-модель. Это просто структура данных, сущности которыми оперирует бизнес логика. Последняя должна быть инкапсулирована в сервисы (всякие UserManager, PostManager и т.д.). В Yii модели смешаны с сервисным слоем и по этому у вас получается путаница.

    Что до кода... есть распространенный подход иметь свой AppBundle и фигачить все в нем. Есть так же рекомендуемый подход - не использовать бандлы вообще. То есть.... бандлы должны быть самодостаточны и их основное предназначение - реюз логики между проектами. Бизнес-логику приложения реюзать у вас не выйдет, поэтому рекомендуется просто писать код и регистрировать его в app/Resources/config/services.yml или что-то в этом духе, как именно решать вам. Профит в том что вы на замарачиваетесь всей этой фигней с бандлами и у вас возникает меньше вопросов по структуре. А если же вы захотели что-то вынести в бандл - например сервисы для авторизации которые реально можно реюзать, то вам никто не помешает это сделать. В итоге у вас будет структура проекта приблизительно такая:

    | - app
    | - var
    | - src
      | - Controller
      | - Entity
      | - Bundle/
        | - MyAuthBundle/
    | - web


    ну как-то так. Как не странно такой подход не сильно распространен в Symfony-сообществе хотя его рекомендуют в недавно вышедшем бест практис буке и в принципе эта струтктура более чем логична.

    Что до виджетов, в Symfony2 есть HMVC. То есть вы можете сделать эдакие под-запросы на другие контроллеры внутри вьюшек. Можно скажем все "виджеты" инкапсулировать как отдельный контроллер с методами и дергать их из вьюшек.
    <div id="sidebar">
        {{ render(controller('AcmeArticleBundle:Article:recentArticles', {
            'max': 3
        })) }}
    </div>


    Это дает больше гибкости, внутри каждого контроллера можно дергать другие контроллеры. Можно прикрутить кеширование на уровне обработки запросов (кешировать скажем все подзапросы по каким-то критериям) и т.д.
    Ответ написан
    8 комментариев
  • Как разобраться в философии symfony2?

    @shoomyst
    dumb
    Symfony это конструктор, который поставляется в собранном виде. Но ничто не мешает вам его разобрать и собрать по-своему. Многие критикуют фреймворк за это качество: нет ощущения целостности как у Yii или Laravel. Похожее говорили в свое время про Zend1: монстр, куча несвязанных компонент, лучше я буду кодить в своем уютном CodeIgniter-e.

    Symfony Framework - это (грубо) HttpKernel + DependencyInjection Container (DIC) + EventDispatcher.

    Главное задачей HttpKernel является конвертирование Request в Response. Для этого он загружает и инициализируется бандлы, создает контейнер (DIC), пытается по Request определить контроллер, выполнить его и убедиться, что результат выполенения контроллера является объектом Response, если нет, то пытается преобразовать результат в Response.

    DIC занимается созданием и хранением сервисов, если совсем грубо, то это такой навороченный Registry.

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

    Бандлы лучше всего сравнить с плагинами. Есть ядро, которое было описано выше, а бандлы это плагины для него, добавляющие некий функционал (FrameworkBundle, TwigBundle, MonologBundle). FrameworkBundle это основной плагин, который добавляет основной функционал: формы, валидация, сессии, translations. При желании его тоже можно заменить как и любой другой. Другой задачей бандлов является интеграция различных библиотек в ваш проект: twig, monolog, swiftmailer (поставляются с симфони), sphinx, elastic и т.д. Ну и логика приложения так же может быть размещена в бандлах.

    Чтобы Symfony узнал про ваш бандл, его необходимо зарегистрировать в AppKernel.

    У каждого бандла есть своя конфигурация, с помощью которой он может интегрироваться в Symfony:
    1. Регистрация своих сервисов в DIC. Далее вы можете использовать их, например, в контроллере: $container->get('sphinx.search')->query(...)
    2. Бандл может повесить свои сервисы на какие-то события. Например, на событие KernelEvents::CONTROLLER, тогда ваш бандл получит управление при подборе контроллера и вы сможете обойти штатный механизм подбора и вернуть свой, который и будет выполнен.
    3. Использование тегов. Например, вы создали класс HelloWorldViewHelper и хотите его подключить в Templating. В конфигурации указываете для него тег "templating.helper" и он будет подхвачен Symfony и встроен в шаблонизатор.
    Ответ написан
    6 комментариев
  • Заменит ли Kotlin Java в Android-разработке?

    @AnneSmith
    самая ленивая
    java программисты настолько трудолюбивые, что их не волнуют опции, которые облегчают и упрощают их труд
    Ответ написан
    1 комментарий
  • Как добавить пробелы в сумму при помощи Swift?

    DarkRaven
    @DarkRaven
    разработка программного обеспечения
    Добрый день, то что вам нужно, это NumberFormatter. У него есть настройки вида groupingSeparator, numberStyle, с помощью которых можно получить то, что вам нужно:
    https://stackoverflow.com/questions/29999024/addin...
    Ответ написан
    1 комментарий
  • Как реализовать фоновое выполнение задач?

    maestrro712
    @maestrro712
     iOS Developer
    У iOS приложений весьма жесткий подход к background режиму. Для ваших задач действительно подходит Background fetch. Однако есть 2 момента:

    1. система сама выбирает переодичность запуска приложения. Вы можете повлиять на ее "предпочтения", делая запрос как можно быстрее, и возвращая сообщение, что вы скачали новые данные.
    2. приложение, которое пользователь убил руками (выкинул из трея) не будет запускаться для фетча совсем.

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

    Подключите либу для парсинга JSON, например, раз, два, три.

    case .success:
        let json = JSON(response.result.value)
        let username: String? = json["People0"]["Name"].string
        // ...


    Обнаружилось, что передаваемый JSON был в не совсем корректном формате, из-за этого придётся делать вот так:

    case .success:
        let json = JSON(response.result.value)
        let nestedJson = JSON(parseJSON: json["People0"].string ?? "{}")
        let username: String? = nestedJson["Name"].string
        // ...
    Ответ написан
  • Как добавить гудок при исходящем звонке в Sip.js?

    ARMADIK
    @ARMADIK
    Прослойка между стулом и кливиатурой...
    О том что телефон звонит и пора проигрывать КПВ - должна уведомлять сторона Б, отправляя sip пакет 180 или 183.
    Может нет этих пакетов?
    Ответ написан
    2 комментария
  • Как работать с In-App Billing (Разработка под Android)?

    UPD 2017-09-28:
    Спустя века Google удосужились упаковать инструменты для работы с биллингом в виде официальной библиотеки, теперь лучше использовать её.

    Предыдущий ответ:
    Нужно скопировать определённые классы где-то из документации (IabHelper и т.д.) для работы с биллингом, в целом процесс не очень удобный. Приложение-пример находится тут. Есть ещё сторонняя библиотека, немного упрощающая работу с биллингом.
    Ответ написан
    7 комментариев
  • Как в anroid реализовать слайдер изображений?

    coder1cv8
    @coder1cv8
    Инди-разработчик
    Ну да, ViewPager нужен... Только зачем делать свой велосипед? Полно же готовых слайдеров изображений! Лично мне, нравится вот этот: https://github.com/daimajia/AndroidImageSlider
    Ответ написан
    1 комментарий