• Unity3D: Вводная в синтаксис

    Представлен систаксис на Javascript

    Игровой объект


    Создание нового игрового объекта с именем MyObject.

    var myObject = new GameObject("MyObject");

    Созданный объект будет доступен по ссылку myObject.

    Поиск объекта по его имени.

    var myObject = GameObject.Find("MyObject");



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

    var myObject = GameObject.FindWithTag("MyTag");



    Возвращает список всех объектов с указанным тегом:

    var objectList = GameObject.FindGameObjectsWithTag("MyTag");



    Проверка на наличие у объекта требуемого тега. Возвращает true, если у указанного объекта имеется тег MyTag:

    var isCompare = GameObject.CompareTag("MyTag");



    Уничтожение объекта:

    Destroy(myObject);



    Уничтожение объекта через минуту, после его создания:

    Destroy(myObject, 60);



  • Клонирование объекта в Javascript

    Метод Object.assign() используется для копирования значений всех собственных перечисляемых свойств из одного или более исходных объектов в целевой объект. После копирования он возвращает целевой объект.

    Метод Object.assign() копирует из исходных объектов в целевой объект только перечисляемые и собственные свойства. Он использует внутренний метод [[Get]]на исходных объектах и внутренний метод [[Set]] на целевом объекте, так что он также вызывает геттеры и сеттеры. Именно поэтому он присваивает свойства вместо простого копирования или определения новых свойств. Это поведение может сделать метод непригодным для вливания новых свойств в прототип, если вливаемые исходные объекты содержат геттеры. Вместо него для копирования в прототипы определений свойств, включая признак их перечисляемости, следует использовать методы Object.getOwnPropertyDescriptor()и Object.defineProperty().

    Копируются свойства типов как String, так и Symbol.

    В случае возникновения ошибки, например, когда свойство является незаписываемым, возбуждается исключение TypeError, а целевой объект targetостаётся неизменным.

    Обратите внимание, что метод Object.assign() не выкидывает исключения, если в качестве исходных значений выступают null или undefined.


    Пример: клонирование объекта

    var obj = { a: 1 };
    var copy = Object.assign({}, obj);
    console.log(copy); // { a: 1 }

    Пример: слияние объектов

    var o1 = { a: 1 };
    var o2 = { b: 2 };
    var o3 = { c: 3 };
    var obj = Object.assign(o1, o2, o3);
    console.log(obj); // { a: 1, b: 2, c: 3 }
    console.log(o1); // { a: 1, b: 2, c: 3 }, изменился и сам целевой объект.

    Больше информации тут



  • Редизайн сайта

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

    Удачной идеей мне показалось сделать привязку каждой записи к одной или нескольким подкатегориям, чтобы в дальнейшем можно было фильтровать результаты отображения записей по нужной теме, например, "Программирование".

    Добавил также систему комментариев к записям. Пока простенькую, но на этапе тестирования сойдет.

    Осталось сделать регистрацию и авторизацию, а также раздел "Всякоразности", в котором буду собирать информацию о промежуточных проектах, выполненных мною.



  • Фриланс для программистов: подборка лучших сайтов

    Взято с сайта https://proglib.io - https://proglib.io/p/freelance/

    Многие ищут фриланс для программистов, но далеко не все знают, где искать. Мы составили список ресурсов, которые вас заинтересуют.

    Разберемся, что представляет из себя фриланс для программистов, и как быстро освоиться на приведенных ниже сайтах.

    1. FL

    Говорят, что фрилансеры здесь варятся в собственном соку. И это отчасти правда, ведь те, кто успел запрыгнуть в ТОП с самого начала работы сайта, прочно там засели. У вас, естественно, не будет столько заказов, сколько у «избранных», что, тем не менее, не означает отсутствие работы у «простых смертных».

    Для фрилансеров существует множество категорий, так что каждый найдет свою специализацию. Другое дело, что FL с давних пор платный. Если изначально лишь некоторые заказчики делали заказы доступными для исполнителей с PRO-аккаунтами, то теперь, чтобы оставить комментарий под любым заказом, нужно этот самый аккаунт иметь. А это ни много ни мало почти 1700 руб./мес. И ведь не факт, что отобьются…

    Куда комфортнее себя чувствуют работодатели: можно брать PRO, а можно и не брать. Ответов по проекту в любом случае будет море. Да и дешевле обходятся вебмастерам все эти PRO-плюшки.

    Несправедливо, да. Но привыкайте: золотое правило фриланса – заказчик всегда прав.

    Остальное - под катом )



  • Правильная обработка касаний экрана при разработке мобильного приложения на Javascript

    Проблем с этим, на самом деле, много. А в интернете, что очень странно, информации довольно мало.

    Поясню ситуацию, чтобы было понятнее... Имеется 2 div-а. Один вложен в другой и больше родителя размерами. Внутренний div имеет свойство draggable (Jquery UI), чтобы можно было его "перетаскивать" внутри родительского div-а.

    Встала задача - получить координаты нажатия на внутренний div. Функция $( "#inner" ).click() с задачей справляется, но есть подводные камни, особенно для мобильных устройств:

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

    Как убрать синее выделение элемента при касании экрана?

    Для начала напишем следующие строчки в CSS-файл нашего приложения:

    {
      -webkit-tap-highlight-color: rgba(2552552550);
      -webkit-focus-ring-color: rgba(2552552550);
      outline: none;
      -moz-user-select: -moz-none;
      -o-user-select: none;
      -khtml-user-select: none;
      -webkit-user-select: none;
      user-select: none;
      -webkit-text-size-adjust: none;
    }

    В код программы добавляем:

    if (document.addEventListener) {
      document.addEventListener("touchstart"function () {
      }, true);

    }

    Если нажимаемые элементы - кнопки, добавляем для них такие стили:

    .some_button:focus.some_button:focus:active {
      background-color: rgba(0000);
    }

    Лично мне такое решение помогло.

    Долгое время отклика при касании экрана на мобильных устройствах

    К сожалению, перепробовав кучу JQuery-плагинов, я убедился в том, что адекватное время отклика дает только слушатель tap, который входит в комплект JQuery Mobile. Также является большим плюсом то, что он не мешает событию drag-а. Так как мне для моих приложений не нужны все встроенные функции JQM, я использую кнопку Custom Download, которая позволяет скачать только те компоненты, которые мне нужны. Сжатая версия библиотеки, включающей в себя только средства обработки touch-событий, "весит" всего 8 килобайт.

    Но теперь возникла другая проблема: получить точные координаты клика на вложенном элементе. Дело в том, что возвращаются координаты нажатия относительно позиции не нажатого элемента, а всего экрана. Почему так - непонятно. Для себя я эту проблему решил путем математического расчета:

    var screenWidth = $( document ).width(); // ширина экрана
    var screenHeight = $( document ).height(); // высота экрана
    var outerPosition = $( "#outer" ).offset(); // координаты родительского контейнера относительно координат экрана
    var innerPosition = $( "#inner" ).position(); // координаты вложенного контейнера относительно родителя
    var touchCoords = false; // координаты касания
    var realTouchCoords = false; // расчетные координаты касания относительно координат вложенного контейнера
    $( "#inner" ).on( "tap", function( e ) {
      e.preventDefault();
      e.stopPropagation();
      touchCoords = {
        x: e.pageX,
        y: e.pageY
      };
      var left, top;
      if ( innerPosition.left < 0 ) {
        left = Math.abs( innerPosition.left ) + ( touchCoords.x - outerPosition.left );
      } else if ( innerPosition.left > 0 ) {
        left = touchCoords.x - innerPosition.left - outerPosition.left;
      } else {
        left = touchCoords.x - outerPosition.left;
      }
      if ( innerPosition.top < 0 ) {
        top = Math.abs( innerPosition.top ) + ( touchCoords.y - outerPosition.top );
      } else if ( innerPosition.top > 0 ) {
        top = touchCoords.y - innerPosition.top - outerPosition.top;
      } else {
        top = touchCoords.y - outerPosition.top;
      }
      realTouchCoords = {
        x: left,
        y: top
      };
    } );

    Вот такие танцы с бубном... Зато проблема решена. Если кто-нибудь знает способ попроще, напишите мне, не сочтите за труд! Всем удачи и пока!



  • Полезные плагины для cordova

    Привожу краткое описание, ссылку и строку добавления плагина в консоли.


    Cordova Clipboard

    Clipboard management plugin for Cordova/PhoneGap that supports iOS, Android, and Windows Phone 8.

    Плагин, позволяющий работать с буфером обмена

    cordova plugin add https://github.com/VersoSolutions/CordovaClipboard

    cordova-plugin-admob

    AdMob Cordova Plugin, provides a way to request AdMob ads natively from JavaScript.

    Работа с баннерной системой AdMob

    cordova plugin add com.rjfun.cordova.plugin.admob

    cordova-plugin-iad

    Present Apple iAd in Mobile App/Games natively from JavaScript.

    Работа с баннерной системой IAd

    cordova plugin add https://github.com/floatinghotpot/cordova-plugin-iad.git

    cordova-plugin-splashscreen

    This plugin displays and hides a splash screen during application launch.

    Плагин показывает сплеш-скрин и прячет его после запуска приложения

    cordova plugin add org.apache.cordova.splashscreen

    cordova-plugin-apprate

    This plugin provide the rate this app functionality into your Cordova/Phonegap application

    Плагин позволяет пользователю поставить оценку приложению

    cordova plugins add https://github.com/pushandplay/cordova-plugin-apprate.git

    cordova-plugin-social-message

    Cordova Plugin to utilise native share features. Developed for Apache Cordova CLI >= 3.0.0. Share text, images and urls to Facebook, Twitter and more.

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

    cordova plugin add https://github.com/leecrossley/cordova-plugin-social-message.git

    cordova-plugin-globalization

    This plugin obtains information and performs operations specific to the user`s locale, language, and timezone. Note the difference between locale and language: locale controls how numbers, dates, and times are displayed for a region, while language determines what language text appears as, independently of locale settings. Often developers use locale to set both settings, but there is no reason a user couldn`t set her language to "English" but locale to "French", so that text is displayed in English but dates, times, etc., are displayed as they are in France. Unfortunately, most mobile platforms currently do not make a distinction between these settings.

    Плагин предоставляет информацию о родном языке пользователя и часовой зоне. Это позволяет приложению без лишних вопросов настраиваться на нужную локализацию. Формат ответа плагина: "ru-RU", "en-US" и т.п.

    cordova plugin add org.apache.cordova.globalization

    cordova-plugin-statusbar

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

    cordova plugin add org.apache.cordova.statusbar


    Это так, навскидку. Позже буду обновлять список.




  • Дизайн и программирование мобильного игрового приложения 4 Board Game для платформы iOS

    Наконец-то окончил работу над приложением для iOS.

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

    1. Уголки (Халма) - с расположением фигур в виде угла
    2. Уголки (Халма) - с расположением фигур в виде прямоугольника
    3. Шашки
    4. Шахматы

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

    [Купить приложение на iTunes]



  • Мобильное приложение на Javascript. Проверка доступности игрового сервера с помощью AJAX

    У нас есть игровой сервер, на 80-м порту которого крутится socket.io. Возникла необходимость проверять перед запуском игры доступность этого сервера. Поскольку кросс-доменная политика браузеров вставляет палки в колеса, был проведен поиск путей ее обхода. Не буду приводить все свои попытки, приведу лишь ту, результат которой меня вполне устраивает.

    $( function() {

        var ServerCreate = function() {

            var __public = {};
            var __private = {};

            __private.timer = false;
            __private.serverstatus = false;
            __private.url = "http://server:port";

            __private.wait = function( callback ) {
                __private.timer = setTimeout( function() {
                    callback( __private.serverstatus );
                }, 5000 );
            }

            __public.check = function( callback ) {
                __private.wait( callback );
                $.ajax( {
                    type: "GET",
                    dataType: "jsonp",
                    url: __private.url,
                    error: function( data ) {
                    if ( data.statusText == "success" ) {
                        __private.serverstatus = true;
                        clearTimeout( __private.timer );
                        callback( __private.serverstatus );
                    }
                } );
            }

            return __public;

        }

        var Server = ServerCreate(); 

        Server.check( function( status ) {
            switch ( status ) {
                case true:
                    console.log( "Сервер доступен. " + status );
                break;
                case false:
                    console.log( "Сервер недоступен. " + status );
                break;
            }
        } );

    } );

    Надеюсь, что это кому-нибудь поможет.





  • IOS - проблемы при разработке HTML5-приложений

    Сейчас я разрабатываю мобильное приложение под продукцию Apple - IPad, IPhone... Дело это для меня новое, так что сразу же нарисовался целый ряд проблем, с которыми частично я разобрался, а с некоторыми - никак. Буду выкладывать инфу о решении проблем по мере её поступления.

    Вкратце о приложении - это игра для мобильных устройств, идея не нова, с основе лежит игра "Filler", с незначительными изменениями. Графическая часть написана на LibCanvas, для звуков использована библиотека Howler.js, собирается с помощью Apache Cordova.

    Проблемы, которые возникли при разработке:

    1. собранное приложение не хочет переключать устройство на альбомную ориентацию экрана
    2. жутко тормозит анимация, выполненная с помощью CSS3 и JQuery
    3. нет звуков или они присутствуют частично
    4. событие click срабатывает с большой задержкой
    5. при движении по экрану пальцем происходит скроллинг экрана, что недопустимо в данном приложении
    6. на некоторых устройствах (не на всех, что странно) происходит автоматическая смена ориентации экрана при его повороте, что не нужно в данном случае
    7. После исчезновения splash-экрана на долю секунды появляется белый экран.


    Собранное приложение не хочет переключать устройство на альбомную ориентацию экрана

    В редакторе XCode при создании приложения можно указать предпочитаемую ориентацию экрана, но это не помогло. Погуглив, я понял, что надо править конфигурационный файл config.xml. Надо добавить всего две строчки перед закрывающим тегом:

     

    Последние две строчки я добавил, чтобы приложение открывалось на полный экран, скрывая индикатор заряда, часы и т.д., и чтобы запретить пользователю "двигать" приложение за пределы экрана.

    Первая проблема решена.


    Событие click срабатывает с большой задержкой

    Помехой при адаптации приложения для моб. устройств стает то, что сенсорный экран не имеет привычных нам событий управления. Установив обработчик по типу события «click» на настольном компьютере и, например, планшете мы не получим одинаковый результат работы.

    На ПК все отработает безукоризненно, а вот на тачскрине — с задержкой, равной ~300ms. Для большинства людей это не критично и кто-то, может быть, даже не заметит ее, но, как мне кажется, разработчик должен учитывать такие мелочи. 

    В ходе поисков я наткнулся на эту статью - http://www.html5rocks.com/ru/mobile/touch/. Как она не попалась мне раньше - ума не приложу. Не буду приводить всю информацию оттуда, скажу лишь, что в этой статье описывается API обработки касаний для устройств iOS и Android. Решение, которое меня вполне удовлетворило - заменить слушатели событий click на touchstart. В итоге получилось что-то вроде этого:

    Еще есть очень полезная статья на habrahabr.ruhttp://habrahabr.ru/post/191078/. В ней представлено описание плагина jTap для jQuery. Тоже рекомендовано.

    В, общем эта проблема тоже решена


    При движении по экрану пальцем происходит скроллинг экрана, что недопустимо в данном приложении.

    Решение нашлось в той же статье, которую я привел выше - http://www.html5rocks.com/ru/mobile/touch/.

    Для того, чтобы запретить масштабирование, нужно прописать в index.html:

    Чтобы запретить прокрутку экрана, вставляем следующий код после срабатывания события deviceready:

    Проблема решена.


    Нет звуков или они присутствуют частично

    И опять же, полезная статья на эту тему - http://www.ibm.com/developerworks/ru/library/wa-ioshtml5/. Ей чуть больше года, но она еще остается актуальной. 

    Я же использовал библиотеку Howler.js, ссылка на которую есть в начале статьи. Хотя в нее периодически вносятся различные поправки, но до сих пор при сборке приложения на iOS звук глючит. Устройства на Android ведут себя вполне адекватно.

    Эта проблема пока не решена, буду выкладывать результаты по мере поступления.

     

    На некоторых устройствах (не на всех, что странно) происходит автоматическая смена ориентации экрана при его повороте, что не нужно в данном случае.

    В самом редакторе XCode в настройках приложения есть пункт, где выбирается предпочитаемая ориентация экрана. Причем, имеется две вкладки - iPhone и iPad. Для обоих типов устройств нужно выбрать свою предпочитаемую ориентацию. Лично мне - помогло. Но, как написано выше, это срабатывает не со всеми устройствами.

    Ссылки, которые могут помочь в решении проблемы:

    Проблема решена.

     

    После исчезновения splash-экрана на долю секунды появляется белый экран.

    Для решения проблемы необходимо установить плагин Splashscreen для Cordova. (https://github.com/apache/cordova-plugin-splashscreen).

    После срабатывания события DeviceReady ставим код:

    Возможно, придется поправить файл config.xml, добавив в него следующую строчку:

    Лично мне она не понадобилась, но - мало ли...

    Проблема решена.



Загрузка...

Войти на сайт

Регистрация