1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/codeveryday-phaser-ce_wechat

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
CHANGELOG.md 560 КБ
Копировать Редактировать Web IDE Исходные данные Просмотреть построчно История
gitlife-traslator Отправлено 26.11.2024 00:23 cf321c1

Change Log

Version 2.16.1 — 21 октября 2020

Новые функции

  • Phaser.Video#createVideoFromURL имеет аргумент crossOrigin (#676).
  • Phaser.Video#startMediaStream принимает MediaTrackConstraints в своих аргументах captureAudio и captureVideo (#677).
  • Phaser.Loader#image поддерживает загрузку одного из нескольких альтернативных форматов (например, AVIF, WebP, SVG) в зависимости от поддержки браузера.

Обновления

  • Удалён параметр codec для теста Phaser.Device#wav, поскольку он давал ложный отрицательный результат в Safari.

Благодарности

@jorginius, @photonstorm, @samme

Версия 2.16.0 — 1 июня 2020

Изменения API

  • Ввод с помощью колёсика мыши по умолчанию отключён. Его можно включить, установив {mouseWheel: true} в конфигурации игры.
  • Phaser.StateManager#onStateChange отправляется перед Phaser.Scene#init, а не после.

Новые функции

  • Phaser.Camera#fadeIn — новый эффект камеры. Он выполняет противоположное действие по сравнению с Phaser.Camera#fade.
  • Phaser.SoundManager#onStateChange — новый сигнал, отправляемый при изменении состояния контекста Web Audio, при использовании Web Audio.
  • Phaser.Utils.Debug#state показывает текущее состояние игры.

Обновления

  • Контекст Web Audio автоматически возобновляется при возобновлении или повторной фокусировке игры (#667).

Благодарности

@samme, @SBCGames

Версия 2.15.1 — 15 мая 2020

Новые функции

  • Phaser.BitmapData#getBase64().
  • Phaser.BitmapData#getImage().
  • Phaser.Game#maxUpdates.
  • Phaser.MSPointer#pointerCancelCallback.
  • Появился новый кэш данных, позволяющий хранить произвольные данные на протяжении всей игры. Новые методы: Phaser.Cache#addData(), Phaser.Cache#checkDataKey(), Phaser.Cache#getData() и Phaser.Cache#removeData(). Их можно использовать из this.cache в сцене или game.cache.
  • Phaser.Utils.Debug#gameInfo().

Обновления

  • Phaser.RenderTexture#getBase64() имеет аргументы type и encoderOptions.
  • Phaser.RenderTexture#getImage() имеет аргументы type, encoderOptions, onLoadCallback и onErrorCallback.
  • Phaser.Tilemap#searchTileIndex() имеет аргумент all, возвращающий все совпадающие тайлы.

Исправления ошибок

  • Указатели ввода останавливаются для события «pointercancel». Это должно предотвратить потерю/зависание указателей после жестов ОС (#663).

  • Уничтожение игры во время загрузки не вызывает ошибки, когда загрузчик... MSPointer#stopOnGameOut имеет значение #429. По умолчанию они ложны.

  • MSPointer#pointerOverCallback заменяет использование MSPointer Mouse#mouseOverCallback.

  • MSPointer#pointerOutCallback заменяет использование MSPointer Mouse#mouseOutCallback.

  • MSPointer#stopOnGameOut заменяет использование MSPointer Mouse#stopOnGameOut.

  • Удалено Phaser.Mouse.WHEEL_UP. Вместо этого используйте Phaser.MouseWheel.UP.

  • Удалено Phaser.Mouse.WHEEL_DOWN. Вместо этого используйте Paser.MouseWheel.DOWN.

  • Удалено Phaser.Mouse#releasePointerLock. Вместо этого используйте Phaser.PointerLock#exit.

  • Удалено Phaser.Mouse#requestPointerLock. Вместо этого используйте Phaser.PointerLock#request.

Если вы не хотите управлять обоими обработчиками ввода, вы можете отключить MSPointer, передав {mspointer: false} в конфигурации вашей игры.

Новые функции

  • Loader#tilemapCSV — это метод быстрого доступа для загрузки карт CSV.
  • Loader#tilemapTiledJSON — это метод быстрого доступа для загрузки карт Tiled JSON.

Исправления ошибок

  • Скорость анимации более точная (#606).

Благодарности

@jf-m, @josalmi, @photonstorm, @samme.

Версия 2.12.1 — 6 мая 2019 года

Новые функции

  • У ScaleManager#startFullScreen есть аргумент options.

Исправление ошибок

  • Неопределённое значение в BitmapData#smoothed исправлено.
  • Улучшено отслеживание событий указателя вне (#624).
  • Исправлена альфа для разных регионов Creature (#625).

Обновления

  • Видео теперь имеют установленный атрибут playsinline.
  • Добавлено предупреждение для карт Tiled JSON версии > 1.1. Свойства объектов и свойства тайлов в этих картах могут не работать в Phaser CE. Вы можете включить плагин json1 и повторно экспортировать карту в формате Tiled 1.1, чтобы использовать эти функции в Phaser CE (#623).
  • Скрыта навигация UI в полноэкранном режиме в Chrome/Android (#626).

Благодарность

@daniel-nth, @highlyinteractive, @mikeks, @ndee85, @photonstorm, @samme, @thomasMeynckens.

Версия 2.12.0 — 6 февраля 2019

Если вы используете аргумент loadAnchors в конструкторе Phaser.Creature, вам придётся изменить свой код.

Новые функции / изменения API

  • BitmapText имеет новое свойство letterSpacing, которое принимает положительное или отрицательное число для добавления или уменьшения расстояния между символами.

  • Камера теперь имеет новые свойства centerX и centerY, чтобы получить центр текущего окна просмотра камеры.

  • Обновлён Creature runtime. Аргумент loadAnchors в конструкторе Phaser.Creature был удалён, а аргумент useFlatData добавлен. В Phaser.GameObjectFactory#creature также добавлены аргументы (mesh, animation, useFlatData), но существующие аргументы не были изменены.

  • Теперь у Phaser.Creature есть новые функции setMetaData, enableSkinSwap, disableSkinSwap, setActiveItemSwap и removeActiveItemSwap, добавляющие Skin и Item. Поддержка замены анимаций существ.

  • Phaser.Graphics#getVisualBounds — это новый метод, который получает границы (экстент) фигур, нарисованных на графическом объекте (#578). В отличие от Phaser.Graphics#getBounds, он даёт одинаковый результат независимо от того, используется ли графический объект в качестве маски.

  • Phaser.SoundManager#baseLatency — это новое свойство, представляющее задержку обработки базового контекста Web Audio, в секундах.

Исправления ошибок

  • Исправлена проблема, из-за которой BitmapFont не загружался, если в xml/json было определено значение кернинга для символа, которого нет в шрифте (#598).

  • Исправление для Creature, позволяющее избежать проблем с поведением при использовании объекта JSON, переданного в Phaser.Cache, после модификации его во время выполнения (например, при наличии нескольких объектов Creature одного и того же персонажа) (#598).

  • Теперь Phaser.PointerLock#stop будет останавливать своих слушателей событий только в том случае, если они были запущены изначально. Это позволяет избежать проблем, когда сторонняя библиотека, такая как Ionic, перехватывает функции событий и обрабатывает их самостоятельно (спасибо @photonstorm и manuelhe).

  • Исправлена ошибка при уничтожении видео с сенсорным блокированием (#616).

  • Исправлена ошибка при отключении геймпада (#610).

  • Исправлено потоковое видео в Firefox (#607).

  • Исправлен случай, когда глобальный объём (global volume) не влиял на звуки, которые не воспроизводились в данный момент, при использовании HTML audio (как в IE11) (#617).

Благодарности

@Aram19, manuelhe, @micsun-al, @photonstorm, @rroylance, @samme, @Weedshaker, @wtravO.

Версия 2.11.1 — 2 октября 2018

Исправления ошибок

  • Исправлена ошибка передачи параметров box2d в настройках конфигурации игры (#553).

  • Исправлены некоторые сжатые форматы текстур, которые не загружались (#562).

  • Исправлена ситуация, когда при неудачной инициализации рендерера WebGL RenderTexture всё ещё пытались его использовать, если рендерер не был предоставлен (#575).

  • Исправлена несогласованность возвращаемого значения в BitmapData#copy (#580).

  • Твинов теперь полностью очищают при разрушении игры (#581).

  • Игра теперь обнуляет ссылку на себя из PIXI после уничтожения (#583).

  • Исправлена ошибка фрейма BitmapFont при использовании обрезки фрейма в атласе (#587).

  • BitmapData#shadow теперь игнорирует размытие или смещение x/y при установке на 0 (#591).

Обновления

  • AnimationParser.spriteSheet теперь сообщает вам минимальные размеры изображения, которые он ожидает, если ему не удаётся создать хотя бы один полный кадр из спрайтов (#559).

  • В игре теперь проверяется свойство SoundManager muteOnPause всякий раз, когда устанавливается свойство paused игры, чтобы можно было контролировать, воспроизводятся ли звуки при ручной паузе игры. Ранее свойство использовалось только тогда, когда фокус игры терялся в DOM (#572).

Определения TypeScript

  • Исправлено определение для bitmapText() в GameObjectFactory (#561).

  • Исправлено определение для clear() в RenderTexture (#573).

  • Исправлено определение объёма видео.

Документация

  • Изменено название свойства canvasID объекта конфигурации игры (game configuration object). Предыдущее название, canvasId, было неверным и игнорировалось.

  • Уточнён аргумент spacing в Loader#spritesheet (#448, #559).

  • Исправлено P2#createGearConstraint (#566).

  • Исправлено Tilemap#copy, Tilemap#replace (#586).

  • Опечатка (#594).

  • Исправлено Key#upDuration, Keyboard#upDuration (#595).

Благодарности

@B10215029, @CorayThan, @FostUK, @Jazcash, @Lucas-C, @Mertank, @Nek-, @aeonwilliams, @dywedir, @foreverip, @giniwren, @josalmi, @joshlory, @rydash, @samme, @tiagokeller, @zhaxiu3.

Версия 2.11.0 — 26 июня 2018 Изменения в API / новые функции

  • Phaser теперь запускает обработчик Pointer Events (с отключённым захватом) или обработчик Mouse (также с отключённым захватом), но не оба сразу. Это делает поведение ввода более последовательным и позволяет избежать некоторых редких конфликтов между ними при одновременном запуске.

    Если вы хотите отключить обработчик Pointer Events, передайте { mspointer: false } в конфигурации вашей игры. Вместо него будет использоваться обработчик Mouse.

    Чтобы запустить оба обработчика вместе, вы можете вручную запустить обработчик Mouse. Также необходимо включить захват для обработчика Pointer Events во избежание дублирования событий:

game.input.mouse.start();
game.input.mspointer.capture = true;

Обработчик Touch запускается (с включённым захватом) только в том случае, если устройство поддерживает сенсорное управление и обработчик Pointer Events не был запущен. Это аналогично предыдущим версиям.

Какие обработчики ввода работают в зависимости от возможностей устройства

Устройство имеет mspointer touch mouse
Pointer Events активен
нет Pointer Events; Touch активен† активен
нет Pointer Events; нет Touch активен

(†) захват включён

  • Обработчик ввода Mouse wheel перемещён в input.mouseWheel. Изменённые свойства:

input.mouse.wheelDeltainput.mouseWheel.delta; — input.mouse.mouseWheelCallbackinput.mouseWheel.callback.

Старые свойства пока продолжают работать.

Обработчик колеса мыши использует input.mouseWheel.preventDefault, а не input.mouse.capture.

  • Обработчик ввода Pointer lock перемещён в input.pointerLock. Изменённые свойства:

input.mouse.pointerLockinput.pointerLock.onChange; — input.mouse.requestPointerLock()input.pointerLock.request(); — input.mouse.lockedinput.pointerLock.locked; — input.mouse.releasePointerLock()input.pointerLock.exit().

Старые свойства пока продолжают работать.

Существует новый сигнал input.pointerLock.onError, который отправляется при неудачном запросе.

Следует учитывать, что Chrome < 68 не передаёт значения движения при использовании Pointer Events с блокировкой указателя, поэтому для этого следует использовать обработчик Mouse.

  • game.debug.inputInfo() теперь показывает, какие обработчики ввода и указатели активны.

  • Все обработчики ввода имеют свойство active, которое показывает, были ли они запущены. Их методы start возвращают true, если они были запущены, и false в противном случае.

  • Аргумент skipFrames в AnimationParser#spriteSheet теперь работает как смещение (#514). Когда он положительный, это смещение от начала списка проанализированных кадров; когда отрицательный, это смещение от конца. Отрицательные аргументы frameWidth и frameHeight больше не допускаются.

  • Хуки preRender() и postRender() больше не вызываются для рендерера HEADLESS.

  • game.make.group() больше не назначает родителя по умолчанию. Это больше соответствует остальным методам game.make (#525). Вместо этого используйте game.add.group(), чтобы добавить группу в игровой мир.

  • Point.parse() больше не преобразует координаты в целые числа (#502). Используйте новый метод Point.trunc(), если вам нужно предыдущее поведение.

  • По умолчанию Debug#font равен '14px monospace'.

  • Неиспользуемое и устаревшее свойство... MSPointer#button был удалён.

Новые функции

  • У состояний появился новый метод-хук postUpdate. Он вызывается после того, как игровые объекты получили все свои обновления (включая физику), но до того, как этап рассчитал окончательные преобразования.
  • Debug#spriteInfo показывает родителя спрайта, если он есть.
  • Когда спрайт перетаскивают, вы можете прочитать его изменение положения (как deltaX, deltaY) в обработчике onDragUpdate.
  • Phaser.Math.trunc() усекает число.
  • Phaser.EmptyRectangle заменяет PIXI.EmptyRectangle.
  • Debug#device показывает поддержку графики, аудио и ввода устройства. Это может быть полезно на устройствах, где вы не можете легко увидеть вывод консоли.
  • Debug#pointer показывает значения движения X/движения Y указателя и состояния кнопок (для указателей мыши).
  • В конфигурации игры можно передать maxPointers, установив Input#maxPointers.

Обновления

  • Удалено ненужное предупреждение «Аудиоисточник уже существует».

Исправления ошибок

  • Маски больше не отключаются методом getBounds() и исключаются из расчётов границ (#334).
  • Методы bringToTop() и sendToBack() спрайтов теперь работают должным образом для всех типов родителей, а не только для групп (#549).

Благодарности

@giniwren, @griever989, @mindcity, @omretterry, @photonstorm, @samme, @Siri0n, @tobspr.

Версия 2.10.6 — 1 июня 2018 года

  • Воспроизведение звука исправлено при перезапуске приостановленного звука (#538).
  • Исправлены ошибки TypeScript и документации (#537, #540, #544, #545).

Благодарности

@bseiller, @GrindheadGames, @josalmi, @photonstorm, @qdrj, @samme, @Siri0n, @zhanghuanchong.

Версия 2.10.5 — 8 мая 2018 года

Исправление ошибок

  • Phaser мог не возобновить приостановленный контекст Web Audio, если курсор мыши покидал окно браузера перед тем, как щёлкнуть по игровому холсту (#437).

Версия 2.10.4 — 3 мая 2018 года

Новые функции

  • Phaser.Text#testString — это символьная строка, используемая для расчёта ширины и высоты текста.
  • Ellipse#centerX.
  • Ellipse#centerY.

Обновления

  • Обратные вызовы, добавленные с помощью Phaser.Input#addMoveCallback, получают параметр event.

Исправление ошибок

  • Исправлено фиктивное предупреждение при выборе слоя тайловой карты 0 (#511).
  • Исправлено неправильное положение в Ellipse#random (#522).
  • Анимация, пропускающая последний кадр в ситуациях с низким FPS, исправлена (#524).
  • Неправильное положение эллипса в Debug#geom исправлено (#526).
  • forceType теперь корректно переопределяет некоторые типы геометрии в Debug#geom.
  • Излишний текст больше не обновляется при использовании Text#setText с immediate=true (#525).
  • Проблемы с перезапуском звука в Firefox исправлены (#530).
  • Ошибка IndexSizeError в Edge/Firefox при использовании очень маленького прямоугольника обрезки текстуры исправлена (#532).

Определения TypeScript

  • Определения для ContactMaterial#frictionStiffness, Convex исправлены (#513).

Документация

  • Опечатки исправлены (#517, #521).
  • Методы Tilemap fill, random, replace, shuffle и swap изменяют только индекс плитки (#484).
  • Специальное значение GameConfig.transparent «notMultiplied» отключает атрибут контекста WebGL premultipliedAlpha.

Благодарность

@budda, @Hagisus, @HaoboZ, @hardylr, @intersrc, @jamesjsewell, @josalmi, @joshlory, @melissaelopez, @mickeyren, @photonstorm, @samme, @tobspr.

Версия 2.10.3 — 21 марта 2018 года

Исправление ошибок

  • Ошибка при активации приложения Cocoon исправлена (#506).

Благодарность

@KIVassilev, @photonstorm, @samme.

Версия 2.10.2 — 15 марта 2018 года

Новые функции

Вы можете установить... Версия 2.10.1 — 18 февраля 2018

Новые функции

  • Phaser.Sound#playOnce: помечает звук для удаления после однократного воспроизведения. Это простой способ избежать добавления новых объектов Sound для звуков, которые предназначены только для однократного проигрывания.
  • Выполняется финальный вызов State#loadUpdate непосредственно перед сбросом загрузчика, когда Loader#progress равен 100, а не после, когда Loader#progress равен 0 (#468).
  • Loader#onBeforeLoadComplete — это сигнал, который отправляется непосредственно перед сбросом Loader (в отличие от Loader#onLoadComplete).

Обновления

  • Уточнены аргументы margin и spacing в Phaser.Loader#spritesheet (#448).
  • Теперь Debug#text использует Debug#font по умолчанию.

Исправления ошибок

  • Исправлена ошибка, из-за которой аудиоспрайты не зацикливались после паузы и возобновления (#323).
  • Исправлены ошибки, из-за которых звуки не зацикливались при использовании аудиотегов (#446).
  • Исправлены ошибки с прилипанием круглых аркадных тел друг к другу во время некоторых столкновений (#451).
  • Исправлена ошибка, при которой спрайт с input.enabled, равным false, запускал свой сигнал onInputOut, когда мышь покидала игровой холст (#454).
  • Исправлена орфографическая ошибка в документации API (#458).
  • Исправлен ряд ошибок в определениях TypeScript (#442, #447, #455, #460, #462, #463, #469, #475).
  • Холст теперь корректно масштабируется внутри контейнера, если использовать относительные значения для ширины и высоты в конструкторе Phaser.Game (#467). Убедитесь, что вы задали контейнеру атрибут height.
  • Исправлена ошибка, когда State#loadUpdate вызывался один раз, когда активы не были загружены (#468).
  • Исправлена ошибка с Debug#spriteInfo, которая не показывала sprite.name, как было обещано (#471).

Благодарности

@bseiller, @dhashvir, @Lucas-C, @mmacvicar, @Nek-, @netdreamer, @omretterry, @pantoninho, @photonstorm, @samme, @seiyria, @squaresun, @Tembac, @wtravO.

Версия 2.10.0 — 18 января 2018

В запросе нет информации о содержании версии 2.10.0. Конфиг:

  • аргументы: alignH, alignV; crisp; disableStart; failIfMajorPerformanceCaveat; roundPixels; scaleH, scaleV, trimH, trimV.

Новые функции игрового цикла:

  • Phaser.Game#dropFrames пропускает рендеры, когда дельта времени игрового цикла увеличивается по спирали (#314).
  • Phaser.Game#forceSingleRender можно установить в false, чтобы уменьшить частоту рендеров до значения Phaser.Time#desiredFps (#313).
  • Phaser.Time#ups отслеживает обновления в секунду, когда включена расширенная синхронизация (advanced timing) (#313).
  • Phaser.Time#rps отслеживает рендеры в секунду, когда включена расширенная синхронизация (advanced timing).

Константы Phaser.Color: AQUA, BLACK, BLUE, GRAY, GREEN, ORANGE, RED, VIOLET, WHITE, YELLOW. Их можно использовать везде, где используется числовое (шестнадцатеричное) значение цвета: Graphics, Sprite#tint, Stage#backgroundColor.

Phaser.Game#pendingDestroy отмечает игру для уничтожения при следующем обновлении. Его можно безопасно использовать внутри обратного вызова обновления.

Phaser.Point#round округляет координаты точки.

Сигнал Phaser.SoundManager#onTouchUnlock (#434).

Phaser.SoundManager#removeAll уничтожает все звуки и удаляет их из менеджера.

Методы Phaser.Utils.Debug:

  • Debug#loader отображает прогресс загрузчика (loader).
  • Debug#scale отображает размеры игры/холста и состояние Scale Manager.
  • Debug#sound отображает состояние Sound Manager.

Phaser.Video#playWhenUnlocked.

Сигнал Phaser.Video#onTouchUnlock.

Обновления

Теперь Phaser возвращается к рендереру Canvas, если выбран AUTO и создание контекста WebGL не удаётся. Phaser.Device#webGL теперь является мягкой проверкой и не создаёт тестовый контекст WebGL. Это немного точнее (#402) и немного быстрее (#420). Phaser.Device#webGLError был удалён.

Ввод с геймпада теперь включён, пока игра приостановлена (#423).

Убрано сглаживание усиления для изменений громкости WebAudio (#385).

Обновлён ионный пример проекта (#381).

Удалены следующие устаревшие элементы (#403):

  • Phaser.ArrayUtils.rotate → Phaser.ArrayUtils.rotateLeft.
  • Phaser.Device.isConsoleOpen.
  • Phaser.Loader#useXDomainRequest → xhrLoadWithXDR.js.
  • Phaser.Loader#xhrLoadWithXDR → xhrLoadWithXDR.js.
  • Phaser.Particles#update.
  • Phaser.Polygon#points (как установщик) → Phaser.Polygon#setTo.
  • Phaser.Touch#addTouchLockCallback → Phaser.Input#addTouchLockCallback.
  • Phaser.Touch#removeTouchLockCallback → Phaser.Input#removeTouchLockCallback.
  • PIXI.BaseTexture#updateSourceImage → Phaser.Component.LoadTexture#loadTexture.
  • RevoluteConstraint#motorIsEnabled → RevoluteConstraint#motorEnabled.
  • Shape.RECTANGLE → Shape.BOX.

Исправлены ложные срабатывания в TweenManager#isTweening (#414). Изменение свойства smoothed у отображаемого объекта теперь помечает текстуру WebGL как грязную (#432, #433).

  • Исправлена ошибка, из-за которой Phaser.Sound временно имел неправильную настройку усиления при создании.
  • Исправлено, что спрайты не получали onInputOut, когда указатель покидал игровой холст (#429).
  • Исправлены некоторые определения TypeScript.

Спасибо

@ankush-badyal, @Dreaded-Gnu, @Mertank, @pavle-goloskokovic, @photonstorm, @qdrj, @samme, @squaresun

Версия 2.9.4 — 20 декабря 2017 года

Новые функции

Обновления

  • Тесты Phaser.Device для поддержки буфера трафарета WebGL (#402).

Исправления ошибок

  • Исправлен TypeError, возникающий при создании объекта Text без аргумента style (#415).

Спасибо

@bananatron, @mblais, @mepsoid, @naglfar, @photonstorm, @samme

Версия 2.9.3 — 11 декабря 2017 года

Новые функции

  • Phaser.BitmapData#polygon рисует многоугольник.

  • Phaser.Keyboard#removeCallbacks удаляет обратные вызовы, добавленные с помощью Phaser.Keyboard#addCallbacks.

  • Phaser.Line#fromPoints

  • Phaser.Loader#imageFromGrid и Phaser.Loader#imageFromTexture являются аналогами Phaser.Create#grid и Phaser.Create#texture для загрузки изображений.

  • Phaser.Point.sortClockwise сортирует точки вокруг опорной точки.

  • Phaser.Point#angleXY

  • Phaser.Point#atan вычисляет арктангенс точки.

  • Phaser.Point#expand увеличивает величину точки до минимальной длины.

  • Phaser.World#wrapAll оборачивает всех членов группы. Оптимизация и улучшения в Phaser 2.9.2 от 9 ноября 2017 года

  • Новые функции:

    • добавлен параметр adjustSize в Phaser.Tilemap#createFromObjects. Установка значения false отключает копирование ширины и высоты объекта в новый спрайт.
  • Обновления:

    • при использовании Web Audio (gain), изменения громкости и отключения звука сглаживаются (#385).
  • Исправления ошибок:

    • исправлена ошибка, из-за которой не отображалась последняя строка текста BitmapText, когда последний символ создавал необходимость в новой строке (при установке maxWidth).
    • исправлены грамматические ошибки в сообщении об ошибке, если StateManager предоставляется недопустимый объект состояния.
    • исправлено некорректное поведение Button#forceOut и Button#justReleasedPreventsOver на сенсорных устройствах. Теперь используется правильный Phaser.PointerMode#CONTACT вместо неопределённого Phaser.PointerMode.TOUCH (#392).
    • устранена проблема, при которой мёртвые физические объекты не уничтожались с помощью pendingDestroy (#399).
  • Документация:

    • canvas, canvasId, canvasStyle и forceSetTimeOut можно установить в объекте конфигурации игры.
  • Спасибо: @clesquir, @GrindheadGames, @husengbatute29, @Nek-, @photonstorm, @samme.

Новые функции и исправления ошибок в версии 2.9.1 от 10 октября 2017 года:

  • Исправлена проблема с Phaser.Tilemap#setTileIndexCallback, теперь корректно удаляет обратный вызов при передаче null.

  • Исправлено некорректное подсчитывание Emitter#counts.

  • Исправлены отсутствующие возвращаемые значения TypeScript (#382).

  • Благодарности: @masondesu, @pavle-goloskokovic, @photonstorm, @samme. Версия 2.9.0 — 8 октября 2017 г.

Незначительное увеличение версии связано с изменениями в Emitter#cursor (https://photonstorm.github.io/phaser-ce/Phaser.Particles.Arcade.Emitter.html#cursor).

Новые функции

  • Полигоны и прямоугольники, созданные с помощью Tiled, теперь преобразуются в физические тела p2 при использовании Phaser.Physics.P2#convertCollisionObjects (#369).

  • Объекты столкновения уровня тайлсета, созданные в Tiled, теперь добавляются к свойствам collision и objects карты с использованием имени слоя в качестве ключа (#369).

  • Phaser.ArrayUtils.numberArray может быть передан один аргумент для создания диапазона, начинающегося с 0.

  • Phaser.ArrayUtils.remove является более быстрой альтернативой Array#splice.

  • Phaser.Camera#fixedView похож на Phaser.Camera#view, но он никогда не перемещается. Вы можете использовать его для выравнивания объектов независимо от положения камеры.

  • Phaser.CanvasPool.log выводит количество пулов холста в консоль.

  • Phaser.Circle#intersectsLine.

  • Phaser.Circle#sample создаёт или позиционирует набор точек или объектов на окружности.

  • Phaser.Color.interpolateColor может использовать цветовые пространства HSL или RGB.

  • Phaser.Color.linear интерполирует два числовых значения цвета.

  • Phaser.Color.linearInterpolation интерполирует массив числовых значений цвета. Вы можете назначить его TweenData#interpolationFunction для анимации через такой массив.

  • Phaser.Ellipse#intersectsLine.

  • Phaser.Group#count подсчитывает дочерние элементы, соответствующие запросу ключ-значение.

  • Phaser.Group#createMultiple теперь имеет аргумент обратного вызова, который позволяет вам изменять каждого нового потомка.

  • Phaser.Group#getFirst извлекает первого потомка, соответствующего запросу ключ-значение.

  • Phaser.Group#kill и Phaser.Group#revive переключают свойства Group alive, exists и visible (#339).

  • Phaser.Line#intersectionWithRectangle находит ближайшее пересечение линии и прямоугольника (#260). Вы можете использовать это для точного рейкастинга.

  • Phaser.Physics.Arcade#closest находит точку или отображаемый объект, ближайший к другому.

  • Phaser.Physics.Arcade#farthest находит точку или отображаемый объект, наиболее удалённый от другого.

  • Phaser.Point#clip ограничивает точку прямоугольной областью.

  • Phaser.Point#equalsXY.

  • Phaser.Point#fuzzyEquals и... Phaser.Point#fuzzyEqualsXY проверяет приблизительное равенство точек.

  • Phaser.Rectangle#copyFromBounds, Phaser.Rectangle.createFromBounds — это вариации методов copyFrom и clone, которые извлекают свойства left и top вместо x и y.

  • Метод Phaser.Rectangle#sides создаёт или позиционирует четыре линии, представляющие стороны прямоугольника.

  • Phaser.ScaleManager#align — это ярлык для установки pageAlignHorizontally и pageAlignVertically.

  • Phaser.Tween.updateColor — помощник для анимации объектов цвета.

  • Phaser.Utils.Debug#canvasPool отображает подсчёт пулов холста.

  • Phaser.Utils.Debug#geom может отображать эллипсы.

  • Phaser.Utils.Debug#phaser отображает версию Phaser, режим рендеринга и поддержку аудиоустройства.

  • Phaser.Utils.Debug#physicsGroup отображает все физические тела в группе.

  • Phaser.Utils.setProperties — установщик свойств на глубоком уровне, который работает с любым объектом.

Обновления

  • Выпуск эмиттера частиц стал более эффективным (#333).

  • Вы можете получить доступ к последней испущенной частице через Emitter#cursor. После запуска эмиттера следует рассматривать Emitter#cursor как доступный только для чтения, поскольку Phaser будет изменять его во время испускания частиц.

Исправления ошибок

  • Исправлены некоторые определения TypeScript (#374).

  • Phaser.Tilemap#createFromObjects больше не переопределяет значение свойства видимости, установленное в Tiled.

  • Исправлено и оптимизировано Phaser.Utils.setProperty.

Документация

  • Добавлены недостающие аргументы в методах Phaser.State.

  • Для появления Phaser.Stage#backgroundColor необходимо установить Phaser.Game#clearBeforeRender в значение true (#377).

  • Можно напрямую установить Phaser.Stage#backgroundColor и Phaser.Stage#disableVisibilityChange в объекте конфигурации Phaser.Game.

Благодарности

@cursorial, @HeinousTugboat, @masondesu, @photonstorm, @samme, @samid737.

Версия 2.8.8 — 25 сентября 2017 года

Обновления

  • Переименован метод Emitter#count в Emitter#counts. Emitter#count устарел и будет удалён в версии v2.9.0.

  • Удалён устаревший метод Phaser.Events#onRemovedFromWorld.

Исправление ошибок

Версия 2.8.6 — 10 сентября 2017

Версия 2.8.5 — 30 августа 2017

Документация

Благодарности

@Dreaded-Gnu, @goldfire, @photonstorm, @rafelsanso, @ryanrossiter, @samme, @Zykino

Версия 2.8.4 — 15 августа 2017 года

Обновления

  • Arcade#collide и Arcade#overlap пропускают пустые элементы массива в вызовах типа collide(group, [undefined]), поэтому вы не столкнёте группу с самой собой непреднамеренно.
  • Добавлен аргумент epsilon для неточных сравнений в Phaser.Line#pointOnLine и Phaser.Line#pointOnSegment (#312).
  • Убраны устаревшие определения TypeScript PIXI.
  • Удалены фильтры/pixi. Они требуют PIXI.AbstractFilter, который был удалён в версии 2.7.0.
  • Обновлены зависимости NPM (кроме typescript; photonstorm/phaser#2198) и добавлен package-lock.json.
  • Устаревший Phaser.Device.isConsoleOpen. Теперь он всегда возвращает false.
  • Phaser.Input теперь обрабатывает разблокировку касания через Phaser.Touch или Phaser.MSPointer. Phaser.Touch#addTouchLockCallback и Phaser.Touch#removeTouchLockCallback всё ещё доступны, но устарели; вместо них следует использовать Phaser.Input#addTouchLockCallback и Phaser.Input.#removeTouchLockCallback (#37).

Исправления ошибок

  • Улучшена синхронизация анимации при нерегулярной частоте кадров (#310).
  • Исправлена плохая ссылка на игру в Phaser.Creature.
  • Исправлены неправильные размеры Debug#canvas и Debug#sprite, когда игра WEBGL масштабируется (#298).
  • TileSprite#tint теперь работает при рендеринге с CANVAS.
  • Исправлено, что спрайты не получают preUpdate, когда у них есть предок fresh с физическим телом, что оставит их свежими и с неверными значениями world и body.position в течение нескольких кадров (#299).
  • Исправлено движение спрайтов с fixedToCamera, когда они перетаскиваются указателем (#297).
  • Фиксированные точки привязки существ относительно абсолютных (#288).
  • Неподвижное P2 физическое тело не вращает фигуру (#258).
  • Аудио теперь также разблокировано для Android Chrome ≥ 55, исправлено, что аудио не воспроизводится во фреймах с разными источниками (#37).
  • Некоторые определения TypeScript исправлены (#317, #319).

Документация

cacheAsBitmap и generateTexture могут обрезать прозрачные пиксели (#283).

Перевод текста на русский язык:

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

  • Исправлено: Debug#spriteBounds использует Debug#lineWidth.
  • Исправлена ошибка в PIXI.CanvasRenderer#renderSession.roundPixels, которая была ошибочно названа roundPx в Debug#renderer. (roundPx — это свойство камеры.)
  • Исправлены некоторые определения TypeScript (#174, #270, #274, #277).
  • Отладочный холст возвращается в пул холстов при уничтожении игры (#269).

Благодарности bulgakovk, cmd-johnson, dolanmiu, georgesboris, johnbuttcoingalt, mindcity, photonstorm, samme.

Версия 2.8.1 — 20 июня 2017 года

Новые функции

  • Debug#camera показывает камеру follow target и deadzone.
  • Debug#renderer выводит некоторые полезные свойства игрового рендерера. В режиме WebGL это включает количество отрисовки, предел пространства текстуры и размер пакета текстуры.
  • Point#setToPolar размещает точку из полярных координат (угол и расстояние). Вы можете использовать его для установки скорости или ускорения (например, velocity.setToPolar(angle, speed)), как это делают многие помощники Arcade Physics.
  • Arcade.Body#blocked.none описывает, заблокирован ли объект на каком-либо краю. blocked и touching теперь имеют одинаковые ключи.
  • Arcade.Body#stop останавливает всё движение.
  • Emitter#count записывает некоторые диагностические величины: count.emitted, count.failed, count.totalEmitted, count.totalFailed.
  • Group#shuffle упорядочивает детей случайным образом.
  • PIXI.Sprite.defaultAnchor содержит начальные значения привязки для новых спрайтов (по умолчанию: x=0, y=0).
  • Phaser.Math.HALF_PI равен π / 2.

Обновления

  • Добавлен PIXI.canUseNewCanvasBlendModes для поддержки Particle Storm Plugin (photonstorm/phaser#2909). Он эквивалентен Phaser.Device.canUseMultiply.
  • Теперь Debug#cameraInfo отображает цель следования (target), roundPx, atLimit и deadzone.
  • Теперь Debug#isDisabled определяется в двух дополнительных случаях: true, когда новая игра создаётся с enableDebug: false; и false в противном случае. Как и прежде, это true, если Phaser собран без класса Debug.
  • ScaleManager#forceOrientation выдаёт предупреждение, если вы пытаетесь принудительно установить обе ориентации.
  • WebGLRenderer#setTexturePriority выдаёт предупреждение, когда maxTextureAvailableSpace исчерпан.
  • Документирована недокументированная функция Phaser.Signal: возврат false из обратного вызова останавливает распространение сигнала, как и Signal#halt (#243).

Исправления ошибок

  • Исправлено... Версия 2.7.7 — 20 апреля 2017

  • Добавлены:

    • Phaser.Creature#setAnimation.
    • Phaser.Creature#setAnimationPlaySpeed.
    • Phaser.Creature.html#height и Phaser.Creature#width. Можно задать эти размеры напрямую, а не с помощью scale.
    • Phaser.Creature#setAnchorPointEnabled, Phaser.Creature#anchorX и Phaser.Creature#anchorY для динамической установки точки привязки Creature (всё ещё экспериментально).
  • Обновления:

    • Удалён верхний предел в 12 для Phaser.Loader#maxParallelDownloads. Значение по умолчанию всё ещё равно 4. Большинство браузеров ограничивают параллельные соединения до 6 на домен. Старые браузеры IE и Android могут испытывать проблемы со значением выше 4 (#170).
    • Тела Arcade Physics больше не получают обновления углового движения, когда у них отключено allowRotation, так как в этом не было необходимости.
    • Phaser.Text#align теперь можно установить в любом случае или сочетании случаев (например, «left», «Left», «LEFT»).
    • API Phaser CE теперь показывает синопсис, как документы Phaser 2.6. Вы всё ещё можете найти полный README на GitHub.
    • Обновлены документы ScaleManager.
    • Уточнён аргумент gid в Phaser.Tilemap#createFromObjects. Он может представлять gid, id или name объекта.
    • Уточнено использование компонента Animation в Phaser.Image (#185). Изображения можно анимировать так же, как и спрайты.
  • Исправления ошибок:

    • Исправлена проблема, из-за которой спрайты, использующие одну и ту же текстуру, искажались или скрывались при применении WebGLFilter (#39, #153, #154).
    • Исправлена ошибка «memory exhausted» в PIXI.PixiFastShader при компиляции шейдеров с включённой multiTexture.
    • Исправлен TypeError в PIXI.WebGLGraphics при попытке рендеринга графического объекта с отсутствующим контекстом WebGL (#178).
    • Исправлена ReferenceError в PIXI.WebGLRenderer при запуске Phaser в строгом режиме ES5.
    • Некоторые определения TypeScript были исправлены (#167).
    • Теперь Phaser правильно устанавливает точку привязки существа (как установлено в редакторе существ) при загрузке меша существа.
    • Исправлено падение CreatureManager#CreateAllAnimations в Chrome.

Благодарности:

@aaronransley, @andrewjb123, @Cryt1c, @goldfire, @gre, @LandonSchropp, @NickH-nz, @noseglid, @photonstorm, @samme, @tanquetav, @vantreeseba, @vpmedia, @Xan0C.

  • Исправлены ошибки:

    • Решена проблема с невозможностью загрузки сжатых текстур при использовании URL-адресов с запросами строк (#166).
    • Некоторые определения TypeScript были исправлены (№168).
    • Исправлены отсутствующие значения по умолчанию для разрешения в методах BitmapFont Phaser.LoaderParser (#168).
    • Твиновые частицы autoAlpha и autoScale работают с удвоенной скоростью (#160).
    • Загрузка сжатых текстур была исправлена (#17, #162).
    • Удалён ключ any в Phaser.Physics.Arcade.Body#checkCollision. Он никогда не использовался, поэтому его установка не имела никакого эффекта (#161). Вместо этого используйте !checkCollision.none.
    • И другие исправления. Phaser.Sound исключение при использовании IE с AudioTag и высокими значениями громкости (#157). Теперь громкость ограничивается значениями от 0 до 1 в любом браузере при использовании AudioTags.
  • Исправлен неправильный расчёт worldScale (#15).

Спасибо

@fridrisnew, @goldfire, @hdodov, @Peter42, @photonstorm, @samme, @SBCGames, @vpmedia

Версия 2.7.6 — 13 апреля 2017 года

Новые функции

  • Новый метод Phaser.Loader#imageFromBitmapData позволяет предварительно загрузить изображение, извлечённое из холста BitmapData.
  • BitmapData#generateTexture теперь имеет необязательный аргумент обратного вызова. Большинство браузеров теперь загружают сгенерированное изображение асинхронно, поэтому без обратного вызова вы не гарантируете получение действительной текстуры (#136).
  • Phaser.GameObjectFactory#weapon (используется как game.add.weapon) теперь имеет аргумент bulletClass. Без него было сложно установить bulletClass перед созданием пула пуль.

Обновления

  • Phaser.Cache#addImage теперь выдаёт предупреждение, если вы добавляете изображение, которое не завершило загрузку.
  • Phaser.Frame теперь выдаёт предупреждение, если фрейм создан с нулевой шириной или высотой.
  • Phaser.Physics.Arcade#velocityFromAngle теперь использует Phaser.Math вместо game.math, так что вы можете использовать его без ссылки на запущенную игру (#131).
  • Уточнена документация Emitter#start. На самом деле проще использовать Emitter#explode или Emitter#flow.
  • Стиль курсора игрового холста теперь pointer, когда курсор находится над объектом с включённым input.useHandCursor, и пустой во всех остальных случаях. Это должно упростить настройку собственного стиля курсора для игры (#110).
  • Исправления и обновления определений TypeScript (#75, #101, #107).
  • Исправлены опечатки в документации (#101).
  • Добавлен photonstorm/phaser-plugins в документацию Phaser CE: см. Phaser.Plugin (#107).
  • Объекты BitmapData и RenderTexture теперь уничтожаются при очистке кэша (#68). Это должно снизить использование памяти.

Исправление ошибок

  • Устранена проблема, из-за которой вызов preUpdate объекта отображения пропускался, если родственный объект был удалён или уничтожен, что могло привести к небольшим расхождениям в позиции, продолжительности жизни или renderOrderID (#103).

  • Устранена проблема, из-за которой объекты отображения, использующие текстуру по умолчанию, могли иметь неправильный размер (1×1) и отображаться пустыми (#138). Встроенные текстуры DEFAULT и MISSING теперь загружаются асинхронно, чтобы гарантировать их достоверность.

  • Устранена проблема, из-за которой game.device.canUseMultiply могла давать ложный отрицательный результат при первой (Firefox, Safari) или даже последующих (Chrome 57) загрузках страницы, отключая большинство режимов наложения при использовании Canvas рендерера (#130).

  • Phaser.Keyboard#lastChar теперь равен null, если Phaser ещё не зарегистрировал нажатия клавиш. Чтение его перед нажатием клавиши больше не вызывает ошибки (#132).

  • Ранее центр движущегося тела Arcade Physics был неточным во время фазы обновления игры, что делало проверку столкновений круглых тел менее точной (#122). Это было исправлено путём обновления центра во время preUpdate.

  • Устранено... Выпуск с исправлением проблемы при перетаскивании спрайта, родитель которого масштабирован или повёрнут (#108). Теперь спрайт следует за курсором правильно.

  • Исправлен пропуск аудио при перезапуске воспроизведения (#78).

  • Исправлено некорректное отображение нескольких тонированных объектов BitmapText (#58).

  • Исправлена ошибка, из-за которой Object.assign не существовал на старых устройствах (#81).

  • Ранее рендер HEADLESS после загрузки фактически становился рендером CANVAS, что было неверно (#74). Phaser.HEADLESS теперь устанавливает PIXI.CanvasRenderer и отдельный (невидимый) холст. Пропускаются хуки render, но не preRender и postRender (странно). game.renderType теперь содержит либо Phaser.CANVAS, Phaser.HEADLESS, либо Phaser.WEBGL после загрузки.

Благодарности

@alexus85, @Arcanorum, @digitsensitive, @Dreaded-Gnu, @hdodov, @IVA-apps, @JTronLabs, @Lightning3105, @mikewesthad, @nalgorry, @photonstorm, @qarlosh, @samme, @trpzn, @vpmedia

Версия 2.7.5 — 23 марта 2017 года

  • Горячее исправление ошибки this.preUpdateLifeSpan is not a function в версии 2.7.4 (#72).

Версия 2.7.4 — 23 марта 2017 года

Новые функции

  • Новый метод Phaser.Math.hypot() вычисляет длину гипотенузы, охватывающей две заданные длины.
  • Добавлен Phaser.BitmapData#copyBitmapData.
  • В src/input/Pointer.js добавлена логика noPause.
  • В state.pauseUpdate в src/core/Game.js добавлен параметр timeStep.
  • Добавлен параметр Phaser.TilemapLayer#tileOffset (Phaser.Point). Это позволяет смещать позиции слоёв таким образом, чтобы они хорошо сочетались с камерой и физикой Arcade. Кроме того, свойства offsetx и offsety теперь считываются из свойств слоя карт Tiled.

Обновления

  • Изменён Phaser.Loader#loadImageTag для исключения Firefox из загрузки кэшированных изображений (phaser #2534).
  • Добавлен файл yarn lock.
  • Добавлен скрипт сборки travis-ci.
  • Исправлены определения типов Phaser.Plugin.AStar и phaser-ce модуля, чтобы снова заработал grunt tsdocs (#33).
  • Исправлены определения типов Phaser.Plugin.AStar.DISTANCE_MANHATTAN.
  • Изменено название пакета bower на phaser-ce.
  • Phaser.Particles.Arcade.Emitter#explode() теперь запускает все частицы, если аргумент quantity опущен (#7). Вы должны передать количество 0, если хотите запустить ни одной частицы.
  • overlapR, overlapX и overlapY теперь корректно сбрасываются до 0, когда тело Arcade Physics не сталкивается (#23).
  • Phaser.Physics.P2.Body.loadPolygon() теперь имеет параметр scale, который позволяет загруженному многоугольнику иметь другой масштаб.
  • Исправлена документация Phaser.Video#createVideoFromBlob.
  • Уточнена документация Phaser.AnimationManager#updateIfVisible.
  • Обновлён Phaser.Text#setStyle, чтобы не изменять переданный стиль.
  • Добавлен параметр particleArguments в Phaser.Particles.Arcade.Emitter#makeParticles. Он позволяет передавать пользовательские параметры классу частиц.
  • Исправлены проблемы jshint (#46).
  • Обновлены README и CHANGELOG в формате markdown (#69).

Исправления ошибок

  • Phaser.Image#lifespan теперь работает правильно (#46). Фазер. Физикс. Аркада. Боди. ресет() теперь изменяет размер тела, если масштаб спрайта изменился (#10).

  • Исправлена работа Фазер. Камера. чекбаундс(), чтобы она не мерцала, когда её вид больше границ.

  • Восстановлена работа функций Фазер. Матх#бетвен и Фазер. Матх#рандом.

  • Фазер. Лоадер теперь сбрасывается непосредственно перед тем, как сигнализирует о завершении загрузки (#53).

  • Исправлено рендеринг на устройствах, использующих старые версии JavaScript.

  • Устранены сбои на очень старых устройствах.

  • Исправлена ошибка при уничтожении спрайта во время Фазер. Груп#апдейт.

  • Отслеживание локального вращения в Фазер. Вэпон#файр восстановлено (#66).

  • В Фазер. Саунд устранена утечка памяти WebAudio.

Обновления Pixi

  • Исправлен неправильный параметр ПИКСИ. ДисплейОбджект#_генерэтеКашедСпрайт.

Версия 2.7.3 — 9 января 2017 года

  • Заменён отсутствующий файл jshintrc (#2912).

  • Добавлен аргумент tempPoint / undefined блок в Graphics.содержитПоинт.

  • Исправлена условная проверка Text.сетЧарэктери Лимит.

  • Добавлен аргумент разрешения в LoaderParser.джсонБмтФонт.

  • Определения TypeScript для Phaser. Плагин. АСтар приведены в соответствие с исходным кодом плагина.

Версия 2.7.2 — 6 декабря 2016 года

Новые функции

  • Добавлена функция: установка ограничения символов с суффиксом.

Обновления

  • Уточнение единиц времени в Phaser. Саунд.

  • Уточнено поведение group.exists.

  • Уточнена семантика fixedToCamera.

  • Изменён Emitter.гравити с числа на Phaser. Поинт.

  • Решена проблема, из-за которой tsc иногда выдавал ошибки при определённых обстоятельствах.

Исправления ошибок

  • Теперь кнопки геймпада работают правильно при частичном нажатии и отпускании.

  • Phaser. Лайн. интерсекстРектэнгле() теперь работает правильно для горизонтальных и вертикальных линий (#2942).

  • Функция removeTextureAtlas теперь удаляет правильный объект кэша.

Версия 2.7.1 — 28 ноября 2016 года

Обновления

  • Добавлен третий необязательный параметр в PIXI. БазэТекстур, позволяющий масштабировать текстуры в соответствии с devicePixelRatio (спасибо @cloakedninjas).

  • Исправлены определения TypeScript и обновления (спасибо @Aleksey-Danchin).

Исправление ошибок

  • Phaser. АниматионПарсер. спрайтШит() теперь работает должным образом (спасибо @stoneman1, @qarlosh).

  • EarCut не был включён в сборку из-за неправильного пути в задачах grunt. Теперь он должен работать (спасибо @stoneman1).

  • Некоторые браузеры используют CancelRequestAnimationFrame вместо CancelAnimationFrame, и теперь это исправлено (спасибо @stoneman1).

Версия 2.7.0 — «Конец света» — 22 ноября 2016 года

Теперь Фазер 2.7 выпущен сообществу для поддержки. Дополнительную информацию см. в файле README.

Новые функции

  • Доступна поддержка нескольких текстур в пакетном режиме. Это функция WebGL, которая может значительно уменьшить количество вызовов отрисовки в сложных играх или играх с большим количеством ресурсов. Чтобы включить его, вы можете использовать новый тип рендерера Phaser. WEBGL_MULTI или передать свойство multiTexture: true в конфигурационном объекте Phaser. Гейм. После включения его нельзя отключить.

  • game.рендерер. сетТекстурПриорити — это метод, который используется вместе с поддержкой нескольких текстур. Он принимает массив в качестве единственного аргумента. Массив состоит из строк ключей изображений Phaser. Кэш. Затем Phaser попытается объединить как можно больше текстур, в зависимости от ограничений оборудования. Например, если графический процессор может объединять только 8 текстур, а вы предоставляете массив из 16, то будут объединены только первые 8 в массиве.

  • Фазер теперь поддерживает сжатые текстуры под WebGL. Он будет обрабатывать загрузку форматов текстур PVRTC, DDS, ETC1, KTX и PKM и поддерживает форматы сжатия PVRTC, S3TC и ETC1 с резервным вариантом TrueColor для стандартных PNG. Сжатые текстуры позволяют графическому процессору (GPU) декодировать и получать доступ к данным текстур гораздо быстрее, чем традиционные схемы сжатия изображений, такие как JPEG. Устройства iOS особенно выигрывают от использования сжатия текстур PowerVR (PVRTC). Полученные текстуры занимают меньше памяти, чем их традиционные аналоги, а когда речь идёт об iOS, каждый бит памяти имеет значение! Подробнее см. в новом методе Loader.texture. Вы также можете передать объект файла в Loader.image, подробности см. в документации.

  • Поддержка повёрнутых фреймов в атласах текстур теперь включена для WebGL и Canvas. Если вы используете программное обеспечение, такое как Texture Packer, теперь вы можете включить флажок «Разрешить поворот», что часто помогает получить меньшие или более компактные атласы. В результате используются свойства Texture.rotated и Frame.rotated.

  • Frame.rotationDirection был удалён. Он не нужен, так как современные упаковщики текстур всё равно вращают только на 90 градусов по часовой стрелке, а Phaser поддерживает только это направление вращения.

  • Weapon.multiFire — это новое свойство, которое позволяет вам установить Оружие как разрешённое вызывать огонь столько раз, сколько захотите, за игровой цикл. Это позволяет одному экземпляру Оружия выпускать несколько пуль.

  • У Weapon.fire есть два новых аргумента: offsetX и offsetY. Если пуля выпущена из отслеживаемого Sprite или Pointer или установлен аргумент from, это применяет горизонтальное и вертикальное смещение от позиции запуска.

  • Weapon.fireOffset пытается выстрелить одной пулей из отслеживаемого Sprite или Pointer, но сначала применяет смещение к позиции. Это более короткая форма вызова Weapon.fire и передачи аргументов смещения.

  • Weapon.fireMany пытается выстрелить несколькими пулями из позиций, определённых в данном массиве. Если вы предоставите аргумент from или если есть отслеживаемый Sprite или Pointer, то позиции рассматриваются как смещения от положения данных объектов. Если from не определено и нет отслеживаемого объекта, то пули выпускаются из заданных позиций, как они существуют в мире.

  • При загрузке листа спрайтов теперь можно указать количество кадров для пропуска, поскольку кадры извлекаются из листа и преобразуются во фреймы (спасибо @arefiev #2763).

  • Math.random возвращает случайное число с плавающей запятой в заданном диапазоне (спасибо @JTronLabs #2760).

  • Text.splitRegExp — это новое свойство, позволяющее вам контролировать регулярное выражение, используемое для разделения текста на несколько строк (спасибо @dai-shi #1403).

  • Cache.addBitmapFontFromAtlas позволяет добавить растровый шрифт в кэш, который состоит из фрейма из атласа текстур и данных шрифта (в формате JSON или XML). После добавления вы можете использовать растровый шрифт так же, как и любой другой растровый шрифт (#2614).

Обновления

  • Исправления и обновления определений TypeScript (спасибо @chriteixeira @StealthC @Lopdo @nickdbush).

  • Исправлены опечатки в документации (спасибо @JTronLabs @samme @jorgesumle).

  • Phaser.Line.fromSprite теперь использует свойства Sprite.centerX и centerY, если аргумент useCenter истинен. Раньше требовалось, чтобы вы переопределили Sprite и добавили свойство самостоятельно (спасибо @samme #2729).

  • Обновлён код проверки указателя в классе Device, чтобы избавиться от сообщения «Navigator.pointerEnabled — это нестандартный API, добавленный только для экспериментов. Он будет удалён в ближайшее время». в Chrome.

  • Библиотека физики P2 была обновлена до версии 0.7.1. Она всё ещё довольно устарела, но как только они выпустят свою последнюю сборку (надеюсь, скоро), мы обновим её.

  • Math.between был усилен, а документация улучшена (спасибо @JTronLabs #2760).

  • Camera.fade имеет новый аргумент alpha для управления уровнем альфа эффекта (спасибо @rgk #2493).

  • Камера.flash имеет новый аргумент alpha для контроля уровня альфа эффекта (спасибо @rgk #2493).

  • Phaser.SpriteBatch неправильно применял прототипы, в результате чего методы рендеринга Sprite Batch заменялись обычными методами DisplayObjectContainer, что означало, что на самом деле ничего не было пакетировано. Теперь это исправлено, и PIXI.SpriteBatch удалён, так как он больше не требуется. PIXI.RenderTexture был удалён, а вся функциональность объединена с Phaser.RenderTexture, чтобы уменьшить количество внутренних классов и наследования.

  • PIXI.TilingSprite был удалён, а вся его функциональность объединена с Phaser.TileSprite, чтобы сократить количество внутренних классов и наследование.

  • PIXI.CanvasPool перемещён в папку Phaser utils и переименован в Phaser.CanvasPool. Все ссылки на PIXI.CanvasPool были обновлены, чтобы соответствовать новому пространству имён.

  • PIXI.EarCut перемещён в папку Phaser utils и переименован в Phaser.EarCut. Все ссылки на PIXI.EarCut были обновлены, чтобы соответствовать новому пространству имён.

  • Появилось новое логическое свойство Device.canHandleAlpha, которое хранит информацию о том, способен ли браузер к тонированию с альфа-каналом.

  • Новое логическое свойство Device.canUseMultiply хранит информацию о поддержке Canvas BlendModes и, следовательно, о возможности тонирования методом умножения.

  • Метод Math.getNextPowerOfTwo получает следующую степень двойки для заданного значения.

  • Метод Math.isPowerOfTwo возвращает логическое значение, если заданные ширина и высота являются степенью двойки.

  • Метод Color.hexToRGBArray преобразует шестнадцатеричное значение цвета в массив [R, G, B].

  • Метод Color.RGBArrayToHex преобразует массив цветов RGB в формате: [R, G, B] в шестнадцатеричное значение цвета.

  • Класс PIXI.AbstractFilter был объединён с классом Phaser.Filter. Все ссылки на PIXI.AbstractFilter были обновлены для использования Phaser.Filter вместо него.

  • Классы PIXI.Rope и PIXI.Strip были удалены, а их функциональность объединена в класс Phaser.Rope, чтобы уменьшить количество внутренних классов и наследований.

  • Классы PIXI.Graphics и PIXI.GraphicsData были удалены и объединены в класс Phaser.Graphics, чтобы уменьшить количество внутренних классов и наследований.

  • В классах WebGLGraphics и CanvasGraphics было обновлено внутреннее содержимое, чтобы проверять типы фигур Phaser Geometry.

  • Значение PIXI.PI_2 было удалено, поскольку оно доступно через Phaser.Math.PI2. Единственное место, где использовалось значение PI_2, было обновлено для использования значения PI2.

  • Файл polyfills.js теперь заполняет Float32Array, Uint16Array и ArrayBuffer.

  • Значения PIXI.Float32Array, PIXI.Uint16Array, PIXI.Uint32Array и PIXI.ArrayBuffer были удалены и заменены собственными версиями. Полифилл теперь фиксирует любые случаи, когда браузеру необходимо вернуться к массиву.

Исправления ошибок

  • Функция DisplayObjectContainer.removeChildren неправильно использовала переменную begin вместо beginIndex (спасибо @alex-espinoza #2742 #2741).

  • Камера.fx проверяется на наличие перед сбросом (спасибо @samme #2739 #2738).

  • Плагин оружия больше не будет аварийно завершать работу, если пули оружия ещё не были инициализированы перед установкой нового класса пуль (спасибо @JTronLabs #2731).

  • Группы с установленным параметром fixedToCamera теперь учитывают масштаб камеры (спасибо @kevinAlbs #2771).

  • Методы Text.width и Text.height теперь делят результат на разрешение Text, чтобы избежать неправильных размеров на устройствах с высоким разрешением (спасибо @mattahj #2146).

  • Если вы вызывали метод Video.changeSource, а затем сразу же вызывали Video.play после него, он дважды запускал событие onComplete (спасибо @jaraiza #2543).

  • Свойство Video.playing не проверяло, существует ли видео, и выдавало ошибку Uncaught TypeError: Cannot read property 'paused' of null, если вы вызывали его после уничтожения видео (спасибо @Tetley #2740).

  • Исправлена ошибка в классе DisplayObject, который использовал PI_2 вместо PI2.

Обновления Pixi

Обратите внимание, что Phaser использует собственную сборку Pixi и всегда делал это. В нашу собственную сборку были внесены следующие изменения, но не в Pixi в целом.

  • Рендерер WebGL и шейдеры обновлены для поддержки пакетной обработки нескольких текстур (см. основные документы выше).
  • Теперь WebGL и Canvas поддерживают повернутые кадры атласа текстур.
  • Добавлена поддержка сжатых форматов текстур в WebGL.
  • Класс PIXI.SpriteBatch был удалён, так как больше не используется внутри.
  • PIXI.RenderTexture и PIXI.TileSprite были удалены, так как они больше не используются внутри. Версия 2.6.2 — «Kore Springs» — 26 августа 2016

Новые функции

  • Функция Group.getRandomExists будет возвращать случайного потомка из группы, для которого установлено значение exists = true.
  • Функция Group.getAll будет возвращать всех потомков в группе или часть группы с дополнительной возможностью проверить, имеет ли потомок свойство, соответствующее заданному значению.
  • В функции Group.iterate появился новый параметр returnType: RETURN_ALL. Это позволяет вернуть всех детей, которые проходят тест итерации, в виде массива.
  • Свойство checkCollision.none в классе ArcadePhysics.Body было доступно, но никогда не использовалось внутри. Теперь оно используется и проверяется методом separate. Установив checkCollision.none = true, вы можете отключить все проверки столкновений и перекрытий для тела, но при этом сохранить обновления его движения (спасибо @samme #2661).
  • Math.rotateToAngle принимает два угла (в радианах) и значение интерполяции и возвращает новый угол на основе кратчайшего расстояния вращения между ними.
  • Math.getShortestAngle вернёт кратчайший угол между двумя заданными углами. Углы находятся в диапазоне от -180 до 180, который использует Sprite.angle. Таким образом, можно передать этому методу два угла спрайта и получить кратчайший угол между ними (#2494).

Обновления

  • Исправлены и обновлены определения типов TypeScript (спасибо @calvindavis @AlvaroBarua).

  • Исправления опечаток в документации (спасибо @rroylance @Owumaro @boniatillo-com @samme @kjav).

  • Удалено свойство InputHandler.flagged. Оно никогда не использовалось внутренне или через API, поэтому было лишним.

  • Папка src/system удалена, а все файлы перемещены в папку src/utils. С точки зрения API это ничего не меняет, но немного изменило сценарии сборки grunt.

  • BitmapData.shadow и BitmapData.text теперь возвращают this, что соответствует документации (спасибо @greeny #2634).

  • Аргументы функции Group.align изменены так, что теперь это (ширина, высота, ...), а не (строки, столбцы, ...).

  • Теперь функция Group.align возвращает true, если группа была выровнена, или false, если нет.

  • Объект Loader.headers имеет новое свойство requestedWith. По умолчанию оно установлено в false, но может использоваться для установки заголовка X-Requested-With в XMLHttpRequest (или любое другое нужное вам значение). Чтобы включить это, выполните this.load.headers.requestedWith = 'XMLHttpRequest' перед добавлением чего-либо в Loader.

  • ScaleManager.hasPhaserSetFullScreen — это новая логическая переменная, которая определяет, находится ли браузер в полноэкранном режиме или нет, и запросил ли этот режим Phaser. Поскольку можно войти в полноэкранный режим вне Phaser, он может запутаться в том, какой ограничивающий родительский элемент использовать.

  • Phaser.Tileset имеет новое свойство lastgid, которое автоматически заполняется TilemapParser при импорте данных карты Tiled или может быть установлено вручную при создании собственного набора тайлов.

  • Stage теперь сначала проверяет, доступен ли document.hidden, и если да, то даже не проверяет версии с префиксом. Это предотвращает предупреждения типа «mozHidden и». Изменения

  • В новых версиях браузеров mozVisibilityState устарели и сохраняют обратную совместимость (спасибо @leopoldobrines7 #2656).

  • Из-за изменений в #2573 графические объекты вызывали updateLocalBounds при любом изменении формы, что могло привести к резкому снижению производительности в ситуациях с тяжёлой графикой (#2618). Теперь у графических объектов есть новый флаг _boundsDirty, который используется для определения того, были ли границы признаны недействительными, например, из-за очистки или рисования графики. Если это значение установлено в true, то updateLocalBounds вызывается один раз в методе postUpdate (спасибо @pengchuan #2618).

  • Phaser.Image теперь имеет компонент ScaleMinMax.

  • Анимации теперь позволяют скорости больше 0, вместо того чтобы заставлять их быть больше 1. Это позволяет иметь скорость анимации медленнее 1 кадра в секунду (спасибо @jayrobin #2664).

  • Weapon.fire и все связанные методы (fireAtXY, fireAtPointer, fireAtSprite) теперь возвращают экземпляр Phaser.Bullet, который был запущен, или null, если ничего не было запущено. Ранее он возвращал логическое значение, но это изменение позволяет вам выполнять дополнительную обработку Bullet по мере необходимости (спасибо @JTronLabs #2696).

  • Sound.loopFull теперь возвращает зацикленный экземпляр Sound (спасибо @hilts-vaughan #2697).

  • ArcadePhysics Body.rotation теперь считывает своё начальное значение из sprite.angle вместо sprite.rotation. Свойство было немедленно заменено правильным значением в Body.preUpdate, но оно сохраняет его согласованность (спасибо @samme #2708).

  • Оружие.fire теперь правильно отслеживает вращение при использовании смещения и отслеживания спрайта (спасибо @bobonthenet #2672).

Исправления ошибок

  • Группа с установленным inputEnableChildren перезапускала обработчик ввода на Sprite, даже если этот обработчик был отключён ранее.

  • Weapon.autofire не стрелял после первой пули или до вызова fire, ни одно из которых не является требованием. Теперь, если вы установите это логическое значение, оружие будет стрелять непрерывно, пока вы не вернёте его обратно в false (спасибо @alverLopez #2647).

  • ArcadePhysics.World.angleBetweenCenters теперь использует свойства centerX и centerY для проверки угла между ними, а не center.x/y, поскольку этого свойства больше не существует (спасибо @leopoldobrines7 #2654).

  • Аргумент collide в Emitter.makeParticles не работал из-за #2661, но теперь он должным образом соблюдается благодаря этому изменению (спасибо @samme #2662).

  • Звук.play выдавал ошибку «Uncaught DOMException: Failed to execute 'disconnect' on 'AudioNode': the given destination is not connected.» в Chrome, если вы пытались воспроизвести аудиомаркер, которого не существовало, в то время как действительный маркер уже воспроизводился.

  • Границы текста неправильно смещались, если разрешение текста было больше 1 (спасибо @valent-novem #2685).

  • TilemapParser неправильно считывал widthInPixels и heightInPixels из данных JSON (использование заглавных букв свойств) (спасибо @hexus #2691).

  • Текстура с оттенком в режиме Canvas не обновлялась должным образом, если она также была обрезана, помимо первоначального обрезания. Теперь обрезанная текстура будет повторно тонироваться каждый раз, когда обрезка обновляется и изменяется (спасибо @phoenixyjll #2688).

  • Свойство Weapon.fireRateVariance никогда не учитывалось внутренне. Теперь оно применяется к скорости стрельбы правильно (спасибо @noseglid #2715).

  • Text.updateText теперь устанавливает Text.dirty = false, что предотвращает вызов updateText для текстовых объектов дважды после создания.

Обновления Pixi

Обратите внимание, что Phaser использует собственную сборку Pixi и всегда использовал её. В нашу пользовательскую сборку внесены следующие изменения, а не в Pixi в целом.

  • Эта версия содержит значительные исправления для DisplayObject.getBounds и DisplayObjectContainer.getBounds. Методы теперь могут принимать необязательный аргумент targetCoordinateSpace, который делает их гораздо более гибкими, позволяя вам проверять границы относительно любой цели, а не только локальных и глобальных. Если targetCoordinateSpace является допустимым DisplayObject:
    • Если это родитель вызывающего объекта на каком-то уровне, он вернёт границы относительно него.
    • если это не родительский объект вызывающего объекта. В целом, он получит глобальные границы его, и вызывающий объект и будет вычислять границы x и y вызывающего объекта относительно targetCoordinateSpace DisplayObject.

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

  • DisplayObjectContainer.contains(child) — это новый метод, который определяет, является ли указанный объект отображения дочерним элементом экземпляра DisplayObjectContainer или самого экземпляра. Этот метод используется в новой функции getBounds.
  • Исправлено значение по умолчанию для DisplayObjects _bounds rect (0, 0, 1, 1) на (0, 0, 0, 0).
  • Благодаря @fmflame за его усердную работу над вышеуказанным (#2639 #2627).
  • Методы setStageReference и removeStageReference были удалены из всех классов Pixi. У объектов больше нет свойств stage или ссылок на объект Stage. Это связано с тем, что для любых вычислений не требуется ссылка на Stage, а Phaser может иметь только 1 Stage, поэтому добавление и удаление ссылок на него были излишними действиями.
  • Файл pixi/utils/Polyk.js был удалён, так как он больше не использовался с Pixi или Phaser (некоторое время назад мы заменили его на EarCut).

Версия 2.6.1 — «Caemlyn» — 11 июля 2016 г.

Исправлены ошибки

  • Исправлена ошибка Uncaught TypeError: Cannot set property 'x' of undefined в Body.js (спасибо @ErwanErwan #2607).

Версия 2.6.0 — «Fal Moran» — 8 июля 2016 г.

Новые функции

  • У загрузчика есть новое свойство headers. Это объект, проверяемый запросами XHR, используемый для установки заголовка запроса определённых типов файлов. JSON и XML предварительно настроены, но вы можете добавить или изменить это свойство по мере необходимости (спасибо @stoneman1 #2585 #2485).
  • Phaser теперь поддерживает Typings, диспетчер определений TypeScript. См. файл typescript/readme.md для получения инструкций по установке (спасибо @monagames #2576).
  • Phaser.Utils.reverseString возьмёт заданную строку, перевернёт её и вернёт.
  • Phaser.ArrayUtils.rotateRight — это противоположность ArrayUtils.rotate. Он берёт массив, удаляет элемент с конца массива и вставляет его в начало, сдвигая всё остальное на 1 место в процессе.
  • Phaser.ArrayUtils.rotateLeft — это новое название для Phaser.ArrayUtils.rotate. Старый метод теперь устарел (но всё ещё доступен в этом выпуске).
  • Phaser.Color.toABGR преобразует компоненты RGBA в 32-битное целое число в формате AABBGGRR.
  • ArcadePhysics.Body.setCircle — это новый метод, позволяющий определить тело Arcade Physics как круг вместо прямоугольника. Вы можете контролировать радиус тела и смещение от родительского спрайта.
  • ArcadePhysics.World.separateCircle — это новый метод, обрабатывающий все столкновения круговых тел внутри Arcade Physics (спасибо @VitaZheltyakov).
  • Все внутренние методы Arcade Physics, такие как collideGroupVsSelf, collideSpriteVsSprite и т. д., были обновлены для работы с телами круглой формы (спасибо @VitaZheltyakov).
  • ArcadePhysics.Body.onWorldBounds — это новый сигнал, который отправляется всякий раз, когда тело сталкивается с границами мира, что ранее было трудно обнаружить. Из-за потенциально большого объёма сигналов, которые это может создать, по умолчанию он отключён. Чтобы использовать эту функцию, установите это свойство в Phaser.Signal: sprite.body.onWorldBounds = new Phaser.Signal() и оно будет вызываться при столкновении, передавая пять аргументов: спрайт, на котором оно произошло, и 4 логических значения, сопоставленных с верхом, низом, левым и правым, указывающих, с какой стороны мира произошло столкновение.
  • ArcadePhysics.Body.onCollide — это новый сигнал, который отправляется всякий раз, когда тело сталкивается с другим телом. Из-за потенциально большого объёма сигналов, которые это может создать, по умолчанию он отключён. Чтобы использовать эту функцию, установите это свойство в Phaser.Signal: sprite.body.onCollide = new Phaser.Signal() и оно будет вызываться при столкновении, передавая два аргумента: столкнувшиеся спрайты.
  • ArcadePhysics.Body.onOverlap — это новый сигнал, который отправляется всякий раз, когда тело перекрывается с другим телом. Сигналы

Эта функция по умолчанию отключена. Чтобы использовать эту функцию, установите это свойство в Phaser.Signal: sprite.body.onOverlap = new Phaser.Signal(). Функция будет вызываться при возникновении перекрытия, передавая два аргумента: столкнувшиеся спрайты.

Группы

Теперь у групп есть следующие свойства, которые являются геттерами и сеттерами: centerX, centerY, left, right, top и bottom. Они вычисляют границы группы на основе всех видимых дочерних элементов, а затем позволяют применять позиционирование на основе этого. Это означает, что вы можете, например, теперь получить горизонтальный центр группы, вызвав Group.centerX. Эти свойства также являются сеттерами, поэтому вы можете позиционировать группы, и они будут учитывать масштаб и вращение.

У групп появился новый метод alignIn. Он позволяет выровнять группу внутри другого игрового объекта или прямоугольника. Вы можете указать одну из 9 позиций, которые представляют собой новые постоянные позиции, такие как: Phaser.TOP_LEFT или Phaser.CENTER (см. документацию для получения полного списка). Позиционирование групп основано на их дочерних границах, с учётом вращения и масштабирования. С помощью этого метода вы можете легко разместить группы в углах экрана или игрового мира или выровнять их относительно других спрайтов.

У групп также появился новый метод alignTo. Он позволяет вам выровнять группу относительно стороны другого игрового объекта или прямоугольника. Можно указать одну из 11 позиций, которые являются новыми постоянными позициями, такими как: Phaser.TOP_LEFT или Phaser.LEFT_BOTTOM (см. документацию для получения полного списка). Позиционирование групп основано на их дочерних границах с учётом вращения и масштабирования. Этот метод позволяет легко выравнивать группы рядом с другими спрайтами.


В запросе присутствуют фрагменты кода, но они не содержат ошибок, требующих перевода. ### Изменения

  • Удалено removed, так как Pixi Cache больше нигде внутри не используется.

  • Второй аргумент Phaser.Cache.removeImage был переименован из removeFromPixi в destroyBaseTexture, поскольку именно это всегда и делал данный аргумент.

  • AnimationManager.refreshFrame был удалён, так как он никогда на самом деле ничего не делал внутри.

  • Sound.stop будет проверять наличие gainNode перед попыткой отключиться от него (#2597).

Исправления ошибок

  • Исправлена проблема в Group.align, где ячейка не увеличивалась, если rows было больше -1.

  • Случайно повторили значение Sound.volume в источнике (спасибо @LoneStranger #2569).

  • Если аргумент useLocalFrameIndex для Animation.setFrame был истинным, а идентификатор кадра — числом, то работа происходила некорректно (спасибо @uboot #2571).

  • Polygon.contains работал только с нерасплющенными объектами Polygon. Теперь работает как с плоскими, так и с нерасплющенными полигонами.

  • Объекты Graphics, разрешённые для ввода, не могли ничего сделать, если им передавался объект Phaser Polygon (что происходило почти во всех случаях), поскольку они не могли правильно обнаружить ввод с расплющенными многоугольниками (спасибо @symbiane #2591).

  • P2.World.clear теперь очищает свойство World.walls, сбрасывая все границы стены в null. Это позволяет точно воссоздавать стены при сбросе мира P2, что происходит при изменении состояния или перезапуске (спасибо @ewpolly1 @codermua #2574).

Обновления Pixi

Обратите внимание, что Phaser использует собственную сборку Pixi и всегда использовал её. В нашу собственную сборку были внесены следующие изменения, но не в Pixi в целом.

  • Из PIXI.DisplayObject удалены _renderWebGL, _renderCanvas, getLocalBounds и getBounds, поскольку они были добавлены только для соответствия древним правилам jshint.

  • Все методы Pixi.Graphics, которые изменяют графику, например drawShape, lineTo, arc и т. д., теперь автоматически вызывают Graphics.updateLocalBounds. Это сделано для того, чтобы границы графического объекта обновлялись, позволяя масштабировать и вращать графический объект и при этом получать правильные размеры (спасибо @kelu-smiley #2573).

  • PIXI.CanvasPool больше не просто проверяет наличие null родительских сравнений. Он будет проверять все ложные родительские объекты, помогая освободить холсты, когда родительские объекты были удалены в другом месте.

  • Теперь PIXI.CanvasPool.remove и removeByCanvas устанавливают ширину и высоту удалённого холста равными 1.

  • Были удалены PIXI.Texture.fromImage, PIXI.BaseTexture.fromImage и PIXI.Sprite.fromImage. Они никогда не должны были использоваться, поскольку обходят загрузчик Phaser и не учитывают CORs или другие расширенные настройки загрузчика.

  • Было удалено свойство PIXI.BaseTexture.imageUrl, поскольку оно никогда фактически не заполнялось.

  • Было удалено свойство PIXI.BaseTexture._UID, поскольку оно фактически никогда не использовалось внутри.

  • Убраны все ссылки на PIXI.BaseTextureCache (в основном из BaseTexture.destroy и Texture.destroy), поскольку BaseTextureCache никогда не использовался внутри ни Phaser, ни нашей собственной версией Pixi.

  • Был удалён PIXI.TextureCache. Он использовался только __default и __missing изображениями, которые Phaser генерирует при запуске. Больше нигде внутри Phaser или Pixi он не использовался. Если он вам нужен в вашей игре, пожалуйста, переработайте его, чтобы избежать использования, или заново создайте объект на глобальном объекте PIXI.

  • Созданные с помощью BaseTexture.fromCanvas холсты больше не имеют прикреплённого к ним свойства _pixiId, поскольку оно никогда не использовалось внутренне Phaser или Pixi.

  • Теперь устарело свойство PIXI.BaseTexture.updateSourceImage. Вместо этого используйте Sprite.loadTexture.

  • Было удалено свойство PIXI.BaseTextureCacheIdGenerator, поскольку оно больше не используется внутри Phaser или Pixi.

  • Было удалено свойство PIXI.Texture.addTextureToCache. PIXI Texture Cache никогда фактически не использовался Phaser и вызывал внутренние сложности.

  • Было удалено свойство PIXI.Texture.removeTextureFromCache. PIXI Texture Cache никогда фактически не использовался Phaser и вызывал внутренние сложности. Из текста запроса:

Были удалены PIXI.Sprite.fromFrame. Они полагались на PIXI Texture Cache, который фактически никогда не использовался Phaser и никогда не использовался внутри Pixi.

  • Было удалено свойство PIXI.TextureCacheIdGenerator, так как оно не использовалось внутри.
  • Было удалено свойство PIXI.FrameCache, так как оно не использовалось внутри.
  • Вызовы PIXI.DisplayObjectContainer updateTransform в начале getBounds помогают избежать устаревания границ.

Спасибо Корину Уилкинсу из Aardman Digital за большую часть исследовательской работы, которая привела к перечисленным выше изменениям Pixi.

Версия 2.5.0 — «Пять королей» — 17 июня 2016 года

Примечание: эта версия также была выпущена как 2.4.9 «Четыре короля» 16 июня 2016 года. Выпуск 2.5.0 знаменует переход к более строгому соблюдению правил Semver, а также содержит некоторые исправления определений TypeScript.

Новые функции

  • Phaser.Line.intersectsRectangle проверяет пересечение между линией и прямоугольником или любым прямоугольным объектом, таким как спрайт или тело.

  • Group.getClosestTo вернёт дочерний элемент, ближайший к заданной точке (спасибо @Nuuf #2504).

  • Group.getFurthestFrom вернёт самый дальний дочерний элемент от заданной точки (спасибо @Nuuf #2504).

  • Animation.reverse изменит направление воспроизводимой анимации на противоположное (спасибо @gotenxds #2505).

  • Animation.reverseOnce изменит направление анимации только для текущей или следующей анимации (спасибо @gotenxds #2505).

  • Полностью переработан способ обновления списка отображения и обработки движений камеры, что должно привести к значительно более плавному движению, когда камера следует за спрайтами, управляемыми анимацией или физикой. Функция Stage.postUpdate теперь значительно упрощена. Она берёт на себя управление обновлением списка отображения (вызывая updateTransform для себя), вместо того чтобы позволить это сделать рендерерам Canvas или WebGL. Из-за этого изменения функция Camera.updateTarget использует свойство worldPosition спрайтов, которое теперь точно соответствует кадру (спасибо @whig @Upperfoot @Whoisnt @hexus #2482).

  • У игровых объектов, включая Sprite, Image, Particle, TilemapLayer, Text, BitmapText и TileSprite, есть новое свойство data. Это пустой объект, к которому Phaser никогда не будет обращаться внутренне, но ваш собственный код или плагины Phaser могут хранить данные игрового объекта внутри него. Это позволяет вам связать данные с игровым объектом без необходимости изменять его класс или загрязнять его.

  • TilemapLayers теперь будут правильно сталкиваться, если их положение не установлено на 0x0. Например, если вы сшиваете несколько карт одну за другой и вручную настраиваете их свойства scrollX/Y (спасибо @Upperfoot #2522).

  • Существует множество новых констант Phaser, которые помогут вам установить угол игрового объекта. Это Phaser.ANGLE_UP, ANGLE_DOWN, ANGLE_LEFT, ANGLE_RIGHT, ANGLE_NORTH_EAST, ANGLE_NORTH_WEST, ANGLE_SOUTH_EAST и ANGLE_SOUTH_WEST.

  • Math.between возвращает значение между заданными значениями min и max.

  • InputHandler.dragDistanceThreshold даёт вам больше контроля над тем, когда начнётся событие Sprite Drag. Он позволяет указать расстояние в пикселях, на которое должен переместиться указатель, прежде чем начнётся перетаскивание.

  • InputHandler.dragTimeThreshold даёт вам больше контроля над тем, когда начнётся событие Sprite Drag. Он позволяет указать время в мс, в течение которого должен удерживаться указатель, прежде чем начнётся перетаскивание.

  • InputHandler.downPoint — это новый объект Point, содержащий координаты указателя, когда он был впервые нажат на Sprite.

  • Есть две новые константы Phaser, которые помогают с ориентацией игр или игровых объектов. Это Phaser.HORIZONTAL, VERTICAL, LANDSCAPE и PORTRAIT.

  • InputHandler.dragStopBlocksInputUp — это логическое значение, которое позволяет вам контролировать, что происходит с событиями ввода. Если false (по умолчанию), то оба события onInputUp и onDragStop будут отправляться, когда Sprite перестанет перетаскиваться. Если true, то отправляется только событие onDragStop, и * onInputUp пропускается.

  • Group.inputEnableChildren — это новое свойство. Если установлено в true, автоматически вызовет inputEnabled = true для любых детей, добавленных или созданных группой.

  • PIXI.DisplayObjectContainer.ignoreChildInput — это новое свойство. Если true, то дети не будут считаться действительными для событий ввода. Поскольку это было применено к DisplayObjectContainer, это означает, что оно доступно в Group, Sprite и любом другом объекте уровня отображения. Используя это логическое значение, вы можете отключить события ввода для всех детей во всей группе, без необходимости перебирать что-либо или устанавливать флаги глубоко.

  • InputHandler._pointerOverHandler и _pointerOutHandler имеют новые аргументы silent — если true, они не будут отправлять какие-либо сигналы от родительского Sprite.

  • Pointer.interactiveCandidates — это новый массив, который стирается и повторно заполняется каждый раз, когда этот указатель обновляется. Он содержит ссылки на все игровые объекты, которые считались действительными для обработки этим указателем во время последнего обновления. Чтобы быть действительным, они должны иметь подходящий priorityID, быть включёнными для ввода, быть видимыми и фактически иметь над ними указатель. Вы можете проверить содержимое этого массива в таких событиях, как onInputDown, но будьте осторожны: он сбрасывается при каждом обновлении.

  • Pointer.swapTarget позволяет вам изменить объект Pointer.targetObject на предоставленный. Это позволяет вам точно контролировать, на какой объект нацелен указатель.

  • Input.setInteractiveCandidateHandler позволяет добавить обратный вызов, который срабатывает каждый раз, когда вызывается Pointer.processInteractiveObjects. Цель processInteractiveObjects состоит в том, чтобы определить, с каким игровым объектом будет взаимодействовать указатель. Он работает, опрашивая все действительные игровые объекты, а затем постепенно исключая те, которые не соответствуют критериям (например, они не находятся под указателем, отключены, невидимы и т. д.). В конечном итоге создаётся короткий список «кандидатов». Это все игровые объекты, действительные для ввода и перекрывающиеся с указателем. Если вам нужен точный контроль над тем, какой из элементов выбран, вы можете использовать этот обратный вызов для этого. Обратному вызову будут отправлены 3 параметра: 1) ссылка на объект Phaser.Pointer, обрабатывающий элементы. 2) Массив, содержащий всех потенциальных интерактивных кандидатов. Это массив объектов InputHandler, а не спрайтов. 3) Текущий «любимый» кандидат, основанный на его priorityID и позиции в списке отображения. Ваш обратный вызов ДОЛЖЕН вернуть одного из кандидатов, отправленных ему.

  • Group.onChildInputDown — это новый сигнал, который вы можете прослушать. Он будет отправляться всякий раз, когда любой непосредственный потомок группы сам испускает сигнал onInputDown. Это позволяет прослушивать сигнал от группы, а не от каждого спрайта внутри неё.

  • Group.onChildInputUp — это новый сигнал, который вы можете прослушать. Он будет отправляться всякий раз, когда любой непосредственный потомок группы сам испускает сигнал onInputUp. Это позволяет прослушивать сигнал от группы, а не от каждого спрайта внутри неё.

  • Group.onChildInputOver — это новый сигнал, который вы можно прослушать. Он будет отправляться всякий раз, когда любой непосредственный потомок группы сам испускает сигнал onInputOver. Это позволяет прослушивать сигнал от группы, а не от каждого спрайта внутри неё.

  • Group.onChildInputOut — это новый сигнал, который можно прослушать. Он будет отправляться всякий раз, когда любой непосредственный потомок группы сам испускает сигнал onInputOut. Это позволяет прослушивать сигнал от группы, а не от каждого спрайта внутри неё.

  • Phaser.Weapon — это совершенно новый плагин, предоставляющий возможность легко создать пул пуль и менеджер. Оружие стреляет объектами Phaser.Bullet, которые по сути являются спрайтами с несколькими дополнительными свойствами. Пули включены для аркадной физики. В настоящее время они не работают с физикой P2. Пули создаются внутри Weapon.bullets, который является экземпляром Phaser.Group. Всё, что вы обычно можете делать с группой, например перемещать её по списку отображения, перебирать её и т.д., можно делать и с группой пуль. У пуль может быть... * Текстуры и даже анимации. Можно контролировать скорость их запуска, частоту запуска, угол запуска и даже устанавливать такие параметры, как гравитация. Дополнительную информацию см. в документации или просмотрите примеры оружия Weapon examples в репозитории Examples.

  • BitmapData.smoothProperty — это новое свойство, которое содержит префикс на основе строки, необходимый для установки масштабирования изображения в контексте BitmapData.

  • BitmapData.copyTransform позволяет рисовать игровой объект в BitmapData, используя его свойство worldTransform для управления местоположением, масштабированием и вращением объекта. При необходимости можно предоставить...

  • Теперь BitmapData.drawGroup использует новый метод copyTransform, чтобы обеспечить гораздо более точные результаты. Ранее вложенные игровые объекты отображались неправильно, а спрайты, добавленные через addChild к другому спрайту, не отображались. Объекты BitmapText также отображались без учёта вращения, а свойство сглаживания спрайтов игнорировалось. Все эти вещи теперь охватываются новым методом drawGroup, который также обрабатывает полную глубокую итерацию по списку отображения.

  • Добавлены следующие новые константы: Phaser.TOP_LEFT, Phaser.TOP_CENTER, Phaser.TOP_RIGHT, Phaser.LEFT_TOP, Phaser.LEFT_CENTER, Phaser.LEFT_BOTTOM, Phaser.CENTER, Phaser.RIGHT_TOP, Phaser.RIGHT_CENTER, Phaser.RIGHT_BOTTOM, Phaser.BOTTOM_LEFT, Phaser.BOTTOM_CENTER и Phaser.BOTTOM_RIGHT.

  • Rectangle.getPoint — это новый метод, возвращающий точку на основе заданной постоянной позиции, такой как Phaser.BOTTOM_LEFT. Он возвращает тот же результат, что и вызов Rectangle.bottomLeft (и т. д.), но в отличие от этих геттеров вы можете предоставить свой собственный объект Point.

  • Компонент Game Object Bounds был обновлён и включает два новых свойства: centerX и centerY. Это означает, что теперь вы можете, например, получить горизонтальный центр спрайта, вызвав Sprite.centerX. Эти свойства также являются установщиками, поэтому вы можете позиционировать игровые объекты, и они будут учитывать масштаб и привязку.

  • Все игровые объекты с компонентом Bounds, включая спрайты, изображения, текст, BitmapText, TileSprites и всё, что расширяет их, теперь имеют новый метод alignIn. Он позволяет выровнять игровой объект внутри другого игрового объекта или прямоугольника. Вы можете указать одну из 9 позиций, которые являются новыми константами положения, такими как: Phaser.TOP_LEFT или Phaser.CENTER (см. выше полный список). Игровые объекты располагаются на основе их границ, которые учитывают вращение, масштабирование и привязку. С помощью этого метода вы можете легко разместить спрайты в углах экрана или игрового мира или выровнять их относительно других спрайтов.

  • Все игровые объекты с компонентом Bounds, включая спрайты, изображения, текст, BitmapText, TileSprites и всё, что их расширяет, теперь имеют новый метод alignTo. Он позволяет вам выровнять игровой объект по стороне другого игрового объекта или прямоугольника. Можно указать одну из 11 позиций, которые представляют собой новые константы положения, такие как: Phaser.TOP_LEFT или Phaser.LEFT_BOTTOM (см. полный список выше). Игровые объекты размещаются на основе их границ, которые учитывают вращение, масштабирование и привязку. Этот метод позволяет легко выравнивать спрайты рядом с другими спрайтами.

  • Group.align — это новый метод, позволяющий расположить всех дочерних элементов группы в виде сетки. Можно задать размеры сетки, включая ширину, высоту и размер ячейки. Также можно контролировать расположение дочерних элементов в каждой ячейке сетки. Значения ширины и высоты сетки также можно установить равными -1, делая их текущими, так что сетка расширяется до тех пор, пока все дочерние элементы не будут выровнены. Наконец, можно задать необязательный аргумент индекса дочернего элемента. Это отличный способ быстро и всесторонне выровнять дочерние элементы группы, и он имеет множество вариантов использования.

  • У Arcade Physics Body есть два новых экспериментальных метода: moveTo и moveFrom. Они позволяют перемещать физическое тело на заданное расстояние или в течение заданного времени, после чего оно остановится и выдаст сигнал onMoveComplete. ИСПРАВЛЕНИЯ ОШИБОК

  • Arcade Physics Body некорректно позиционировался, если у спрайта был отрицательный масштаб (см. http://www.html5gamedevs.com/topic/22695-247-248-body-anchoring-any-migration-tips/) (спасибо @SBCGames @icameron @Nuuf @EvolViper #2488 #2490).

  • В InputHandler.checkPointerDown использовался неправильный символ вертикальной черты | вместо логического ИЛИ || и проверка isDown, что приводило к сбою событий Button Over (спасибо @pengchuan #2486).

  • Объекты BitmapText с линиями больше maxWidth теперь правильно обрабатывают значения выравнивания, заставляя их правильно выравниваться по центру (спасибо @kevinleedrum #2499 @crippledcactus #2496).

  • У текста появился новый закрытый метод measureLine, который используется для расчёта окончательной длины строки текста после учёта цветовых остановок и других изменений стиля. Это должно предотвратить усечение символов (спасибо @TadejZupancic #2519 #2512).

  • Иногда браузер вызывал состояние гонки, когда любые подключённые игровые панели обнаруживались до того, как устанавливался обратный вызов. Также иногда ссылки на rawPad устаревали, и теперь они постоянно проверяются (спасибо @cwleonard #2471).

  • Для Sound.isPlaying устанавливалось значение false при выполнении аудиоцикла, но оно никогда не возвращалось к true, если это звук, не использующий маркер (спасибо @TheJasonReynolds #2529).

  • Phaser.Rectangle.aabb давал сбой, если в прямоугольниках использовались отрицательные смещения. Теперь он точно рассчитывает границы (спасибо @fillmoreb #2545).

  • Значение DisplayObject.worldRotation неправильно подписывало значение wt.c, что означало неправильное вращение.

  • Значение DisplayObject.worldScale не умножало локальный масштаб объектов на расчёт, что означает, что значение не было истинным представлением мирового масштаба объектов.

НОВЫЕ ВОЗМОЖНОСТИ

  • Методы BitmapData.copy и все методы, которые его используют, включая BitmapData.draw, drawGroup и drawFull, теперь поддерживают отрисовку объектов RenderTexture. Их можно передать напрямую или использовать текстуры спрайтов, например, из вызова generateTexture.

  • В аркадной физике появился новый аргумент world для следующих функций: distanceBetween, distanceToXY, distanceToPointer, angleBetween, angleToXY и angleToPointer. Аргумент (который по умолчанию равен false), когда включён, будет вычислять углы или расстояния на основе свойства world игровых объектов, а не их свойств x и y. Это позволяет ему работать с объектами, помещёнными в смещённые группы или являющимися дочерними элементами других отображаемых объектов (спасибо @Skeptron за ветку #2463).

  • У аркадного физического тела появилось новое свойство worldBounce. Оно управляет упругостью тела, особенно при столкновении с границами мира. По умолчанию это свойство равно null, в этом случае вместо него используется Body.bounce. Установите это свойство на объект Phaser.Point, чтобы включить значение отскока, специфичное для границ мира (спасибо @VitaZheltyakov #2465).

ОБНОВЛЕНИЯ

  • Исправлены определения типов TypeScript и обновления (спасибо @osev7 @staff0rd @galen-manuel).

  • Исправления опечаток в документации (спасибо @dedoubleyou1 @mortonfox @zeterain).

  • Теперь вы можете получить доступ к интенсивности эффекта дрожания камеры через геттер / сеттер Camera.shakeIntensity. Полезно, если вы хотите изменить интенсивность во время работы (спасибо @drhayes #2443). * Если два тела перекрывались, но ни одно из них не имело скорости (то есть они были вложены друг в друга), то возвращалось значение false.

  • PIXI.defaultRenderer теперь установлен в null в Game.destroy, что позволяет его сбросить, если новый экземпляр Game будет создан на той же странице (спасибо @xtforgame #2474).

  • BitmapData.drawGroupProxy теперь может перебирать спрайты, у которых есть дочерние элементы, а также теперь использует мировые позиции для рисования. Это изменение обновляет функциональность BitmapData.drawGroup.

  • Text.setStyle имеет новый аргумент update, который при необходимости автоматически вызовет updateText после установки нового стиля (спасибо @staff0rd #2478).

Исправления ошибок

  • Исправлена проблема в методе перекрытия Arcade Physics, где он обнаруживал перекрытия только до максимального порога смещения и не дальше (спасибо @rgk #2441).

  • InputHandler.checkPointerDown и checkPointerOver теперь будут проверять свойство масштаба worldTransform спрайта. Если оно равно нулю, то будет быстрый возврат, тогда как раньше оно неправильно сообщало о событии вверх (спасибо @jaapaurelio #2466).

  • Исправлен баг в Arcade Physics Body.preUpdate, который неправильно применял положение смещённого тела (на которое было применено Body.setSize) при объединении со спрайтом с ненулевым якорем (спасибо @SBCGames #2470).

  • Если вы установите Game.renderType в Phaser.HEADLESS, он больше не будет выводить результат на холст. Холст всё ещё создаётся (хотя и не добавляется в DOM), так как он требуется внутри, но теперь на нём ничего не отображается (спасибо @ForgeableSum #2464).

  • Звуки, воспроизводимые с помощью тега Audio, которые были приостановлены, а затем возобновлены снова (либо непосредственно в коде, либо через событие паузы игры), не возобновлялись с того момента, когда они были приостановлены (спасибо @rroylance #2473).

  • Звуки, воспроизведённые с помощью тега Audio и настроенные на цикл, попадали в бесконечный цикл паузы-воспроизведения (спасибо @rroylance #2473).

Обновления Pixi

Обратите внимание, что Phaser использует собственную сборку Pixi и всегда использовал её. В нашей собственной сборке были внесены следующие изменения, а не в Pixi в целом.

  • Спрайты, на которых был оттенок, а затем их фрейм был изменён с помощью Sprite.frame или Sprite.frameName, не перекрашивали новый фрейм и застревали на старом фрейме в режиме Canvas (спасибо @spayton #2453).

Версия 2.4.7 — «Hinderstap» — 22 апреля 2016 года

Новые функции

  • Добавлены P2.Body.thrustLeft, который будет перемещать тело влево с заданной скоростью (спасибо Джеймсу Прайору).

  • Добавлен P2.Body.thrustRight, который будет двигать тело вправо с заданной скоростью (спасибо Джеймсу Прайору).

  • Polygon теперь принимает массив массивов в качестве нового типа при построении: [[x1, y1], [x2, y2]] (спасибо @ShimShamSam #2360).

  • У текста есть новое свойство maxLines, которое является максимальным количеством строк для отображения перенесённого текста. Если установлено значение 0 (по умолчанию), ограничения нет. Это предотвращает перенос текста за пределы фиксированного макета (спасибо @slashman #2410).

  • outOfCameraBoundsKill — это новое логическое свойство, которым обладает каждый игровой объект с компонентом InWorld. Если autoCull и это свойство оба имеют значение true, то объект будет автоматически уничтожен, если он покинет границы камеры (спасибо @jakewilson #2402).

  • Group.getByName ищет в группе первый экземпляр дочернего элемента с именем свойства, совпадающим с заданным аргументом. Если более одного ребёнка имеют одинаковое имя, возвращается только первый экземпляр.

  • BitmapData имеет новое свойство frameData, которое представляет собой экземпляр контейнера Phaser.FrameData. Он содержит один кадр по умолчанию, соответствующий размерам всей BitmapData, но может быть заполнен дополнительными кадрами, если вы хотите создавать анимации из динамических текстур BitmapData.

  • FrameData.destroy обнулит локальные массивы, используемые для хранения экземпляров Frame.

  • SoundManager.muteOnPause — это новая логическая переменная, которая позволяет вам контролировать, отключается ли звуковая система автоматически при паузе Phaser, например, когда она теряет фокус. Возможно, вам потребуется установить для этого параметра значение false, если вы хотите управлять аудиосистемой извне вашей игры Phaser, т. е. с кнопок DOM или аналогичных (#2382).

  • Теперь можно передать... * TilemapLayer как текстура для TileSprite. Ограничение этого заключается в том, что если вы передадите его в TileSprite, он создаст шаблон заполнения из TilemapLayer в тот момент, когда он будет передан, и не будет отслеживать слой в будущем, если он обновится (спасибо @jdnichollsc #1989).

  • У камеры появилось новое свойство: lerp. Это объект Point, который позволяет вам контролировать степень горизонтального и вертикального сглаживания, применяемого к камере при отслеживании Sprite. Он работает как с мёртвыми зонами, так и без них, и по умолчанию выключен. Установите его на низкие значения, такие как 0,1, для действительно плавного отслеживания движения (спасибо WombatTurkey за идею добавить это).

  • Camera.shake — это новая функция, которая создаёт эффект дрожания камеры. Вы можете указать интенсивность, продолжительность и направление эффекта. Вы также можете установить, должно ли оно встряхивать камеру за пределы или нет.

  • Camera.flash — это новая функция, которая заставляет камеру «мигать» поверх вашей игры. Она работает, заполняя игру указанным сплошным цветом заливки, а затем постепенно уменьшая его до альфа 0 в течение заданной продолжительности. Это отлично подходит для таких вещей, как эффекты попадания. Вы можете прослушать сигнал Camera.onflashComplete.

  • Camera.fade — это новая функция, которая делает камеру исчезающей в указанный цвет в течение указанной продолжительности. Это отлично подходит для перехода от одного состояния к другому. Вы можете прослушивать сигнал Camera.onFadeComplete.

  • Camera.resetFX сбрасывает любые активные эффекты, такие как затухание или вспышка, и немедленно удаляет их. Полезно вызывать после затухания, чтобы удалить затухание со сцены.

  • Phaser.Camera.ENABLE_FX — это константа, управляющая доступностью эффектов камеры или нет. По умолчанию она имеет значение true, но если вы установите её в false перед загрузкой, она не создаст графический объект, необходимый для обработки эффектов.

  • В Arcade Physics Body появились два новых свойства: left и top. Они аналогичны Body.x и Body.y, но позволяют передавать тело функциям геометрии уровня, таким как Circle.contains.

  • World.separate был оптимизирован, чтобы уменьшить количество вызовов intersect с 3 вызовов на проверку столкновения игровых объектов до 2. Так что, если бы вы столкнулись с 50 спрайтами, это уменьшило бы количество вызовов с 150 до 100 за кадр. Это также уменьшает количество вызовов, сделанных в separateX и separateY, на тот же коэффициент.

  • Два неподвижных тела никогда не устанавливали бы свои данные перекрытия, даже если бы проводилась только проверка перекрытия. Поскольку эти данные полезны, они были изменены. Два неподвижных тела по-прежнему никогда не отделятся друг от друга, но теперь у них будут рассчитаны свойства overlapX и overlapY.

  • P2.Body.offset теперь используется и применяется к позиции спрайта во время рендеринга. Указанные значения являются нормальными значениями пикселей и смещают P2 Body от центра спрайта (спасибо Mourtz #2430).

Обновления

  • Исправлены определения типов TypeScript и обновления (спасибо jamesgroat kiswa).
  • Исправления опечаток в документации (спасибо thiagojobson hayesmaker EJanuszewski).
  • Удалён console.log из генератора TilingSprite.
  • Sound.position больше не может становиться отрицательным, то есть вызовы AudioContextNode.start с отрицательными смещениями позиции больше не вызывают ошибок (спасибо Weedshaker #2351 #2368).
  • Теперь по умолчанию внутреннее свойство Phaser.Signal _boundDispatch равно false, что позволяет использовать boundDispatches (спасибо alvinlao #2346).
  • Парсер Tiled теперь поддерживает только несжатые данные слоя. Раньше он молча терпел неудачу, теперь он обнаруживает, используется ли сжатие слоёв, и вместо этого отображает предупреждение консоли (спасибо MannyC #2413).
  • Парсер Tiled теперь удаляет параметр encoding, чтобы последующий процесс не пытался снова декодировать данные (спасибо MannyC #2412).
  • Убедитесь, что родительский контейнер является группой, прежде чем удалять его из своего хэша (спасибо rblopes #2397).
  • Обработчик ввода игрового объекта теперь проверяет, был ли объект уничтожен во время фазы onInputDown, и быстро завершает работу, если это так (спасибо zeterain #2394).
  • Компонент Destroy теперь вызывает TweenManager.removeFrom, удаляя все активные твиты из TweenManager после уничтожения. Объекты игры уничтожаются (спасибо @PokemonAshLovesMyTurkeyAndILikeYouTwo #2408)
  • Tween.update теперь возвращает false (помечая Tween для уничтожения), если свойство Tween.target становится ложным. Это может произойти, если объект, за которым следил Tween, был уничтожен, обнулён или вообще удалён.
  • TweenData.repeatTotal — это новое свойство, которое отслеживает общее количество повторений Tween. Если TweenData.start вызывается в результате того, что Tween repeatCount больше 0, дочерний tween сбрасывает свой итог перед повторным запуском.
  • Отладочный холст теперь прослушивает сигнал ScaleManager.onSizeChange и соответствующим образом изменяет размер при работе под WebGL. Это означает, что если размер вашей игры изменится, отладочный холст не будет обрезан (спасибо @francisberesford #1919).
  • Camera.follow теперь использует свойство мира Targets для определения координат камеры, а не её локального положения. Это означает, что спрайты, которые являются членами смещённых групп или преобразованных списков отображения, теперь должны следовать более точно (спасибо @rbozan #2106).
  • PluginManager.destroy теперь вызывается Game.destroy.
  • Game.forceSingleUpdate теперь по умолчанию имеет значение true.
  • Видео теперь использует MediaStreamTrack.stop() вместо MediaStream.stop(), где это возможно, поскольку последнее теперь устарело в некоторых браузерах (спасибо @stoneman1 #2371).
  • Менеджер физики теперь выдаёт предупреждение на консоли, если вы пытаетесь включить физическое тело с использованием неизвестного типа физического движка (спасибо @jakewilson #2415).
  • Класс Tileset теперь сообщает вам имя изображения набора тайлов, выдающего ошибку неравномерного размера (спасибо @jakewilson #2415).
  • Emitter.start при использовании с ложным параметром explode будет кумулятивно добавлять частицы к текущему итогу. При количестве 10 первый вызов будет испускать 10 частиц, следующий — 20 и так далее. Вызовы для запуска теперь будут сбрасывать количество каждый раз. Это изменение поведения по сравнению с более ранними версиями, поэтому, если вы полагались на старый способ, учтите это в своём коде (спасибо @BdR76 #2187).
  • Теперь вы можете передать свой собственный элемент Canvas в Phaser, и он будет использовать его вместо создания своего собственного. Для этого вы должны передать объект конфигурации игры в Phaser при его создании и установить свойство canvas объекта конфигурации равным элементу DOM, который вы хотите использовать, например: { canvas: document.getElementById('yourCanvas') } (спасибо @Friksel #2311).
  • При загрузке видео с установленным аргументом asBlob теперь используется тип «blob» для загрузчика XHR, и результирующий файл не приводится к типу Blob после загрузки. Это исправляет загрузку видео в виде больших двоичных объектов в Chrome для Android (спасибо @JuCarr #2433).
  • Когда загрузчик загружает аудио через тег Audio, вместо Web Audio он использовал Phaser.GAMES[_this.game.id].load в качестве обработчика обратного вызова, что мешало бы ему работать, если у вас было настроено несколько загрузчиков в Phaser. Теперь он использует локальную ссылку на _this (спасибо @SBCGames #2435).

Исправления ошибок

  • Слушатель событий mouseoutglobal не удалялся при уничтожении игры (спасибо @stoneman1 #2345 #2344 #2342).
  • Исправлена проблема с IE, приводящая к сбою this.context.close в диспетчере звука (спасибо @stoneman1 #2349).
  • Phaser.World.centerX и Phaser.World.centerY работали только в том случае, если границы имели начало координат 0, 0. Теперь они учитывают фактическое происхождение (спасибо @fillmoreb #2353).
  • SoundManager.destroy теперь проверяет, является ли context.close допустимой функцией, прежде чем вызывать её (спасибо @brianbunch #2355).
  • SoundManager.destroy не закрывает контекст, если он хранится в PhaserGlobal (спасибо @brianbunch #2356).
  • Исправление опечатки в p2 BodyDebug.componentToHex, из-за которой большинство отладочных тел выглядели красноватыми (спасибо @englercj #2381).
  • Ранее, когда спрайт был тонирован и загружалась новая текстура, тонирование не применялось к текстуре, и использовалась старая тонированная текстура (спасибо @CptSelewin #2383).
  • Отрицательный lineSpacing в текстовых объектах больше не будет обрезать нижние пиксели строк текста (спасибо @gaelenh #2379 #2374).
  • BitmapData.copy и, соответственно, draw, drawFull, drawGroup и т. д. неправильно обрабатывали отрисовку тонированного спрайта, если использовался фрейм. Из атласа текстур (спасибо @PhaserDebugger #2405):
  • Текст, в котором использовались шрифты с цифрами в названиях, отображался некорректно, если вы явно не устанавливали свойство шрифта после создания. Теперь можно правильно передавать имена шрифтов с цифрами как объект стиля шрифта (спасибо @And-0 #2390).
  • Tween.update не отправлял сигнал onLoop для анимаций с одним дочерним элементом, например, созданных через Tween.to с -1 в качестве значения повтора (спасибо @ForgeableSum #2407).
  • Свойство скорости Arcade.Body устанавливалось только тогда, когда тело двигалось, теперь оно обновляется независимо (спасибо @mark-henry #2417).
  • Camera.position возвращала координаты centerX/Y прямоугольника вида, вместо view.x/y (которые возвращает Camera.x/y), теперь она возвращает view.x/y вместо этого (спасибо @kamparR #2120).
  • Передача BitmapData в TileSprite в качестве текстуры приводила к ошибке, если BitmapData ранее не был добавлен в кэш. Теперь используется новое свойство frameData (спасибо @mzamateo @lucap86 #2380).
  • При установке глобального объёма для SoundManager ранее неправильно вычислялись объёмы объектов AudioTag на основе звука, которые не воспроизводились на уровне громкости 1. Новый подход использует Sound.updateGlobalVolume, который корректирует громкость звука до процента от глобального объёма. Таким образом, если глобальный объём равен 0,5, а громкость звука — 0,5, звук будет воспроизводиться с фактической громкостью 0,25 (спасибо @VitaZheltyakov #2325).
  • Sound.play при использовании AudioTag игнорировал отключённое состояние SoundManager и воспроизводился независимо. Теперь он проверяет состояние SoundManager.mute при воспроизведении и устанавливает громкость соответственно (спасибо @brianbunch #2139).
  • К графическим объектам теперь можно напрямую присоединять физическое тело, раньше это приводило к ошибке из-за отсутствия свойства anchor (спасибо @NLilley #2400).
  • Игровой объект с fixedToCamera = true, который затем устанавливался для ввода и включался для перетаскивания из центра (input.enableDrag(true)), выдавал ошибку при перетаскивании (спасибо @solusipse #2367).

Обновления Pixi

Обратите внимание, что Phaser использует собственную сборку Pixi и всегда использовал её. В нашей сборке были внесены следующие изменения, но не в Pixi в целом:

  • DisplayObjectContainer.getLocalBounds уничтожает worldTransforms у детей до следующего вызова stage.updateTransform(). Это может привести к ряду проблем, включая ввод мышью, если width, height или getLocalBounds вызываются внутри методов update или preUpdate. Теперь это исправлено в нашей сборке Pixi (спасибо @st0nerhat #2357).
  • PIXI.CanvasRenderer.resize теперь применяет renderSession.smoothProperty к контексту Canvas при изменении размера. Это должно помочь с нежелательным сглаживанием холста (спасибо @sergey7c4 #2395 #2317). Версия 2.4.6 — от 18 февраля 2016 года

2.4.6 является точечным релизом, который исправляет две серьёзные ошибки и должен быть использован вместо версии 2.4.5 во всех случаях. Журнал изменений версии 2.4.5 приведён ниже.

Новые функции

  • Добавлен метод RandomDataGenerator.sign, который возвращает -1 или 1 (спасибо @taylankasap #2328).

Обновления

  • Метод StateManager.destroy теперь устанавливает значения clearCache и clearWorld перед очисткой текущего состояния, иначе они остались бы нетронутыми, например, из Game.destroy (спасибо @i-dimitrov #2138).

Исправления ошибок

  • Группы теперь проверяют наличие child.parent перед вызовом removeFromHash (спасибо @spayton #2323 #2338).
  • BaseTexture.destroy неправильно удалял текстуру из кэша BaseTextureCache, если она была кэшированным элементом CanvasPool (например, объекты Text), вызывая ошибки drawImage в режиме Canvas и просто пустые текстуры в WebGL (спасибо @civet #2339).
  • Loader.getAudioURL и Loader.getVideoURL были усилены для поддержки URL-адресов файлов с запросами и по-прежнему работают с парами uri и данными/блобами.

Версия 2.4.5 — «Sienda» — от 17 февраля 2016 года

Новые функции

  • Можно использовать новую константу Phaser.PENDING_ATLAS в качестве ключа текстуры для любого спрайта. Это устанавливает ключ равным аргументу frame (фрейм устанавливается равным нулю). Это позволяет создавать спрайты с помощью load.image во время разработки, а затем изменять их на использование атласа текстур позже в разработке, просто выполнив поиск «PENDING_ATLAS» в коде и заменив его на ключ данных атласа.
  • BitmapText.cleanText — это новый метод, который сканирует заданный текст и удаляет или заменяет все символы, которых нет в данных шрифта.
  • ArcadePhysics.Body.onCeiling — это новый дополнительный метод к onFloor (спасибо @yigitozdemir #1610).
  • Text.precalculateWordWrap позволяет запускать текст через функцию переноса слов Text, что удобно, если вам нужно обрабатывать разбиение на страницы более длинных фрагментов текста (спасибо @slashman #2277).
  • Sprite (и все игровые объекты) имеют новый аргумент в своём методе destroy: destroyTexture. Этот логический параметр (по умолчанию равен false) управляет тем, должна ли быть уничтожена BaseTexture игрового объекта. Это чрезвычайно полезно в ситуациях, когда у вас есть много динамических ресурсов, которые вам больше не нужны, таких как текстуры, созданные из BitmapDatas. Вы должны установить аргумент destroyTexture самостоятельно. Это можно сделать в пользовательском методе уничтожения игрового объекта или как часть завершения состояния (#2261).
  • Компонент Health игрового объекта имеет новый метод setHealth, который позволяет установить точное количество здоровья. Теперь он используется функцией revive.
  • Text.useAdvancedWrap позволяет переключаться между базовой и расширенной функциями переноса слов. В расширенном режиме он будет переносить длинные слова и сокращать и обрезать лишние пробелы (спасибо @soldoutactivist #1811).
  • Grunt-скрипт был обновлён для улучшения интро/аутро и настроек Pixi. Pixi был разделён на блоки интро/аутро и основной, так что вы можете исключить его интро чисто. Исключения теперь связаны, поэтому, если вы исключите Phaser UMD, он также сделает то же самое для Pixi (спасибо @spayton #2192).
  • ArcadePhysics.worldAngleToPointer получит угол (в радианах) между объектом отображения и указателем, учитывая все родительские повороты (спасибо @mattrick16 #2171).
  • Появилась новая документация по сборке Phaser для Webpack и новый пользовательский вариант сборки grunt (спасибо @deiga #2331).
  • Device.safariVersion теперь содержит основную версию браузера Safari.
  • Device.edge — это логическое значение, которое устанавливается при работе в браузере Microsoft Edge.
  • Device.dolby — это логическое значение, которое устанавливается, если браузер может воспроизводить файлы EC-3 Dolby Digital Plus.
  • Теперь Loader и SoundManager могут воспроизводить файлы Dolby Digital Plus на поддерживаемых устройствах.

Обновления

  • Исправлены определения типов TypeScript и обновления (спасибо @clark-stevenson @zimpy @iamfreee @milkey-mouse @juanmirod @danzel @staff0rd @sanchopancho13).

  • Исправлены опечатки в документации (спасибо @zeterain @staff0rd @milkey-mouse @dick-clark @nlotz @s4wny @jonjanisch @Alaxe @cdelstad @tsphillips @rblopes @vrecluse).

  • Методы Emitter at, explode. * flow, kill, revive, setAlpha, setRotation, setScale, setSize, setXSpeed, setYSpeed и start теперь возвращают экземпляр Emitter для улучшения цепочки методов (спасибо @samme #2308).

  • Tilemap.hasTile теперь возвращает false, если тайл не существует в заданных координатах (что может произойти, если координаты выходят за границы) (спасибо @cy-ryo-fujiwara #2304).

  • Update FrameData, чтобы проверить, установлен ли числовой индекс и существует ли он. Это должно исправить интеграцию Phaser Tiled (спасибо @Weedshaker #2298).

  • Loader.loadUpdate теперь получает последний вызов, когда загрузка завершена (раньше она заканчивалась, а затем вызывала loadComplete, но если у вас был обратный вызов, связанный с loadUpdate, вы никогда не получали бы это окончательное событие загрузки 100%). (спасибо @nexiuhm @McFarts #2297 #2296).

  • В определениях TypeScript Phaser теперь экспортируется как модуль в заголовке. Это позволяет вам импортировать/требовать определения TypeScript (спасибо @PixelWaffles #2255).

  • BitmapData.setHSL теперь принимает 0 в качестве допустимого параметра (спасибо @FracturedShader #2209).

  • Принудительное использование typescript 1.4.1 в package.json, чтобы определения TypeScript с комментариями были правильно перестроены (спасибо @vulvulune #2198).

  • Небольшое логическое обновление в StateManager (спасибо @jaminscript #2151).

  • Объект Style, передаваемый в Phaser.Text, теперь клонируется, а не ссылается. Это означает, что вы можете настроить отдельные экземпляры Text без аннулирования других объектов Text, использующих тот же объект стиля (спасибо @asyncanup #2267).

  • Добавлен раздел typescript в конфигурации bower и npm для поддержки tsd link (спасибо @mjohnsonengr #2189 #2180).

  • SoundManager.destroy теперь вызывает AudioContext.close (спасибо @stoneman1 #2237).

  • Sound.onEndedHandler теперь устанавливает Sound.currentTime равным Sound.durationMS (спасибо @stoneman1 #2237).

  • BitmapData всегда создавал частный _swapCanvas, который был клоном основного холста, используемого для сложных операций перемещения. Теперь этого не происходит. Swap canvas создаётся только по мере необходимости теми функциями, которые его используют (в частности, moveH и moveV), что означает, что BitmapData теперь использует вдвое меньше памяти, чем раньше, и у вас будет вдвое меньше созданных элементов DOM холста (если только вы активно не используете функции перемещения).

  • Твинов с установленным на них yoyo нельзя было использовать повторно, потому что свойства начала и конца оставались в обратном состоянии. Когда твин yoyo заканчивается, он теперь восстанавливает обратные значения (спасибо @SBCGames #2307).

  • Значения ширины и высоты, передаваемые конструктору игры, теперь передаются через Math.floor. Это гарантирует, что вы никогда не сможете создать игру с нецелочисленными размерами, что имеет всевозможные последствия — от производительности браузера до нарушения таких вещей, как рендеринг TileSprite (#2262).

  • Tilemap.getObjectIndex был удалён, поскольку в большинстве случаев он работал неправильно, и проще просто напрямую сканировать объект Tilemap.objects (спасибо #2242).

  • GameObject.revive теперь будет устанавливать количество здоровья равным 100 вместо 1, приводя его в соответствие со значением по умолчанию maxHealth.

  • Перемещение Sound.disconnect после вызова Sound.stop в Web Audio (#2280).

  • BitmapData.drawGroup теперь может обрабатывать отрисовку Emitters и объектов BitmapText, входящих в состав группы.

  • SoundManager.setTouchLock больше не устанавливается, если SoundManager.noAudio истинно или если параметр PhaserGlobal disableAudio истинен (спасибо @bcjordan #2206).

  • Loader.audiosprite переименован в Loader.audioSprite (старый всё ещё работает по устаревшим причинам) (спасибо @epaezrubio #2145).

  • EarCut теперь заменяет PolyK, что устраняет сложные проблемы с триангуляцией масок графики, такие как #1941.

  • Camera.checkBounds теперь учитывает масштаб камеры (спасибо @ForGorNorPor #2263).

  • InputHandler.consumePointerEvent был удалён, так как он никогда не использовался внутри компании, поэтому вводил в заблуждение (спасибо @GregoryAveryWeir #2227).

  • Events.onDragUpdate имеет новое шестое свойство fromStart, которое является логическим. Вы можете определить, было ли событие результатом начала движения перетаскивания, опросив его (#2155).

  • SinglePad.onDownCallback был перемещён в конец метода, так что... DeviceButton.start теперь вызывается перед срабатыванием обратного вызова, что означает, что если вы проверите статус кнопки в onDownCallback, она теперь будет полностью активирована (спасибо @suicidepills #2159).

  • Свойство z, присвоенное дочерним элементам группы, теперь начинается с нуля, а не с 1. Это внутреннее изменение, но если по какой-то причине вы полагались на свойство z, пожалуйста, имейте это в виду (спасибо pantoninho).

Исправления ошибок

  • Кнопки (или любые спрайты), у которых нет текстуры, но есть дочерние элементы, неправильно отображали дочерние элементы в WebGL из-за свойства baseTexture.skipRender (спасибо @puzzud #2141).
  • TilemapParser случайно переопределил i при разборе ImageCollections, что могло вызвать бесконечный цикл (спасибо DanHett).
  • BitmapData.update вызывает лавинообразную утечку памяти в WebGL из-за вызова Context.getImageData. BitmapData.clear раньше автоматически вызывала update, но больше этого не делает. Это решает проблему, когда класс Debug вызывал чрезмерное накопление памяти в Chrome. Firefox и IE не были затронуты (спасибо @kingjerod #2208).
  • Пауза звука, который использовал маркер для воспроизведения, также ошибочно запускала сигнал onMarkerComplete, а также останавливала fadeTween. Теперь этот сигнал отправляется только в том случае, если Sound.stop вызывается и звук не приостановлен (спасибо Corin).
  • BitmapText.text выдавал бы ошибку неопределённой текстуры, если бы вы использовали символ в строке текста, которого не было в данных шрифта.
  • Animation.stop теперь останавливает указанную анимацию только в том случае, если аргумент name передан и соответствует текущей запущенной анимации (спасибо @samme #2299 #2301).
  • TilemapParser случайно повторно объявил i при анализе слоёв тайловой карты (спасибо @ttencate и @aweber1 #2244 #2233 #2281).
  • Добавлен removeAll в заглушку TweenManagers, чтобы вызов из StageManager не вызывал ошибку в пользовательской сборке (спасибо @RetrocadeNet #2284).
  • Loader.binary возвращал бы успех, даже если xhr-файл вернул 404 или подобное (спасибо @milkey-mouse @mhstar89 #2251 #2250).
  • При загрузке аудио или видео из больших двоичных объектов или URI данных локальная переменная заменялась слишком рано, вызывая ошибки в getAudioURL и getVideoURL (спасибо @milky-mouse @jackfreak #2236 #2234).
  • Параметр Tween.hasStarted был установлен в false, когда твин создавался, но не устанавливался снова, когда твин останавливался или заканчивался. Если Tween.start используется более одного раза, обратный вызов onStart вызывается только первый раз (спасибо @javivi91 #2199).
  • Во время потери контекста WebGL кэш Phaser ссылался на неправильный локальный объект (спасибо @allenevans #2285).
  • Игровой объект Video использовал анонимную связанную функцию как для прослушивателей событий «завершено», так и для «воспроизведения», что означало, что они никогда не удалялись должным образом (спасибо @ramalhovfc #2303).
  • BitmapData.shiftHSL неправильно использовал Math.limitValue, теперь обновлён для использования Math.clamp (спасибо @FracturedShader #2222).
  • Загрузчик удалял следующий ожидающий файл из очереди, если пакет ресурсов добавлялся после начала загрузки (спасибо @tfelix #2203 #2204).
  • Указание Phaser.ScaleManager.EXACT_FIT в качестве scaleMode в объекте конфигурации игры приводило к сбою в использовании режима масштабирования (спасибо @06wj #2248).
  • BitmapText аварийно завершал работу, если пытался отрисовать символ, которого не было в наборе шрифтов. Любой символ, которого нет в наборе шрифтов, теперь отображается как символ пробела.
  • BitmapText загружал и анализировал данные кернинга из шрифта, но никогда не использовал их при рендеринге. Значения кернинга теперь применяются и при рендеринге (спасибо @veu #2165).
  • SinglePad.callbackContext теперь устанавливается через метод addCallbacks (спасибо @puzzud #2161).
  • И transparent, и antialias игнорировались, если были установлены в false в объекте конфигурации Game, поскольку метод parseConfig не проверял ложные значения (спасибо @amadeus #2302).
  • GameObject.revive раньше добавлял количество здоровья, указанное в Game Object (через heal), вместо того, чтобы устанавливать его в качестве нового количества здоровья. Теперь он вызывает setHealth вместо этого, давая ему точное количество (спасибо @netgfx #2231).
  • Group.add и Group.addAt забывали удалить дочерний элемент из хэша его предыдущей группы, если он... * У объекта физики было включено, что вызывало неограниченный рост хеша (спасибо @strawlion @McIntozh #2232).
  • Исправлена действительно неприятная ошибка в Chrome OS X, когда нажатие ctrl + click (то есть имитация правого клика) на трекпаде приводило к блокировке Pointer leftButton, из-за чего последующие клики не срабатывали. Теперь это обрабатывается с помощью слушателя mouseout для объекта window, к сожалению, это единственный способ вызвать mouseup в Chrome (спасибо @KyleU #2286).
  • Теперь ctrl + клик считается правым кликом только если event.buttons = 1, это должно позволить вам использовать ctrl в качестве модификатора ключа в Windows (и любом устройстве с многокнопочной мышью) и по-прежнему использовать ctrl + клик в OS X / трекпадах для правого клика (спасибо @yuvalsv #2167).
  • Если мышь была над спрайтом и вы затем щёлкали по нему, то отправлялось ещё одно событие Over. Теперь оно подавляется, если событие Over уже было отправлено ранее (спасибо @McFarts #2133).
  • InputHandler.pointerOver мог не возвращать ничего в некоторых случаях, теперь всегда возвращает логическое значение.
  • Tween.onLoop будет срабатывать, когда Tween повторяется, а Tween.onRepeat будет срабатывать при зацикливании Tween. Теперь они поменялись местами, чтобы срабатывать правильно (спасибо @vladkens #2024).
  • Текст с установленным lineSpacing не применял lineSpacing к последней строке текста в строке Text или к тексту с одной строкой. Это могло привести к неправильным расчётам высоты для дальнейшего макета и нежелательному заполнению внизу объектов Text (спасибо @Lopdo #2137).
  • SpriteBatch неправильно применял прототип PIXI SpriteBatch поверх Phaser.Group, из-за чего спрайты с анимацией отображались неправильно (спасибо @qdrj #1951).
  • Color.updateColor передавал color.a методу getColor32 без предварительного помещения значения в диапазон 0–255 (спасибо @mainpsyhos #2327).

Обновления Pixi

Обратите внимание, что Phaser использует собственную сборку Pixi и всегда использовал её. В нашей собственной сборке были внесены следующие изменения, но не в Pixi в целом.

  • BaseTexture.destroy больше не проверяет свойство _pixiId холста перед его удалением из CanvasPool, что означает, что теперь он уничтожает гораздо больше элементов холста, чем раньше!
  • TilingSprite игнорировал свойство renderable и рендерил его в любом случае. Теперь он пропускает рендер, если renderable ложно (спасибо @Green92 #2214).
  • Мы заменили вызовы PolyK Triangulation внутри Pixi на EarCut 2.0.8. Это позволяет быстрее триангулировать полигоны, а также обрабатывать более сложные полигоны, на которых PolyK вылетал.
  • Graphics.arc имеет новый аргумент segments, который позволяет контролировать, сколько сегментов создаётся при рисовании дуги. По умолчанию используется 40. Используйте большее число для большей точности, например, если вы обнаружите, что обратные дуги не соединяются полностью (#2064).
  • PIXI.WebGLMaskManager.pushMask и popMask теперь более надёжны в проверке того, что им были предоставлены действительные данные маски (#2152).
  • PIXI.WebGLGraphics.stencilBufferLimit — это новое целое число, которое позволяет определить, сколько точек существует в объекте Graphics, прежде чем Pixi переключится на использование буфера трафарета для его рендера. По умолчанию установлено значение 6, но может быть увеличено. Это устраняет проблемы с такими вещами, как квадратичные кривые, которые не отображаются в качестве масок в WebGL.
  • Если Display Object с маской содержал дочерний элемент с фильтром, то дочерний элемент не отображался. WebGLFilterManager теперь сохраняет состояние и создаёт новый буфер трафарета по мере необходимости (спасибо @hightopo #1842).
  • Текстура фильтра и GL Viewport теперь правильно изменяются, устраняя проблемы с пользовательскими разрешениями и фильтрами (спасибо @englercj @amadeus #2326 #2320).
  • Graphics.generateTexture имеет новый аргумент padding, который позволяет добавить дополнительное пространство к сгенерированной текстуре. Это полезно для небольших графических объектов, где вы обнаруживаете, что несколько пикселей срезаются с краёв из-за проблем с округлением (#1933).
  • DisplayObject._generateCachedSprite (который вызывается из updateCache или когда включён cacheAsBitmap) побитово | 1 ширину и высоту границ. Это часто приводило к неправильному округлению (высоты 4 становились 5, а высоты 5 оставались 5). Теперь это устранено. ### Версия 2.4.4 — «Амадор» — 15 октября 2015

Новые функции

  • Emitter.emitParticle теперь имеет 4 новых необязательных аргумента: x, y, key и frame. Они позволяют переопределить значения по умолчанию для Emitter и испустить частицу из заданных координат с новой текстурой.
  • Group.resetChild — это новый метод, который позволяет вызывать как child.reset, так и/или child.loadTexture для данного дочернего объекта. Он используется внутри getFirstDead и подобных методов, но сделан публичным, чтобы вы могли использовать его в качестве группового итерационного обратного вызова. Обратите внимание, что у дочернего элемента должны быть публичные методы reset и loadTexture, чтобы вызов был действительным.
  • У Group.getFirstDead, Group.getFirstAlive и Group.getFirstExists есть новые необязательные аргументы: createIfNull, x, y, key и frame. Если вызываемый метод не может найти соответствующий дочерний элемент (например, getFirstDead не может найти мёртвых детей), то необязательный createIfNull позволяет мгновенно создать нового ребёнка в группе, используя для этого аргументы позиции и текстуры. Это позволяет всегда получать ребёнка от Group и устраняет необходимость в проверках на null и вставках Group в коде вашей игры. Те же аргументы можно использовать и по-другому: если createIfNull ложно И вы предоставляете дополнительные аргументы И ребёнок найден, то он будет передан новому методу Group.resetChild. Это позволяет получить ребёнка из Group, сбросить его и мгновенно подготовить к использованию в игре без дополнительного кода.
  • P2.Body.removeCollisionGroup позволяет удалить заданную CollisionGroup или массив CollisionGroups из списка групп, с которыми столкнётся тело, и обновляет маски столкновений (спасибо @Garbanas #2047).
  • Filter.addToWorld позволяет быстро создать объект Phaser.Image в заданной позиции и размере с уже применённым к нему фильтром. Это избавляет от большого количества повторяющегося кода.
  • Tiled 0.13.0 добавил поддержку сжатия данных слоя при экспорте в формате JSON. Это означает, что любой .tmx, сохранённый с использованием кодировки base64, начнёт экспортировать данные слоя в виде строки, закодированной в base64, а не собственного массива. В этом обновлении добавлена автоматическая поддержка этого, пока данные не сжаты. Для поддержки IE9 вам нужно будет использовать новый полифилл, найденный в папке ресурсов (спасибо @noidexe #2084).
  • Теперь можно загружать однослойные Pyxel Edit TileMaps в виде атласа (спасибо @joshpmcghee #2050).
  • Canvas.getSmoothingPrefix вернёт значение сглаживания из контекста, если оно установлено, иначе null.
  • Генератор случайных чисел теперь может получать и устанавливать своё состояние через rnd.state. Это позволяет делать такие вещи, как сохранение состояния генератора в строку, которая может быть частью файла сохранения игры, и загружать её обратно (спасибо @luckylooke #2056 #1900).
  • Device.iOSVersion теперь содержит основной номер версии iOS.
  • Новое перечисление PointerMode было добавлено для лучшей простой дискриминации ввода в будущем между активными указателями, такими как сенсорные экраны, и пассивными указателями, такими как курсоры мыши (спасибо @pnstickne #2062).
  • Button.justReleasedPreventsOver контролирует, предотвращает ли событие только что выпущенного указателя возможность вызвать событие over.
  • Button.forceOut расширен, чтобы принимать значение PointerMode, так что им можно управлять для каждого режима ввода.
  • Phaser.KeyCode — это новый псевдотип, используемый классом Keyboard (и вашим кодом) для разделения всех констант клавиатуры на собственный файл. Это предотвращает засорение JSDocs и облегчает будущее расширение (спасибо @pnstickne #2118 #2031).

Обновления

  • Исправлены определения типов TypeScript и внесены обновления (спасибо @clark-stevenson @milkey-mouse @timotei @qdrj @Garbanas @cloakedninjas).

  • Исправления опечаток в документации (спасибо @rwrountree @yeluoqiuzhi @pnstickne @fonsecas72 @JackMorganNZ @caryanne).

  • Оптимизирован Math.average (спасибо @rwrountree #2025).

  • При вызове GameObject.revive параметр heal... Метод вызывается для применения значения здоровья, позволяя учитывать значение maxHealth, если оно установлено (спасибо @bsparks #2027).

  • Измените splice.call(arguments, ..) на использование slice вместо этого (спасибо @pnstickne #2034 #2032).

  • BitmapData.move, moveH и moveV имеют новый необязательный аргумент wrap, позволяющий вам контролировать, будет ли содержимое BitmapData обёрнуто вокруг краёв (true) или просто прокручено (false).

  • Time.desiredFps перешёл к геттеру / сеттеру.

  • Time.physicsElapsed и Time.physicsElapsedMS больше не вычисляются каждый кадр, а только при изменении desiredFps.

  • Time.update был оптимизирован, методы updateSetTimeout и updateRAF объединены, дублирующийся код удалён.

  • Time.desiredFpsMult — предварительно рассчитанный множитель, используемый в Game.update.

  • Time.refresh обновляет значения Time.time и Time.elapsedMS и автоматически вызывается Game.update.

  • DeviceButton устанавливал свойство duration для себя, что противоречило получателю только для чтения duration (спасибо @winstonwolff).

  • Добавлен стабильный Node.js v4 в конфигурацию Travis (спасибо @phillipalexander #2070).

  • Оптимизированы Canvas.getSmoothingEnabled, Canvas.setSmoothingEnabled и Canvas.setImageRenderingCrisp.

  • В Physics Editor Exporter (находится в папке ресурсов репозитория) добавлена опция префикса имён фигур и оптимизации вывода JSON (спасибо @Garbanas #2093).

  • У Touch.addTouchLockCallback появился новый аргумент onEnd, который позволяет срабатывать обратному вызову либо при событии touchstart, либо при touchend.

  • Теперь SoundManager определяет, работает ли браузер под iOS9, и использует обратный вызов touchend для разблокировки аудиосистемы. Предыдущие версии iOS (и Android) по-прежнему используют touchstart. Это исправляет ошибку Apple, связанную с изменением способа запуска Web Audio в Mobile Safari. Спасибо Apple (спасибо @MyCatCarlos за информацию #2095).

  • InputHandler.validForInput теперь проверяет, установлено ли для игрового объекта input.enabled значение false, и не проверяет его на ввод, если это так.

  • Значение по умолчанию Button.onOverMouseOnly изменилось с false на true. Если вы использовали это в своих играх с поддержкой сенсорного ввода, обратите внимание на это изменение (#2083).

  • BitmapData.clear теперь автоматически вызывает BitmapData.update в конце.

  • Новый заглушка Color добавлен для процесса пользовательской сборки. Содержит только минимум функций, необходимых для работы Phaser. Уменьшает размер файла с 48,7 КБ до 7,4 КБ. Примечание: не используйте эту заглушку, если используете объекты BitmapData.

  • Новая заглушка DOM добавлена для процесса пользовательской сборки. Содержит только минимум функций, необходимых для работы Phaser. Уменьшает размер файла с 14,8 КБ до 2,4 КБ. Примечание: не используйте эту заглушку, если используете полный Scale Manager.

  • Добавлена новая заглушка Scale Manager. Удаляет всю обработку Scale Manager из Phaser! Но экономит 75 КБ в процессе. Если вы знаете, что вам не нужно масштабировать холст Phaser или обрабатываете это извне, то можете безопасно использовать эту заглушку в пользовательской сборке.

  • Файлы PIXI.PolyK, PIXI.WebGLGraphics и PIXI.CanvasGraphics добавлены в опцию пользовательской сборки Graphics. Они всё равно не использовались, и это удаляет дополнительные 40,2 КБ из размера сборки.

  • Phaser.Create больше не создаёт объект BitmapData автоматически при запуске. Теперь он делает это только тогда, когда вы впервые создаёте текстуру или сетку.

  • Добавлена новая заглушка Create для процесса пользовательской сборки. Сокращает размер файла на 8 КБ.

  • Теперь можно исключить FlexGrid из пользовательских сборок, экономя 15 КБ.

  • ScaleManager больше не создает Phaser.FlexGrid, если класс недоступен (т. е. исключён через пользовательскую сборку).

  • Time.suggestedFps теперь по умолчанию равен Time.desiredFps для первых нескольких кадров, пока всё не стабилизируется (ранее было null) (спасибо @noidexe #2130).

  • Текст с якорем 0,5 и переносом слов теперь имеет дополнительное пространство, добавленное к его расчётам ширины, это теперь скорректировано (спасибо @nickryall #2052 #1990).

  • ScaleManager.getParentBounds теперь проверяет наличие parentNode offsetParent, прежде чем вызывать getBoundingClientRect для него (спасибо @McFarts #2134). * атласУРЛ* значение, если указан только ключ.

  • Загрузчик будет помещать baseURL и/или путь перед URL-адресами data: и blob (спасибо @rblopes #2044).

  • При вычислении ширины текста добавлялось значение strokeThickness дважды, что вызывало смещение выравнивания (спасибо @nickryall #2039).

  • Sound.onEndedHandler имеет исправление утечки памяти слушателя AudioBufferSourceNode (спасибо @Pappa #2069).

  • Game.update мог вызывать updateLogic несколько раз за один кадр при догонянии медленных частот кадров устройства. Это приводило к тому, что твинов продвигались вдвое быстрее, чем должны были (спасибо @mkristo).

  • Добавлены флаги useCapture для удаленияEventListener в классе MSPointer (спасибо @pmcmonagle #2055).

  • Под setTimeOut (или когда forceSetTimeOut было истинно) время неправильно устанавливало Time.timeExpected, вызывая задержки обновлений игры (спасибо @satan6 #2087).

  • Исправление крайнего случая, когда TilingSprite удаляется перед рендерингом (спасибо @pnstickne #2097 #2092).

  • Camera.setBoundsToWorld регулирует границы только в том случае, если они существуют (спасибо @prudolfs #2099).

  • Keyboard.addCallbacks не проверял, являются ли аргументы null, а только undefined, что делало jsdocs вводящими в заблуждение.

  • ScaleManager.getParentBounds теперь учитывает любые преобразования для получения правильных родительских границ (спасибо @jdnichollsc #2111 #2098).

  • Cache.addBitmapFont теперь применяет значение по умолчанию для x и y интервалов, если аргументы опущены (спасибо @nlotz #2128).

  • Удалено использование свойства tilePosition в классе Phaser.Rope, так как оно не реализовано и вызывало сбои при вызовах Rope.reset (спасибо @spayton #2135).

  • МасштабMin и масштабMax перестали работать в Phaser 2.3.0 из-за неправильного объёма обратного вызова (спасибо @brianbunch #2132).

Обновления Pixi

Обратите внимание, что Phaser использует собственную сборку Pixi и всегда делал это. В нашу собственную сборку были внесены следующие изменения, а не в Pixi в целом.

  • CanvasRenderer.mapBlendModes оптимизирован для уменьшения размера файла.

  • PIXI.WebGLRenderer.updateTexture теперь возвращает логическое значение в зависимости от того, была ли текстура успешно привязана к контексту gl или нет.

  • PIXI.WebGLSpriteBatch.renderBatch всё ещё пытался бы отрисовать текстуру, даже если updateTexture не удалось её привязать. Теперь он проверяет возвращаемое значение из updateTexture и игнорирует неудачные привязки.

  • WebGLRenderer.mapBlendModes оптимизирован для сокращения размера файла.

  • Sprite.getBounds сообщал бы неточное значение, если бы спрайт был масштабирован отрицательно (что приводило бы к обрезанию таких вещей, как generateTexture) (спасибо @DavidAPC #2108).

  • Удалён DisplayObject.transformCallback, поскольку это компонент игрового объекта.

  • BaseTexture.skipRender — это новое логическое значение, которое можно установить, чтобы пропустить этап рендеринга в пакете WebGL Sprite Batch. Вы можете захотеть сделать это, если у вас есть родительский спрайт без видимой текстуры (т. е. использует внутреннюю текстуру __default), у которого есть дочерние элементы, которые вы хотите отрендерить, не вызывая при этом сброса пакета.

Версия 2.4.3 — «Корамен» — 24 августа 2015 года

Новые функции

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

  • TweenManager.frameBased позволяет вам контролировать, будут ли все вновь созданные твины обновляться на основе физического шага (то есть на основе кадра) или системных часов (на основе времени). Твин на основе кадра будет использовать таймер прошедшего времени физики при обновлении. Это означает, что он будет сохранять одинаковую постоянную частоту кадров независимо от скорости устройства. Значение длительности, указанное должно быть дано в кадрах. Если твин использует обновление на основе времени (которое является значением по умолчанию), то длительность указывается в миллисекундах. В этой ситуации твин продолжительностью 2000 мс продлится ровно 2 секунды, независимо от устройства и того, сколько визуальных обновлений фактически прошёл твин.

  • Tween.frameBased делает то же самое, что и TweenManager.frameBased, но позволяет вам установить значение для каждого твина отдельно.

  • BitmapText.smoothed — это новое булево свойство, позволяющее вам устанавливать сглаживание текстуры на растровом шрифте или отключать его. По умолчанию сглаживание всегда включено, но вы можете отключить его. Pointer.isDown был сброшен перед расчётами касания ввода, поэтому onTap не будет отправляться (спасибо @stovenator #1953)

  • InputHandler.pointerOver застревал бы в состоянии isOver, если бы Sprite изменил свою видимость во время обратного вызова onUp (спасибо @Cristy94 #1955)

  • Если вы переопределите функции P2 mpx для определения собственных значений px в метрах, отладочные тела P2 будут игнорировать это (спасибо @vrecluse #1957)

  • ArrayUtils.numberArrayStep возвращал бы пустой массив, если был задан один параметр, вместо массива с одним шагом (спасибо @pooya72 #1958)

  • Текст с применёнными оттенками не обновлялся должным образом в режиме Canvas.

  • Удалено использование устаревших сигналов enterFullScreen и leaveFullScreen из Scale Manager (спасибо @mmanlod #1972)

  • BitmapText с применёнными оттенками не обновлялся должным образом в режиме Canvas (спасибо @Pajamaman #1969)

  • Group.cacheAsBitmap неправильно смещался в режиме Canvas (спасибо @mkristo #1925)

  • Text.setTextBounds не добавлял значения x и y к смещениям ширины и высоты.

  • Line.rotate использовал метод расчёта, который приводил к увеличению (или уменьшению) длины линии со временем, когда она вращалась. Новый метод никогда не изменяет длину линий.

  • BitmapText.font не смог получить новый шрифт из Phaser Cache, что помешало его правильному обновлению (спасибо @AbrahamAlcaina #2001)

  • Video.stop теперь удаляет прослушиватель событий «playing», что останавливает выдачу ошибок видео, настроенных на цикл после их уничтожения.

  • Tilemap.createFromObjects был усилен, так что он будет создавать спрайты только для совпадающих gids/ids/names. Он также устанавливает значения ширины и высоты спрайта, только если они присутствуют в данных Tiled (спасибо @pparke #2012)

  • TilingSprite._renderCanvas неправильно учитывал округление пикселей (спасибо @ximop #2022)

  • Cache.addSpriteSheet не включал значения по умолчанию для аргументов frameMax, margin и spacing (спасибо @vladkens #2017 #2018)

  • Tilemap.shuffle вызывал устаревший Phaser.Utils.shuffle, который теперь перемещён в Phaser.ArrayUtils.shuffle.

  • Включение фильтра на отображаемом объекте с установленным режимом смешивания multiply приводило к тому, что объект становился невидимым. Эти два режима нельзя комбинировать, поэтому при установке фильтра на отображаемый объект он автоматически сбрасывает режим смешивания на NORMAL. Однако обратное не происходит, поэтому, если у вас установлен фильтр, а затем вы меняете режим смешивания на multiply, он всё равно сломается. Будьте осторожны, чтобы учесть это самостоятельно (спасибо @wayfu #1994)

Версия 2.4.2 — «Альтара» — 29 июля 2015 года

Обновления

  • Исправлены и обновлены определения типов TypeScript (спасибо @clark-stevenson @shivinsky)
  • Исправления опечаток JSDoc (спасибо @DrkSephy)
  • Fixed unmatched context.save и context.restore вызовы TilemapLayer (спасибо @MortimerGoro #1934)
  • У Cache.getFrame есть новый параметр cache (по умолчанию — кэш изображений, но можно изменить на любой другой)
  • У Cache.getFrameCount есть новый параметр cache (по умолчанию — кэш изображений, но можно изменить на любой другой)
  • У Cache.getFrameData есть новый параметр cache (по умолчанию — кэш изображений, но можно изменить на любой другой)
  • У Cache.hasFrameData есть новый параметр cache (по умолчанию — кэш изображений, но можно изменить на любой другой)
  • У Cache.getFrameByIndex есть новый параметр cache (по умолчанию — кэш изображений, но можно изменить на любой другой)
  • У Cache.getFrameByName есть новый параметр cache (по умолчанию — кэш изображений, но можно изменить на любой другой)
  • Device.canPlayVideo теперь проверяет ogv как допустимое расширение файла для видеофайлов OGG (спасибо @JB-Tellez #1928)
  • Phaser.Sound теперь автоматически проверяет кэш, чтобы увидеть, находится ли аудиофайл там или нет. Если нет, то он автоматически вызывает Sound.destroy на себе. Если вы не хотите такого результата, вам следует убедиться, что вы выполняете все работы по дому и правильно уничтожаете звуковые объекты перед вызовом Cache.removeSound (#1946)

Исправления ошибок

  • DeviceButton пытался установить altKey, shiftKey и ctrlKey даже для джойстиков (спасибо @zatch #1939)
  • Pointer.move Версия 2.4.1 — «Ионина весна» — 24 июля 2015

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

Также оно изменяет скрипты сборки Grunt таким образом, что все сторонние библиотеки (такие как Creature, P2, gl-matrix и PIXI) теперь хранятся вне Phaser. Они определены и помещены первыми в файлы сборки. Больше не нужно прятать PIXI в пространстве имён Phaser или исправлять UMD для Phaser.

Обновления:

  • Среды выполнения Creature обновлены до последних версий, а класс Phaser.Creature обновлён для их использования.
  • GameObjectFactory.creature — это новый метод, который помогает быстро создавать объекты анимации Creature.
  • Cache.getPixiTexture теперь будет искать текстуру в кэше изображений, если он не сможет найти текстуру в глобальном массиве PIXI.TextureCache. Если он найдёт подходящее изображение в кэше, то вернёт новую текстуру PIXI на его основе.
  • Cache.getPixiBaseTexture теперь будет искать базовую текстуру в кэше изображений, если он не сможет найти её в глобальном массиве PIXI.BaseTextureCache.

Исправления ошибок:

  • Исправлена ошибка в Cache.getKeys для использования _cacheMap (спасибо @jamesgroat #1929).
  • Safari на OSX не распознавал нажатия кнопок на трекпадах (спасибо JakeCake).
  • Cache.removeImage теперь вызывает destroy для базовой текстуры изображения, удаляя её из глобальных кэшей PIXI без выдачи предупреждения.

Версия 2.4 — «Катар» — 22 июля 2015

Изменения API:

  • RenderTexture.render теперь принимает матрицу в качестве второго параметра, а не объект Point. Это соответствует Pixi и позволяет выполнять более сложные преобразования над объектом, который рендерится. Если вам нужно воспроизвести старое поведение, используйте RenderTexture.renderXY(sprite, point.x, point.y) вместо этого.

  • PIXI.DisplayObject.updateTransform имеет новый необязательный параметр parent. Если у DisplayObject нет родителя (то есть он ещё не находится в списке отображения), то в прошлом updateTransform не работал. Это означало, что вы не могли масштабировать или вращать Sprite, а затем рисовать его на RenderTexture или BitmapData, так как вызовы updateTransform игнорировались. Новые проверки теперь проверяют, установлен ли параметр parent. Если да, то он имеет приоритет над фактическим родителем и используется для изменения преобразования (обратите внимание, что он не заменяет родителя DisplayObject, он просто использует его для преобразования). Если нет родителя (явно или через параметр), то он возвращается к использованию Phaser.World в качестве родителя. Если он не может достичь этого, то преобразование не происходит.

  • Если Phaser.Sound.noAudio был установлен, то Phaser.Loader не загружает аудиофайлы. Ошибки не выдаются, но все вызовы Loader.audio и Loader.audiosprite игнорируются. noAudio можно установить либо через глобальную переменную PhaserGlobal, либо если устройство, на котором работает ваша игра, не поддерживает воспроизведение звука.

  • Файлы теперь можно добавлять в Loader с абсолютным URL, даже если у вас установлен Loader.baseURL. В предыдущих версиях baseURL всё равно добавлялся к URL файла, но теперь Loader проверяет, начинается ли URL файла с http или //, и пропускает добавление baseURL к нему.

  • Phaser.StateManager неправильно вызывал loadUpdate и loadRender, пока игра была приостановлена или если у State не было определённого метода update или render, даже после завершения загрузки. Хотя это исправление ошибки, это всё ещё изменение API, если вы использовали вызовы loadUpdate/Render старым способом. Также StateManager больше не вызывает preRender, если только метод State create не завершился. Если у State нет метода create, то preRender запускается немедленно.

  • Frame.uuid был удалён (был отмечен как устаревший в течение нескольких выпусков). Это имеет два эффекта: во-первых, свойство больше не существует, а во-вторых... Это означает, что AnimationParser (класс, отвечающий за загрузку листов спрайтов и атласов текстур) больше не должен вызывать RandomDataGenerator.uuid или заполнять PIXI.TextureCache. Первое экономит некоторое процессорное время, а второе экономит память, не создавая ссылок на текстуры, которые он никогда не использует. Теперь Phaser игнорирует PIXI.TextureCache, кроме текстур __missing и __default.

  • Методы Phaser.AnimationParser JSONData, JSONDataHash и XMLData теперь не имеют параметра cacheKey, так как он больше не используется.

  • Input.deleteMoveCallback больше не принимает в качестве параметра целое число. Теперь вы должны передать ему оригинальный обратный вызов и контекст, чтобы удалить его. Это сделано для защиты от аннулирования индекса (см. исправленный список ошибок).

  • Group.add и Group.addAt теперь будут создавать физическое тело для дочернего элемента только в том случае, если у него его ещё нет. В версии 2.3 это свойство заменялось новым телом, но это могло привести к накоплению мусора с течением времени, поэтому теперь вы должны правильно уничтожать тело перед его изменением.

  • Игровые объекты Button теперь имеют Input.useHandCursor, установленный по умолчанию в true.

  • Phaser.BitmapText больше не расширяет PIXI.BitmapText, а полностью заменяет его.

  • Phaser.Text больше не расширяет PIXI.Text, а полностью заменяет его. Phaser.Text теперь изначально расширяет Phaser Sprite, что означает, что его можно включить для физики, повредить и т. д.

  • Mouse.button и MSPointer.button устарели и больше не устанавливаются (они остаются равными -1). Они никогда не поддерживали сложные события нажатия кнопок, такие как удерживание двух кнопок и отпускание только одной, или любых кнопок, кроме левой и правой. Они были заменены гораздо более надёжными и точными свойствами Pointer DeviceButton, такими как Pointer.leftButton, Pointer.rightButton и так далее.

  • Phaser.DeviceButton — это новый класс, который обрабатывает определённую кнопку на устройстве ввода, например среднюю кнопку мыши, кнопку ластика стилуса или плечевую кнопку геймпада.

  • Phaser.DeviceButton.shiftKey — это логическое значение, которое указывает, была ли нажата клавиша Shift во время последнего события кнопки.

  • Phaser.DeviceButton.altKey — это логическое значение, указывающее, была ли нажата альтернативная клавиша во время последнего события кнопки.

  • Phaser.DeviceButton.ctrlKey — это логическое значение, указывающее, была ли нажата управляющая клавиша во время последнего события кнопки.

  • Phaser.GamepadButton был удалён и теперь использует DeviceButton. Произошли три внутренних изменения API: processButtonDown переименован в start, processButtonUp переименован в stop, а processButtonFloat переименован в padFloat. Если вы расширили GamepadButton в своём собственном коде, вам необходимо заменить его на DeviceButton.

  • MSPointer теперь проверяет свойство pointerType события DOM и, если оно совпадает с «mouse», обновляет Input.mousePointer, а не Input.pointer1 (или любой другой свободный указатель).

  • Time.suggestedFps теперь заполняется только в том случае, если включено Time.advancedTiming. Применение силы к телу в течение короткого периода времени

  • P2.Body.applyImpulseLocal позволяет применить импульс к точке, локальной для тела. Импульс — это сила, приложенная к телу в течение короткого промежутка времени.

  • P2.Body.getVelocityAtPoint получает скорость точки в теле.

Обновления сборки

  • Скрипт сборки Grunt теперь позволяет исключить четыре новых модуля: rope, tilesprite, creature и video.
  • Rope удаляет возможность создания спрайтов верёвки, а также удаляет классы PIXI.Rope и PIXI.Strip.
  • TileSprite удаляет возможность создания тайловых спрайтов, а также удаляет класс PIXI.TilingSprite.
  • Creature по умолчанию не включён, но позволяет контролировать поддержку анимаций на основе костей Creature.
  • Video удаляет возможность рендеринга видео и видеопотоков в текстуры.
  • Pixi больше не является опциональным модулем. Phaser больше не использует какую-либо основную ветку Pixi и имеет множество исправлений и настроек внутри себя. Поэтому теперь невозможно заменить версию Pixi, которую использует Phaser, любой другой версией, поэтому мы удалили эту опцию из пользовательского списка. Со временем мы откажемся от глобальных переменных Pixi и полностью объединим его с Phaser, чтобы избежать конфликтов с любой другой версией Pixi.

Новые функции

  • Все вызовы методов Loader, которые добавляют файлы в очередь, такие как Loader.image или Loader.atlas, теперь имеют URL в качестве необязательного параметра. Если он не установлен, Loader будет считать, что URL основан на заданном ключе. Например, следующее: game.load.image("boom", "boom.png") теперь можно выразить просто как game.load.image("boom"), или game.load.atlas("player", "player.png", "player.json") можно сократить до game.load.atlas("player"). Пожалуйста, ознакомьтесь с недавно обновлёнными jsdocs для получения полной информации.

  • Loader.atlas и Cache.addTextureAtlas теперь автоматически определяют формат данных JSON (массив или хеш) при добавлении в кэш. Вам больше не нужно указывать его явно, если это JSON, только если XML.

  • Добавлена поддержка инструмента автоматизированной анимации Creature (http://www.kestrelmoon.com/creature/). Теперь вы можете создать объект Phaser.Creature, который использует данные json и атлас текстур для анимаций. Creature — мощный инструмент анимации, похожий на Spriter или Spine. В настоящее время он ограничен только играми WebGL, но новые библиотеки должны стать хорошей отправной точкой для всех, кто хочет включить анимации Creature в свои игры.

  • У Tilemap.getTileWorldXY появился новый необязательный параметр: nonNull, который, если установлен, заставляет его вести себя так же, как getTile (спасибо @GGAlanSmithee #1722).

  • Group.hash — это массив (ранее доступный как Group._hash, но защищённый), в который вы можете добавить любого из своих дочерних элементов через Group.addToHash и Group.removeFromHash. Только дети группы могут быть добавлены в хэш и удалены из него. Хэш автоматически используется Arcade Physics для выполнения деструктивной сортировки, не основанной на z-индексе. Однако, если вы не используете Arcade Physics или это не физическая группа, вы можете использовать хэш для собственной сортировки и фильтрации детей группы, не затрагивая их z-индекс (и, следовательно, порядок отображения).

  • Group.physicsSortDirection — новое свойство, позволяющее установить собственное направление сортировки для спрайтов Arcade Physics внутри хэша Group. Ранее Arcade Physics использовала одно единственное направление сортировки (определённое в Phaser.Physics.Arcade.sortDirection), но это изменение позволяет вам точно контролировать, как сортируется каждая группа, так что теперь вы можете комбинировать высокие и широкие группы с узкими и тонкими в одной системе.

  • Cache.getPixiTexture возвращает PIXI.Texture из кэша на основе заданного ключа. PIXI Texture создаётся автоматически для всех загруженных изображений и добавляется в кэш.

  • Cache.getPixiBaseTexture возвращает PIXI.BaseTexture из кэша на основе заданного ключа. PIXI BaseTexture создаётся автоматически для всех загруженных изображений и добавляется в кэш.

  • Phaser.Matrix.clone позволяет клонировать матрицу в новый объект или скопировать её значения в заданную матрицу.

  • Phaser.Matrix.copyFrom и copyTo позволяют... Вы можете копировать значения матрицы из одних объектов Matrix в другие.

  • Phaser.Matrix.setTo позволяет установить все свойства матрицы за один вызов.

  • Конструктор Phaser.Matrix теперь позволяет опционально устанавливать все свойства матрицы при создании экземпляра.

  • У Text.setShadow появились два новых необязательных параметра: shadowStroke и shadowFill. Они позволяют задать, применяется ли тень к обводке текста, заливке текста или к тому и другому (спасибо @qdrj #1766).

  • Text.shadowStroke и Text.shadowFill позволяют независимо включать и выключать применение тени к обводке и заливке текста соответственно.

  • ArcadePhysics.Body.syncBounds — это новое свойство, которое, если установлено в true, заставляет Body проверять себя по размерам Sprite.getBounds() и соответствующим образом корректировать свою ширину и высоту. Если установлено в false, оно будет сравнивать свои размеры с масштабом Sprite и корректировать ширину и высоту, если масштаб изменился. Обычно вам нужно включить syncBounds, если ваш спрайт является дочерним элементом гибкого отображаемого объекта, такого как FlexLayer, или в любой ситуации, когда масштаб спрайта не меняется, но его родительский масштаб влияет на размеры.

  • Rectangle.ceil применяет Math.ceil() к значениям x и y прямоугольника.

  • Rectangle.ceilAll применяет Math.ceil() к значениям x, y, ширине и высоте прямоугольника.

  • Классы Net и Debug были заглушены, чтобы их можно было правильно исключить во время пользовательской сборки (спасибо @soldoutactivist #1772).

  • Device.oggVideo указывает, может ли браузер воспроизводить видеофайлы ogg.

  • Device.h264Video указывает, может ли браузер воспроизводить H264 (mp4) видеофайлы.

  • Device.mp4Video указывает, может ли браузер воспроизводить H264 (mp4) видеофайлы.

  • Device.webmVideo указывает, может ли браузер воспроизводить веб-видеофайлы с кодеком vp8.

  • Device.vp9Video указывает, может ли браузер воспроизводить веб-видеофайлы с кодеком vp9.

  • Device.hlsVideo указывает, может ли браузер воспроизводить mpeg видеофайлы.

  • PIXI.DisplayObject.worldPosition содержит позицию DisplayObject (и, следовательно, любого объекта, который наследуется от него, например Phaser.Sprite), учитывая все преобразования в списке отображения. Она обновляется в конце DisplayObject.updateTransform. DisplayObject.position отражает только позицию, применённую непосредственно к объекту, тогда как worldPosition включает позиции, которые могли быть применены к его предкам.

  • PIXI.DisplayObject.worldScale содержит масштаб DisplayObject (и, следовательно, любого объекта, который наследуется от него, например Phaser.Sprite), учитывая все преобразования в списке отображения. Он обновляется в конце DisplayObject.updateTransform. DisplayObject.scale отражает только масштаб, применённый непосредственно к объекту, тогда как worldScale включает любые масштабы, которые могли быть применены к его предкам.

  • PIXI.DisplayObject.worldRotation содержит поворот DisplayObject (и, следовательно, любого объекта, который наследуется от него, например Phaser.Sprite), учитывая все преобразования в списке отображения. Он обновляется в конце DisplayObject.updateTransform. DisplayObject.rotation отражает только поворот, применённый непосредственно к объекту, тогда как worldRotation включает любые повороты, которые могли быть применены к его предкам.

  • Loader.video позволяет загрузить видеофайл в Phaser. Он работает так же, как Loader.audio, позволяя передавать массив видеофайлов — и он загрузит первый, который устройство способно воспроизвести. При желании вы можете загрузить видео через xhr, где данные видео преобразуются в Blob после успешной загрузки.

  • Cache.addVideo позволяет добавить загруженное видео в кэш Phaser. Это вызывается автоматически загрузчиком Phaser, но также может быть вызвано напрямую.

  • Cache.checkVideoKey позволяет проверить, хранится ли видео в кэше на основе данного ключа.

  • Cache.getVideo позволяет извлечь видео из кэша на основе его ключа. Сам элемент видео (или Blob, загруженный с параметром asBlob, равным true) будет найден в свойстве data возвращённого объекта.

  • Cache.removeVideo удалит видео. Из кэша на основе заданного ключа.

  • SoundManager.onVolumeChange — это новый сигнал, который отправляется всякий раз, когда изменяется глобальный уровень громкости. Новый уровень громкости передаётся в качестве единственного параметра вашему обратному вызову.

  • SoundManager.onMute — это новый сигнал, который отправляется, когда SoundManager глобально приглушён, либо напрямую через код игры, либо в результате паузы игры.

  • SoundManager.onUnMute — это новый сигнал, который отправляется, когда SoundManager глобально не приглушён, либо напрямую через код игры, либо в результате возобновления игры после паузы.

  • Input.Touch.addTouchLockCallback позволяет добавить обратный вызов, который будет автоматически вызываться при событии touchstart. Это используется внутренне объектами SoundManager и Video для обработки разблокировки мобильного устройства, но также доступно публично.

  • Frame.resize позволяет изменить размеры объекта Frame и пересчитать все его внутренние свойства (такие как bottom и distance).

  • LoadTexture.resizeFrame позволяет изменять размеры Frame, которые объект Game использует для рендеринга. Обычно вам не нужно вызывать этот метод, но в случае специальных типов текстур, таких как Video или BitmapData, может быть полезно настроить размеры непосредственно таким образом.

  • Rectangle.bottomLeft был добавлен (спасибо @mattmogford #1788).

  • Device.firefoxVersion — это новое свойство, которое содержит основной номер версии Firefox, если работает в Firefox, иначе ноль.

  • Math.distanceSq вернёт евклидово расстояние в квадрате между двумя заданными наборами координат (спасибо @jeremyosborne #1761 #1770).

  • StateManager.onStateChange — это новый сигнал, который отправляется каждый раз, когда состояние меняется с одного на другое. Указанному вами обратному вызову отправляются два параметра: строковый ключ нового состояния и строковый ключ старого/предыдущего состояния.

  • onDragUpdate — это новый сигнал, который отправляется всякий раз, когда объект Game, включённый для ввода и перетаскивания, перемещается указателем (то есть во время события перетаскивания). См. документацию Phaser.InputHandler.enableDrag для получения информации о параметрах и новый пример Phaser.

  • Rectangle.resize позволяет изменять размер прямоугольника до заданных новых размеров без изменения его положения.

  • Cache.getJSON имеет новый параметр: clone. Если он установлен, то вернёт клон объекта, хранящегося в кэше, а не ссылку на него.

  • Circle.random вернёт равномерно распределённую случайную точку из любой точки круга.

  • Line.random вернёт случайную точку из любого места на сегменте линии.

  • Ellipse.random вернёт равномерно распределённую случайную точку из любой точки эллипса.

  • Rectangle.random вернёт равномерно распределённую случайную точку из любой точки прямоугольника.

  • Line.rotate позволяет вращать линию на заданную величину вокруг её центральной точки.

  • Device.chromeVersion вернёт основной номер версии Chrome.

  • TilingSprite.textureDebug — это новая логическая переменная, которая позволяет визуально отлаживать создаваемую текстуру TilingSprite.

  • Device.electron вернёт true, если выполняется под GitHub Electron (спасибо @rblopes #1851).

  • При загрузке BitmapText теперь можно указать либо файл XML, либо файл JSON для данных шрифта. Это полезно в таких средах, как Cocoon, где у вас нет собственного парсера XML. Если вы хотите использовать JSON, форматирование должно быть равно результату запуска действительного файла XML через X2JS (спасибо @Feenposhleen #1837).

  • Игровые объекты, имеющие компонент Health (например, спрайты), теперь имеют новый метод: heal, который добавляет заданное количество к свойству health, то есть является противоположностью damage (спасибо @stephandesouza #1794).

  • maxHealth — это новое свойство, которым обладают игровые объекты с компонентом Health и которое работает в сочетании с методом heal для обеспечения ограничения максимального здоровья.

  • Text.setTextBounds — это прямоугольная область, которая позволяет выравнивать текст внутри неё независимо от количества строк текста или положения в мире. Например, в игре размером 800x600, если вы установите textBounds равным 0,0,800,600 и выравнивание текста — «слева» и по вертикали. «ball.png»); и load.image («tree», «level1/oaktree.png»); загрузят файл ball из images/sprites/ball.png и дерево из images/sprites/level1/oaktree.png. Путь добавляется перед именем файла, но после Loader.baseURL. Путь должен заканчиваться символом «/». Установите его в значение nothing, чтобы отключить путь.

  • Loader.shader позволяет загрузить фрагмент шейдера из внешнего файла.

  • Cache.addShader добавляет фрагмент шейдера в кэш.

  • Cache.getShader получает фрагмент шейдера из кэша.

Кэш был значительно переработан внутри. Теперь все данные изображения хранятся в одном объекте, а не распределяются по глобальным кэшам PIXI (таким как PIXI.TextureCache и PIXI.BaseTextureCache), которые больше не используются Phaser.

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

У Cache.getImage есть новый аргумент, который позволяет вам возвращать либо только элемент HTML Image, либо весь объект кэша изображений, который включает в себя baseTexture и frame data.

Cache.getImage будет возвращать изображение по умолчанию, если ключ не указан, или отсутствующее изображение, если ключ указан, но не найден в кэше. Это означает, что он всегда будет возвращать действительное изображение и больше не будет вызывать ошибки времени выполнения Phaser с недопустимыми объектами изображений.

Столкновения AABB vs. AABB теперь работают в Ninja Physics. reportCollisionVsWorld уже работал и содержал всю логику, необходимую для разрешения столкновения после того, как были установлены соответствующие векторы. reportCollisionVsBody был переработан для использования этой функции (теперь она называется reportCollision общим названием) и теперь AABBs могут правильно сталкиваться, включая отскок и трение. reportCollisionVsWorld теперь является просто обёрткой вокруг reportCollision для обеспечения совместимости (спасибо @standardgaussian #1905).

Phaser.Create — это новый класс, который позволяет динамически генерировать текстуры спрайтов из массива пиксельных данных без необходимости в каких-либо внешних файлах. Мы продолжим улучшать его в следующих выпусках, но пока что ознакомьтесь с новыми примерами, показывающими, как его использовать.

Обновления

  • Исправления и обновления определений TypeScript (спасибо @clark-stevenson @isuda @ggarek @jamesgroat).
  • Исправлены опечатки JSDoc (спасибо @robertpenner @luckylooke @asyncanup @muzuiget @danxexe @rgk @matugm).
  • Добавлен отсутствующий метод resumed в шаблон класса Phaser.State.
  • Color.webToColor и Color.updateColor теперь обновляют свойства out.color и out.color32 (спасибо @cuixiping #1728).
  • Tilemap.createFromObjects был обновлён для Tiled 0.11 и теперь может искать слои объектов на основе id, uid или name. Он также теперь копирует свойства масштабирования спрайта, если они заданы (спасибо @mandarinx #1738).
  • Graphics.drawPolygon теперь может принимать объект Phaser.Polygon или PIXI.Polygon, а также массив точек (#1712).
  • В Phaser.Physics добавлены хуки для поддержки MatterJS (скоро появится).
  • Body.destroy теперь автоматически вызывает Group.removeFromHash.
  • Physics.Arcade.sort имеет новое свойство sortDirection. Если оно не указано, будет использоваться World.sortDirection. Если группа, указанная в качестве первого параметра, имеет установленное свойство physicsSortDirection, это переопределит любые другие настройки.
  • Physics.Arcade.sort теперь вызывает одну из четырёх функций: sortLeftRight, sortRightLeft, sortTopBottom и sortBottomTop. Каждая из них принимает два аргумента Sprite.
  • Physics.Arcade.sort больше не прерывается, если группа содержит смесь объектов с включённой и отключённой физикой, поскольку хэш группы теперь всегда заполняется только объектами с включенной физикой. Кроме того, функции сравнения сортировки больше не возвращают -1, если тела недействительны, а вместо этого ноль (#1721).
  • Phaser.Group автоматически добавлял дочерний элемент в массив hash, как только дочерний элемент был создан (или перемещён в группу). Этого больше не происходит. Вместо этого дочерний элемент добавляется в Group.hash, только если он включён для Arcade Physics. Однако Group.addToHash и...»

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

  • Tilemap.addTilesetImage теперь может принимать BitmapData в качестве параметра key и будет использовать BitmapData для рендеринга тайлсета вместо изображения из кэша (спасибо @unstoppablecarl за идею #1838).
  • Устройство теперь использует новый способ определения, когда Phaser работает в среде NW.js (ранее Node-WebKit), используя определение функций, вместо того чтобы полагаться на защищённое выражение require. Предыдущий способ был источником известной несовместимости с browserify и аналогичными инструментами (спасибо @rblopes #1851).
  • Столкновение Sprite и Tilemap теперь может проверять, перекрывает ли спрайт тайлмэп, не пытаясь разделить их (спасибо @Preece #1810).
  • Пример формата JSON пакета активов был обновлён, чтобы включить новые и отсутствующие форматы файлов (спасибо @rblopes #1808).
  • RenderTexture теперь учитывает альфа-канал отображаемых объектов при рендеринге, раньше он всегда сбрасывал worldAlpha до 1 перед рендерингом, игнорируя любую установленную альфу.
  • P2.enableBody теперь проверяет наличие якоря на целевом объекте перед попыткой установить его значение (спасибо @standardgaussian #1885).
  • Debug.currentAlpha не использовался для установки альфы контекста Debug вообще (всегда устанавливался в 1), но теперь обновляет альфу контекста Debug перед тем, как что-либо в него рендерится (спасибо @wayfu #1888).
  • Если устройство определяется как Windows Phone, рендерер автоматически устанавливается на использование Canvas, даже если были запрошены WebGL или AUTO (спасибо @ramarro123 #1706).
  • RandomDataGenerator.weightedPick был немного изменён, чтобы обеспечить более равномерное распределение весов. Он всё ещё отдаёт предпочтение более ранним элементам массива, но также точно включает элементы «расстояния» (спасибо @gingerbeardman #1751).
  • BitmapData.clear имеет 4 новых необязательных параметра: x, y, width и height, которые определяют область для очистки. Если они не определены, он работает точно так же, как и раньше, и очищает весь холст.
  • Добавлены Phaser.Keyboard.COMMA и Phaser.Keyboard.PERIOD в список констант.
  • Canvas.setSmoothingEnabled теперь применяет только существующее значение свойства, что позволяет избежать предупреждений об устаревании префикса Chrome webkit.
  • PIXI._CompileShader теперь может принимать массив или строку для фрагмента src.
  • AnimationParser.spriteSheet теперь может принимать либо строковый ключ, либо объект HTML Image в качестве аргумента ключа.
  • LoaderParser.bitmapFont, xmlBitmapFont и jsonBitmapFont теперь возвращают данные шрифта, а не записывают их в устаревший глобальный массив PIXI.BitmapText.fonts.
  • PIXI.BitmapText был удалён как глобальный массив, поскольку больше не используется.
  • Теперь можно использовать PIXI с Phaser при использовании requireJS (спасибо @mkristo #1923).
  • Внутренне класс Time был обновлён для разделения реализаций RAF и SetTimeout. Это значительно снижает нагрузку на цикл обновления, которая вызывала узкое место оптимизации производительности в V8.
  • TweenData.update теперь использует значение Time.elapsedMS для расчёта дельты вместо physicsStep — это потому, что твинам по своей сути присуща длительность времени, и в отстающей системе они неправильно завершались, когда должны были (также решает проблему #1819).
  • World.stateChange — это новый метод, который вызывается всякий раз, когда состояние меняется или перезапускается. Он сбрасывает координаты мира x/y обратно к нулю, а затем сбрасывает камеру.
  • Все проверки неопределённых аргументов были изменены с if (typeof x === 'undefined') на if (x === undefined), удалив проверку typeof и сэкономив несколько байтов в кодовой базе.
  • Text.updateText теперь будет проверять значения ширины и высоты холста Text, и если любое из них равно нулю, оно устанавливает Text.renderable = false, чтобы избежать ошибок привязки текстур WebGL.
  • Потеря и восстановление контекста WebGL теперь обрабатываются непосредственно Phaser.
  • Cache.clearGLTextures очищает все текстуры GL из изображений, хранящихся в кэше. Это вызывается автоматически, когда контекст WebGL теряется, а затем восстанавливается.

Исправления ошибок

  • Из компонента LoadTexture был удалён избыточный вызов dirty. Вот перевод текста на русский язык:

  • PIXI.Graphics вызывал Polygon.flatten в своём drawShape, что приводило к внутреннему изменению исходного объекта Polygon. Теперь он берёт клон многоугольника и только выравнивает его (#1779).

  • Tween.generateData не устанавливал значение по умолчанию для параметра frameRate, если оно было неопределённым, вызывая бесконечный цикл (спасибо @rblopes #1782 #1785).

  • Исправлен фильтр Pixelate, изменяющий униформу dimensions на 2f и удаляющий ненужные векторы из фрагмента src. Также исправлены геттер размера и добавлены геттеры/сеттеры sizeX и sizeY (#1780).

  • Теперь Tween.to и Tween.from могут принимать null в качестве значения параметра ease. Если это null, будет использоваться значение по умолчанию, как указано в документации (спасибо @nkovacs #1817).

  • TilemapParser.parseTiledJSON игнорировал ложные свойства, установленные для объектов в тайловых картах JSON, таких как x: 0 или visible: false. Эти свойства теперь точно копируются в целевую карту данных (спасибо @MaksJS #1818).

  • Удалено ненужное загрязнение PIXI.TextureCache в Phaser.LoaderParser.bitmapFont.

  • Sound.resume неправильно перезапускал зацикленные звуки в Chrome после паузы. Теперь Phaser специально обрабатывает ошибку в Chrome 42 и более поздние исправления (спасибо @nkovacs #1820).

  • Установка свойства BitmapText.maxWidth приводила к ошибке (спасибо @drhayes #1807).

  • При работе под Cordova и iOS логическое значение Game.lockRender устанавливается в true при паузе игры и в false при возобновлении. Это позволяет избежать сбоя приложения gpus_ReturnNotPermittedKillClient на iOS (спасибо @cncolder #1800).

  • Sound.restart и Sound.stop теперь правильно отсоединяют звук от gainNode (или внешнего узла) перед остановкой, позволяя restart работать корректно (спасибо @eofs #1796).

  • При загрузке аудиоспрайта из пакета ресурсов использовался неправильный метод Loader (спасибо @boniatillo-com #1777).

  • Из-за проблемы с Pixi 2 TileSprite при работе под WebGL не учитывал настройку альфа мира и работал только со своей собственной альфой (спасибо @hanenbro #1774).

  • TileSprite снова полностью поддерживает анимацию, которая была нарушена в течение нескольких версий из-за обновления Pixi. Мы значительно обновили способ создания текстур TileSprites внутри и вернули поддержку анимации как на Canvas, так и на WebGL (#1653).

  • Установление значения mute в false для звука, который никогда не был приглушён, приводило к установке его громкости в ноль (спасибо @brianbunch #1870).

  • P2.Body.createGroupCallback неправильно ссылался на _groupCallbackContext при его удалении (спасибо @Langerz82 #1886).

  • При повторном использовании твинов, созданных с массивом свойств, значения экспоненциально добавлялись во внутренний массив TweenData каждый раз, когда твин запускался повторно (спасибо @SBCGames #1747).

  • Чтение размеров текстового объекта сбрасывало бы его свойство разрешения (спасибо @joelika #1717).

  • Text.addColor неправильно окрашивал бы обводку текста, если она была установлена (спасибо @llevkin #1893).

  • Установка свойства scaleMode объекта конфигурации игры вызывала TypeError ScaleManager в методе resize. Теперь оно хранит режим масштаба локально и применяет его после загрузки (спасибо @Mickawesomesque #1534).

  • Device.windowsPhone теперь должен правильно идентифицировать устройства Windows Phone 8.1, которые также считают себя iOS и Android. Если вы найдёте устройство, которое обходит эту проверку, пожалуйста, пришлите нам его строку ua! (спасибо @jounii #1496).

  • Rope.segments использовал неправильное свойство vertices, вызывая ошибку времени выполнения.

  • Debug.ropeSegments не учитывал масштаб объекта Rope, вызывая некорректное отладочное рендеринг.

  • Если звук был приглушен или его громкость была изменена, пока он всё ещё декодировался (то есть до начала воспроизведения), то отключение звука и/или громкость игнорировались, и звук всё равно воспроизводился (спасибо @brianbunch #1872).

  • Group.addMultiple, если ему был передан массив Group.children в качестве первого параметра, терпел неудачу, поскольку исходная длина группы уменьшалась без учёта добавляемых детей. Group.addMultiple теперь проверяет, является ли аргумент children экземпляром Phaser.Group, и если да, то использует Group.moveAll вместо этого (спасибо @AnderbergE #1898). PIXI.DisplayObject.updateTransform теперь обнуляет свойство _currentBounds (спасибо @gaufqwi #1906)

  • Улучшена реализация JSON BitmapText (спасибо @Feenposhleen #1912 #1837)

  • game.make.group не устанавливал родителя правильно (спасибо @mthurlin #1911)

  • Исправлена ошибка ссылки для процесса в классе Device (спасибо @mkristo #1922)

  • Спрайты с телами Arcade Physics, у которых было включено collideWorldBounds, перемещались бы в неправильное положение, если вы перезапускали State (или переключались на новый State), который сбрасывал мировые границы (спасибо @vulvulune #1775)

  • PIXI.BaseTexture.fromCanvas теперь проверяет размеры холста, и если любое из лиц равно нулю, он устанавливает их равными 1px, чтобы избежать ошибок привязки текстур WebGL.

Устарело

Все следующие функции были удалены из Phaser 2.4. Они были помечены как устаревшие в Phaser 2.2 или ранее.

  • Camera.screenView
  • ScaleManager.maxIterations
  • ScaleManager.enterPortrait (см. onOrientationChange)
  • ScaleManager.enterLandscape (см. onOrientationChange)
  • ScaleManager.enterFullScreen (см. onFullScreenChange)
  • ScaleManager.leaveFullScreen (см. onFullScreenChange)
  • ScaleManager.fullScreenFailed (см. onFullScreenError)
  • ScaleManager.checkResize
  • ScaleManager.checkOrientation
  • ScaleManager.setScreenSize (см. updateLayout)
  • ScaleManager.setSize (см. reflowCanvas)
  • ScaleManager.checkOrientationState (см. reflowCanvas)
  • ScaleManager.orientation (см. screenOrientation)
  • Gamepad.disabled (см. enabled)
  • Input.currentPointers (см. totalActivePointers)
  • Input.disabled (см. enabled)
  • Keyboard.disabled (см. enabled)
  • Mouse.disabled (см. enabled)
  • Mouse.mouseMoveCallback (см. Input.addMoveCallback)
  • MSPointer.disabled (см. enabled)
  • Touch.disabled (см. enabled)
  • Cache.getUrl (см. getURL)
  • Math.truncate (см. Math.trunc)
  • Math.snapToInArray (см. Phaser.ArrayUtils.findClosest)
  • Math.interpolateFloat (см. Math.linear)
  • Math.normalizeLatitude (используйте Phaser.Math.clamp(lat, -90, 90))
  • Math.normalizeLongitude (используйте Phaser.Math.wrap(lng, -180, 180))
  • Math.chanceRoll (используйте Phaser.Utils.chanceRoll)
  • Math.numberArray (используйте Phaser.ArrayUtils.numberArray)
  • Math.numberArrayStep (используйте Phaser.ArrayUtils.numberArrayStep)
  • Math.limitValue (используйте Phaser.Math.clamp)
  • Math.randomSign (используйте Phaser.Utils.randomChoice(-1, 1))
  • Math.angleLimit (используйте Phaser.Math.clamp)
  • Math.getRandom (используйте Phaser.ArrayUtils.getRandomItem)
  • Math.removeRandom (используйте Phaser.ArrayUtils.removeRandomItem)
  • Math.floor (используйте Math.trunc)
  • Math.ceil (используйте Phaser.Math.roundAwayFromZero)
  • Math.shift (используйте Phaser.ArrayUtils.rotate)
  • Math.shuffleArray (используйте Phaser.ArrayUtils.shuffle)
  • Math.distanceRounded (округляйте локально)
  • Canvas.getOffset (см. Phaser.DOM.getOffset)
  • Canvas.getAspectRatio (см. Phaser.DOM.getAspectRatio)
  • TilemapLayer.tileColor (используйте TilemapLayer.debugSettings.missingImageFill)
  • Phaser.ArrayList псевдоним удалён, теперь используйте Phaser.ArraySet
  • Utils.transposeArray (см. Phaser.ArrayUtils.transposeMatrix)
  • Utils.rotateArray (см. Phaser.ArrayUtils.rotateMatrix)
  • Utils.shuffle (см. Phaser.ArrayUtils.shuffle).

Версия 2.3.0 — «Тарабон» — 26 марта 2015 года

Значительные обновления

Игровые объекты и компоненты

Все основные игровые объекты получили важное внутреннее реструктурирование. Мы перенесли все общие функции в новый набор классов компонентов. Они охватывают такие функции, как «Crop», «Physics Body», «InCamera» и другие. Вы можете найти исходный код каждого компонента в папке src/gameobjects/components репозитория. Все классы игровых объектов были реструктурированы для использования нового подхода на основе компонентов. Это положило конец структуре «классов-богов», которая была у нас раньше, и устранило буквально сотни строк дублирующегося кода. Это также позволило нам добавить функции игровым объектам; например, объекты растрового текста теперь являются полноправными гражданами с точки зрения физических возможностей. Хотя это было большое внутреннее изменение с точки зрения API, не так много изменилось — вы всё ещё получаете доступ к тем же методам и свойствам таким же образом, как и раньше. Теперь Phaser намного более компактен под капотом. Стоит отметить, что... * Поддерживаются повёрнутые и зеркальные тайлы в тайлмапах, экспортированных из редактора карт Tiled (спасибо @nkholski #1608).

  • TilemapParser теперь поддерживает карты версии Tiled 0.11, которая включает свойство rotation для всех типов объектов.
  • В Tilemap.createFromObjects теперь проверяется наличие свойства rotation у объекта, и если оно присутствует, оно устанавливается как Sprite.angle (#1433).
  • Если вы по какой-либо причине хотите скрыть баннер Phaser в консоли, вы можете установить window.PhaserGlobal.hideBanner в значение true, и вывод будет пропущен. Честно говоря, я бы предпочёл, чтобы вы этого не делали, но теперь такая возможность есть.
  • TilemapLayer.setScale позволит вам применить масштабирование к определённому слою тайлмапа, например, layer.setScale(2) удвоит размер слоя. Камера и аркадное столкновение будут соответственно реагировать на слой в зависимости от масштаба (спасибо @mickez #1605).
  • SoundManager.setDecodedCallback позволяет указать список звуковых файлов или ключей и обратный вызов. Как только все звуковые файлы завершат декодирование, будет вызван обратный вызов. Время, затраченное на декодирование, зависит от используемого кодека и размера файла. Если все указанные файлы уже декодированы, обратный вызов срабатывает немедленно.
  • Метод Sound.loopFull начнёт воспроизведение звука и установит его на полный цикл.
  • left, right, top и bottom — это новые свойства, которые содержат итоговые значения позиции и размеров игровых объектов с учётом привязки. Они доступны для любого игрового объекта с компонентом Bounds.
  • Sprite.offsetX и Sprite.offsetY содержат смещения от координат Sprite.x/y до верхнего левого угла Sprite с учётом привязки.
  • Emitter.flow теперь работает немного по-другому (и более полезно!). Теперь можно указать количество и общее количество. Количество контролирует, сколько частиц испускается каждый раз, когда достигается частота потока. Общее количество контролирует, сколько всего частиц будет испущено. Можно установить общее количество равным -1, и оно будет продолжать излучать с заданной частотой вечно (также исправляет #1598, спасибо @brianbunch).
  • ArraySet.removeAll позволяет удалить все элементы массива и при необходимости вызвать их уничтожение.
  • GameObject.input.dragStartPoint теперь хранит координаты объекта в момент начала перетаскивания. Это значение заполняется при начале перетаскивания. Его можно использовать для возврата объекта в исходное положение перед перетаскиванием, например, если он был сброшен в недопустимом месте в игре.
  • Text.padding определяет значение заполнения, которое добавляется к ширине и высоте строки при расчёте размера текста. Позволяет добавить дополнительное пространство, если Phaser не может точно определить истинные размеры шрифта (#1561 #1518).
  • P2 Capsule Shapes теперь поддерживают рисование BodyDebug (спасибо @englercj #1686).
  • У игровых объектов появилось новое свойство physicsType. Оно сопоставляется с константой Phaser, такой как SPRITE или GROUP, и позволяет Phaser быстрее сортировать пары для проверок столкновений в основном обработчике столкновений мира.
  • На объекты BitmapText теперь можно включить физику. При первом создании физического тела оно будет использовать размеры BitmapText на момент включения. Если вы обновите текст, он также отрегулирует ширину и высоту тела, однако любое применённое смещение будет сохранено.
  • Объекты BitmapText теперь имеют свойство anchor. Оно работает аналогично Sprite.anchor, за исключением того, что оно смещает позицию каждой буквы BitmapText на заданную величину, исходя из общей ширины BitmapText, тогда как Sprite.anchor смещает положение, в котором рисуется текстура.

Обновления

  • Исправлены определения TypeScript и внесены обновления (спасибо @Phaiax @Bilge @clark-stevenson @TimvdEijnden @belohlavek @ivw @vulvulune @zeh @englercj).

  • Существует новый файл определений TypeScript (phaser.comments.d.ts), который теперь содержит все jsdocs! (спасибо @vulvulune #1559).

  • Теперь Sound.fadeTween используется для аудиопереходов Sound.fadeIn и Sound.fadeOut.

  • Sound.stop и Sound.destroy теперь останавливают эффект затухания, если он действует.

  • Аркадная физика computeVelocity теперь допускает максимальную скорость 0, позволяя... * Браузеры, которые поддерживали multiply в Canvas path/fill ops, но не для drawImage (например, Samsung S5). Теперь используется более точный тест на смешивание пурпурного и жёлтого цветов.

  • Исправлена ошибка выхода индекса за границы FrameData.getFrame (спасибо @jromer94 #1581 #1547).

  • При вызове adjust mass в P2.Body происходила рассинхронизация отладочной графики с реальным положением тела (спасибо @tomlarkworthy #1549).

  • Исправлено CORS-подключение BitmapFonts в IE9 (спасибо @jeppester #1565).

  • TileSprites неправильно определяли события Pointer up из-за условия ветвления (спасибо @integricho #1580 #1551).

  • TileSprites не уничтожали текстуры WebGL, что приводило к ошибкам нехватки памяти (спасибо @chacal #1563).

  • Значения по умолчанию P2.Body.clearCollision были неправильно установлены в false, если параметры не предоставлялись, хотя в документации указано, что они true (спасибо @brianbunch #1597).

  • BitmapText.font не обновлял внутреннее свойство Pixi (fontName), что приводило к сбою при изменении шрифта (спасибо @starnut #1602).

  • Исправлена проблема в PIXI.Text, где использовалась неправильная строка для измерений текста descender.

  • Sprite.loadTexture и Image.loadTexture теперь больше не вызывают updateTexture, если предоставленная текстура является RenderTexture. Это устраняет проблемы с RetroFonts в IE11 WebGL, а также другие проблемы IE11, связанные с RenderTexture (#1310 #1381 #1523).

  • Теперь можно подкрашивать анимированные спрайты в режиме Canvas или изменять фрейм атласа текстур подкрашенного спрайта или изображения. Обратите внимание, что это довольно затратно (в зависимости от браузера), так как оттенок применяется заново каждый раз, когда меняется фрейм. Кэш оттенков Pixi также был удалён, чтобы обеспечить тонкие сдвиги цвета оттенка и избежать переполнения памяти. Поэтому используйте эту функцию экономно! Но, по крайней мере, теперь она работает (#1070).

  • ArcadePhysics.moveToPointer больше не сходит с ума, если задан параметр maxTime и спрайт расположен в большем игровом мире (спасибо @AnderbergE #1472).

  • Sound.loop даже при настройке для WebAudio не использовал бы свойство цикла AudioContext, потому что Sound.start вызывался со смещением и длительностью. Теперь, если loop истинно и маркер не используется, он будет использовать встроенную поддержку цикла Web Audio (#1431).

  • Timer.update вызывал обратный вызов TimerEvent, даже если TimerEvent.pendingDelete уже был установлен в true, вызывая накопление событий таймера в случаях, когда новый TimerEvent генерировался в обратном вызове (спасибо @clowerweb #838).

  • Pointer.stop вызывал event.preventDefault, если Pointer._stateReset было истинным, что всегда верно после изменения состояния и до вызова Pointer.start. Однако это нарушало взаимодействие с элементами DOM в случае, когда состояние изменяется, и вы сразу же пытаетесь использовать элемент DOM без предварительного нажатия на игру Phaser. Был добавлен дополнительный защитный механизм, поэтому preventDefault теперь будет вызываться только в том случае, если оба значения _stateReste и Pointer.withinGame истинны (спасибо @satan6 #1509).

  • Group.forEach (и многие другие методы Group) теперь напрямую использует значение children.length вместо кэширования, что улучшает производительность и предотвращает разрыв цикла, если вы удалите дочерний элемент Group в вызванном обратном вызове.

  • Phaser.Ellipse.contains снова работает (спасибо @spayton #1524).

  • PIXI.WebGLRenderer.destroy был исправлен, чтобы уменьшить glContextId и удалить его из PIXI.instances global. Game.destroy теперь подключается к этому. Теперь это означает, что вы можете удалять и создавать свою игру Phaser снова и снова, не приводя к сбоям WebGL после четвёртой попытки (#1260).

  • World.setBounds, если вызывается после того, как вы уже запустили P2 Physics, неправильно создаст новую группу столкновений для объектов стены. P2.World теперь запоминает настройки, которые вы предоставляете для каждой стены, и группу столкновений, и повторно применяет эти настройки, если когда-либо изменяются размеры мира (спасибо @nextht #1455).

  • InputHandler использовал неправильное свойство в checkBoundsSprite при fixedToCamera (спасибо @yig #1613).

  • Tween.to теперь правильно принимает массивы в качестве значений назначения, что заставляет Tween интерполировать через каждое указанное значение в массиве. Определён метод Tween.interpolation (см. новый пример, спасибо @FridayMarch26th #1619).

  • В Tween.interpolationFunction использовался некорректный контекст для вызова функции. Теперь он определён в TweenData.interpolationContext и по умолчанию равен Phaser.Math. Если вы предоставляете свою собственную интерполяционную функцию, пожалуйста, соответствующим образом настройте контекст (спасибо @FridayMarch26th #1618).

  • Метод Graphics.drawEllipse отсутствовал (спасибо @jackrugile #1574).

  • TweenData не учитывал свойство repeatDelay при повторении анимации, но теперь учитывает. У TweenData также есть новое свойство yoyoDelay, которое управляет задержкой перед началом yoyo, позволяя вам устанавливать их независимо (спасибо @DreadKnight #1469).

  • Animation.update пропускает кадры вперёд, когда система отстаёт, однако она не смогла установить анимацию на последний кадр в последовательности, если анимация пропускала слишком много кадров вперёд (спасибо @richpixel #1628).

  • Loader.preloadSprite получил дополнительный защитный механизм, чтобы гарантировать, что он не пытается обновитьCrop несуществующий спрайт (спасибо @noidexe #1636).

  • Расчёты TilemapParser для строк и столбцов были обновлены, чтобы учитывать поля и отступы со всех сторон тайлсета (спасибо @zekoff #1642).

  • Любой тайлсэт с альфа !== 1 приводил к тому, что весь слой отображался некорректно (спасибо @nkholski #1666).

  • Класс P2 Debug Body: проверка формы в draw() должна была проверять Convex последним, поскольку другие формы (например, Rectangle) наследуются от Convex (спасибо @englercj #1674).

  • Класс P2 Debug Body: функцию updateSpriteTransform() необходимо было вызывать из ctor. В противном случае тела без спрайта (поэтому без вызова postUpdate) никогда не перемещались бы для отрисовки в правильное положение (спасибо @englercj #1674).

  • Анимации теперь защищены, что позволяет уничтожать спрайты с анимациями изнутри событий onUpdate, onLoop или onComplete (спасибо @pnstickne #1685 #1679).

  • Text.lineSpacing теперь может принимать отрицательные значения без обрезания нижней части текстового объекта. Значение никогда не может быть меньше высоты одной строки текста (спасибо @anthonysapp #1690).

  • Text.lineSpacing больше не применяется к первой строке текста, что предотвращает дальнейшее обрезание текста в текстовом объекте.

  • Если вы приостанавливали звуковой объект, который использует аудиомаркеры, а затем возобновляли его, он неправильно рассчитывал продолжительность возобновления — иногда звук воспроизводился в маркер, следующий за ним (спасибо @AnderbergE #1669).

  • Animation.play неправильно устанавливал состояние воспроизведения на Game Objects AnimationManager, вызывая сбой запуска анимации (хотя вызов AnimationManager.play работал), теперь они оба работают согласованно.

  • Graphics.drawArc не смог бы нарисовать последующие дуги, если вы установили beginFill после рисования первой дуги.

  • Graphics.drawArc перемещался только в центральное положение первой созданной дуги и игнорировал все последующие дуги.

  • Graphics.drawArc теперь корректно отображает несколько дуг как в WebGL, так и в Canvas. Вам больше не нужно специально вызывать moveTo, чтобы переместиться в нужное место для рисования дуги.

  • Graphics.drawArc теперь прерывается, если startAngle = endAngle и/или развёртка недействительна перед корректировкой любых точек.

  • Graphics.drawArc теперь правильно обрабатывает заливку на CanvasRenderer, если дуга является последующей дугой и не установлен стиль линии.

Pixi 2.2.8 Исправления ошибок

  • SpriteBatch добавлен механизм исправления потери контекста пакета при изменении.
  • Исправлена проблема с разрешением RenderTexture.
  • Исправлено разрешение фильтра WebGL.
  • Устранены проблемы с TilingSprite при маскировании в режиме холста.
  • Проблема с TilingSprite.destroy исправлена, если TilingSprite никогда не рендерился.

Версия 2.2.2 — «Алкинда́р» — 6 января 2015 года

Новые функции

  • Phaser.Loader теперь поддерживает BLOB-адреса для аудиофайлов (спасибо @aressler38 #1462).
  • Line.reflect будет вычислять отражённый или исходящий угол двух линий. Это можно использовать для ответов и отскоков при столкновении тел с линией.
  • Line.normalAngle получает угол нормали линии в радианах.
  • Line.normalX и Line.normalY содержат x- и y-компоненты левой нормали линии.
  • Line.fromAngle устанавливает это. Строка начинается в заданных координатах x и y, а сегмент продолжается под заданным углом на заданную длину.

BitmapData.drawGroup рисует непосредственных потомков Phaser.Group в BitmapData. Потомки рисуются только в том случае, если для их свойства exists установлено значение true. Потомки будут нарисованы в их мировых координатах пространства x и y. При рисовании будет учитываться вращение, масштаб и альфа-значения потомка. Итерации не происходит. Группы, вложенные в другие группы, не будут повторяться.

Обновления:

  • Исправлены и обновлены определения TypeScript (спасибо @clark-stevenson @Schmavery).
  • Теперь DOM.visualBounds включает полосы прокрутки (#1429).
  • Новый код с фиксированным временным шагом более тщательно связан с обновлениями преобразования Pixi. Это должно окончательно решить проблемы туннелирования, о которых сообщалось.
  • Tween.stop запускал другой набор параметров onComplete для Tween.update. Теперь оба отправляют onComplete(target, tween) в качестве параметров в указанном порядке (спасибо @P0rnflake #1450).
  • Удален избыточный параметр tolerance из Rectangle.intersects (спасибо @toolness #1463).
  • Phaser.Graphics.drawCircle теперь переопределяет PIXI.drawCircle, что означает, что документы теперь верны относительно диаметра, а не радиуса (спасибо @ethankaminski #1454).
  • Проверка Device.webAudio инвертирована, чтобы избежать выдачи предупреждения в Chrome.
  • Mouse.mouseMoveCallback помечен как устаревший.
  • Удалить tw и th init из TilemapLayer (спасибо @nextht #1474).
  • Particles.Arcade.Emitter.makeParticles теперь проверяет заданное значение количества по сравнению с maxParticles Emitter. Если количество больше maxParticles, то значение maxParticles сбрасывается до нового заданного количества (поскольку именно так его использует большинство разработчиков).
  • Particles.Arcade.Emitter.emitParticle теперь возвращает логическое значение в зависимости от того, была ли испускана частица или нет.
  • Particles.Arcade.Emitter.update обновляет _counter только в случае успешного испускания частицы.
  • Фазер. Точка. angleSq удалена. Он не работал, поэтому любой код, полагающийся на него, был бы сломан, и неясно, для чего он предназначался (спасибо @nextht #1396).
  • BitmapData.copy tx параметр, если null, а source является Display Object, по умолчанию будет равен source.x.
  • BitmapData.copy ty параметр, если null, а source является Display Object, по умолчанию будет равен source.y.

Исправления ошибок:

  • Исправление / двойная копия для ошибки tilemap в Safari при рендеринге с прокруткой дельты. Это устраняет проблему, когда тайловые карты не обновляются в Safari OS X и iOS (спасибо @pnstickne @neurofuzzy @lastnightsparty #1439 #1498).

  • Упрощён вызов updateTransform. Это унифицированное и проверенное исправление для #1424 #1479 #1490 #1502 и решает проблемы с туннельным эффектом физики и визуальными сбоями в новом коде временного шага.

  • Tween.delay, Tween.repeat и Tween.yoyo больше не вызывают ошибку, если вызываются до создания объекта TweenData (через Tween.to или Tween.from) (спасибо @SomMeri #1419).

  • Трамплин щелчка, добавленный для IE, мешал Chrome для Android запускать полноэкранный режим с параметрами по умолчанию для ScaleManager#startFullScreen (настольная версия Chrome не пострадала). Теперь это исправлено, и доступны дополнительные параметры совместимости (clickTrampoline), которые можно использовать для настройки, когда это используется. По умолчанию режим «когда-не-мышь» включён только для настольных браузеров, где основным вводом повсеместно является мышь. Известных нарушений совместимости нет — полноэкранный режим должен быть доступен в Chrome для Android, как это было в версии 2.1.x. Стандартный браузер Android не поддерживает полноэкранный режим (спасибо @pnstickne).

  • TilemapParser теперь проверяет коллекции изображений, избегая сбоев. Они возникали с картами, экспортированными из новой версии Tiled (спасибо @paul-reilly #1440).

  • Group.replace всё ещё мог получить доступ к newChild.parent после того, как ему было присвоено значение undefined. Это объединяет подход (спасибо @pnstickne #1410 #1417).

  • Обновлён P2.postBroadphaserHandler, чтобы не пропускать последние 2 пары.

  • Конструктор P2 World не позволял вам использовать свою собственную конфигурацию, если вы не указали и гравитацию, и широкую фазу. Теперь позволяет использовать одну. Обновления Pixi.js 2.2.0

  • Класс стрипов теперь имеет три дополнительных свойства: canvasPadding, paddingX и paddingY (от @darionco).

  • Добавлена опция mipmap для текстур.

  • Добавлена возможность использовать GL_TRIANGLES при рендеринге стрипов (от @darionco).

  • Добавлена возможность подкрашивать графику.

  • Исправлена проблема с переворачиванием маски по оси Y при рендере текстуры.

  • Исправлена ошибка, когда можно было задать альфа больше единицы, и она оставалась такой же.

  • Исправлено отображение текста при использовании диакритических знаков.

  • Исправлен сбой кэширования спрайтов, не очищавших предыдущую кэшированную текстуру (от @kambing86).

  • Исправлены проблемы с arcTo.

  • Оптимизация вершинного буфера и вершинного шейдера, а также уменьшение объёма памяти при подкрашивании и альфа-смешении (от @bchevalier).

  • Применён новый общий метод updateTransform к spritebatch (от @kambing86).

Версия 2.2.1 — «Danabar» — 4 декабря 2014 года

Исправления ошибок

  • Исправлена ошибка в Pixi.js, из-за которой альфа не работала ни на одном отображаемом объекте.
  • Исправлены ошибки в TweenManager.isTweening() и .removeFrom() (от @jotson #1408).
  • Добавлен метод сброса Game.debug для случаев, когда менеджер отладки отключён (от @DanielSitarz #1407).
  • Пользовательские классы частиц, которые использовали BitmapData, не работали (от @hardalias #1402).

Версия 2.2.0 — «Bethal» — 3 декабря 2014 года

Новые функции

  • Обновление до Pixi v2.2.0. См. отдельную запись журнала изменений ниже.
  • Cache.getRenderTexture будет извлекать RenderTexture, которая хранится в Phaser Cache. Этот метод заменяет Cache.getTexture, который теперь устарел.
  • Cache.autoResolveURL — это новая логическая переменная (по умолчанию false), которая автоматически создаёт кэшированный список всех загруженных ресурсов по сравнению с их абсолютными URL-адресами для использования с Cache.getURL и Cache.checkURL. Обратите внимание, что в версиях 2.1.3 и более ранних эта функция была включена по умолчанию, но теперь она управляется этим свойством, которое необходимо установить в true перед загрузкой любых ресурсов, чтобы включить эту функцию.
  • Теперь вы можете снова вызвать Tween.to для завершённого Tween. Это повторно использует тот же самый Tween, на исходном объекте, без необходимости его повторного создания. Это позволяет многократно использовать один экземпляр Tween, если они связаны с одним и тем же объектом (спасибо InsaneHero).
  • Phaser.Color.valueToColor преобразует значение: строку «hex», строку CSS «web» или число — в компоненты красного, зелёного, синего и альфа (спасибо @pnstickne #1264).
  • Stage.backgroundColor теперь поддерживает значения CSS rgba, а также строки и числа hex (спасибо @pnstickne #1234).
  • Pointer.addClickTrampoline теперь добавляет поддержку трамплинов кликов. Они преобразуют события указателя в события кликов, которые необходимы внутри для нескольких особых случаев, таких как поддержка полноэкранного режима IE11, но также полезны, если вам известно, что вам конкретно нужен DOM-событие клика от указателя (спасибо @pnstickne #1282).
  • Point.floor будет выполнять Math.floor для значений x и y точки.
  • Point.ceil будет выполнять Math.ceil для значений x и y точки.
  • ScaleManager.scaleSprite принимает объект Sprite или Image и масштабирует его в соответствии с заданными размерами. Масштабирование... * Phaser.DOM.getBounds — это кроссбраузерный метод element.getBoundingClientRect с опциональной подушкой.
  • Phaser.DOM.calibrate — это приватный метод, который калибрует координаты элемента для проверок видового экрана.
  • Phaser.DOM.aspect получает соотношение сторон видового экрана (или соотношение сторон объекта или элемента).
  • Phaser.DOM.inViewport проверяет, находится ли данный элемент DOM в видовом экране, с опциональным параметром подушки, который позволяет указать расстояние.
  • Phaser.DOM.viewportWidth возвращает ширину видового экрана в пикселях.
  • Phaser.DOM.viewportHeight возвращает высоту видового экрана в пикселях.
  • Phaser.DOM.documentWidth возвращает ширину документа в пикселях.
  • Phaser.DOM.documentHeight возвращает высоту документа в пикселях.

Слой тайловой карты получил значительное повышение производительности на канвасе со смещением края перерисовки (спасибо @pnstickne #1250).

Проведён большой рефакторинг того, как работают внутренние игровые таймеры и физические расчёты. Теперь мы используем фиксированный временной шаг внутри Phaser вместо переменного, который раньше вызывал сбои в системах с низким fps. Спасибо pjbaron за помощь во всех этих изменениях.

Мы разделили логику и обновления рендеринга, чтобы обеспечить замедленное движение и эффекты нарезки времени. Мы исправили вызов времени, чтобы решить проблемы физики, вызванные переменными обновлениями времени (например, иногда отсутствующие столкновения, туннелирование объектов и т. д.).

Каждый кадр вызывает рендеринг и анимацию, чтобы всё было максимально плавным.

Рассчитывается значение suggestedFps (кратно 5 fps) на основе двухсекундного среднего значения фактических значений прошедшего времени в методе Time.update. Это пересчитывается каждые две секунды, поэтому его можно использовать на уровне за уровнем, если игра сильно меняется. То есть, если частота кадров постоянно падает, вы можете соответствующим образом настроить игровые эффекты.

Игровой цикл теперь пытается «догнать» кадры, если он отстаёт, повторяя обновление логики. Это поможет, если логика иногда заставляет вещи работать слишком медленно, или если рендерер иногда увеличивает общее время кадра сверх времени FPS. Однако это не панацея для игры, которая перегружает маломощное устройство, поэтому вам всё равно нужно кодировать соответствующим образом. Но это должно помочь выявить такие проблемы, как всплески сборщика мусора или временно перегруженные процессоры.

Теперь он обнаруживает «спираль», которая возникает, если много кадров выдаётся подряд, что означает, что процессор никогда не может «догнать». В этом случае он пропускает кадры вместо того, чтобы пытаться их догнать. Обратите внимание: значение времени, передаваемое функциям обновления логики, всегда постоянно, независимо от этих махинаций.

Сигнализирует игровой программе, если есть проблема, которую можно решить, снизив desiredFps.

Time.desiredFps — новая желаемая частота кадров для вашей игры. Time.suggestedFps — предложенная частота кадров для игры на основе загрузки системы. Time.slowMotion позволяет перевести игру в режим замедленного движения. Значение по умолчанию — 1.0. 2.0 будет вдвое медленнее и так далее.

Time.timeCap больше не используется и теперь устарел. Всё время теперь обрабатывается введённым нами кодом с фиксированным временным шагом.

На Time.now больше нельзя полагаться, что он содержит значение метки времени. Если браузер поддерживает requestAnimationFrame, то Time.now будет содержать значение высокого разрешения, которое генерирует rAf. В противном случае оно будет содержать значение Date.now. Если вам требуется фактическое значение времени (в миллисекундах), используйте вместо этого Time.time. Обратите внимание, что все подсистемы Phaser, которые раньше полагались на Time.now, были обновлены, поэтому, если у вас есть код, расширяющий их, обязательно проверьте его.

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

Tilemap.createFromTiles преобразует все плитки, соответствующие данной плитке. * Индексирование (или массив индексов) в Sprites. При желании вы можете заменить эти тайлы, если хотите получить дополнительный контроль над игрой. У спрайтов есть опциональный объект свойств, который можно заполнить.

  • Добавлена поддержка Wheel Event, которая соответствует спецификации DOM3 (спасибо @pnstickne #1318).

  • Поддерживаются события прокрутки колеса (старое не-FF) и DOM Mouse Wheel (старое FF) через неэкспортированный повторно используемый объект-обёртку WheelEventProxy. Методы прокси генерируются однократно динамически, но только при необходимости.

  • Key.justDown позволяет проверить, была ли клавиша только что нажата или нет. Вы можете вызвать justDown только один раз за нажатие клавиши. Он вернёт true только один раз, пока клавиша не будет отпущена и снова нажата. Это позволяет использовать его в ситуациях, когда вы хотите проверить, нажата ли эта клавиша без использования сигнала, например, в основном игровом цикле (спасибо @pjbaron #1321).

  • Key.justUp позволяет проверить, была ли клавиша только что отпущена или нет. Вы можете вызвать justUp только один раз за нажатие клавиши. Он вернёт true только один раз, пока клавиша не будет нажата и отпущена снова. Это позволяет использовать его в ситуациях, когда вы хотите проверить, отпущена ли эта клавиша без использования сигнала, например, в основном игровом цикле (спасибо @pjbaron #1321).

  • Device.whenReady — это новый сигнал, который вы можете использовать, чтобы узнать, инициализировано ли устройство.

  • Device.onInitialized отправляется после того, как происходит инициализация устройства, но до того, как будут вызваны какие-либо обратные вызовы готовности. Локальное «исправление» для конкретного устройства можно/нужно сделать в этом событии.

  • Метод TweenManager.removeFrom позволяет удалить твин из игрового объекта, такого как спрайт (спасибо @lewster32 #1279).

  • Твины были полностью переписаны. Теперь они гораздо более гибкие и эффективные, чем раньше:

    • При указании замедления в Tween.to или Tween.from теперь можно использовать строку вместо функции. Это делает ваш код менее многословным. Например, вместо Phaser.Easing.Sinusoidal.Out вы можете просто использовать строку «Sine». Строковые имена соответствуют тем, которые используются TweenMax, и включают: «Linear», «Quad», «Cubic», «Quart», «Quint», «Sine», «Expo», «Circ», «Elastic», «Back», «Bounce», «Power0», «Power1», «Power2», «Power3» и «Power4». Можно добавить варианты «.easeIn», «.easeOut» и «easeInOut». Все они поддерживаются для каждого типа замедления.

    • Теперь твинов создаёт объект TweenData. Сам объект твина больше похож на временную шкалу, управляя несколькими объектами TweenData. Теперь вы можете вызывать Tween.to, и каждый вызов будет создавать новый дочерний твин, добавляемый к временной шкале, которая воспроизводится последовательно.

    • Твинов теперь привязаны к новому значению Time.desiredFps и обновляются на основе нового основного цикла игры, а не привязаны к расчётам времени. Это означает, что твинов теперь работают с той же логикой обновления, что и физика и основной цикл.

    • Tween.timeScale позволяет масштабировать длительность твина (и любых дочерних твинов, которые у него могут быть). Значение 1,0 означает, что он должен воспроизводиться с желаемой частотой кадров. Значение 0,5 будет работать с половинной частотой кадров, 2 — с удвоенной и так далее. Можно даже анимировать значение timeScale для интересных эффектов!

    • Tween.reverse позволяет мгновенно обратить активный твин. Если у твина есть дочерние элементы, он плавно пройдёт через все дочерние твинов.

    • Tween.repeatAll позволяет контролировать, сколько раз все дочерние твинов будут повторяться перед запуском события Tween.onComplete. Можно установить значение -1 для бесконечного повторения.

    • Tween.loop теперь управляет цикличностью всех дочерних твинов.

    • Tween.onRepeat — это новый сигнал, отправляемый всякий раз, когда твин повторяется. Если твин имеет много дочерних элементов, он отправляется после повторения последовательности.

    • Tween.onChildComplete — это новый сигнал, который отправляется всякий раз, когда любой из дочерних твинов завершается. Если твин состоит из 4 секций, вы получите 3 события onChildComplete, за которыми следует 1 событие onComplete по завершении последнего твина.

    • Цепные твинов теперь обрабатываются более разумно. Поскольку вы можете легко создавать дочерние твинов (просто вызывая Tween.to несколько раз), вы можете создавать сложные последовательности твинов с лёгкостью. * Параметр explode, установленный в true), немедленно испустит необходимое количество частиц и не будет откладывать это до следующего кадра. Это означает, что вы можете повторно использовать один и тот же эмиттер в разных местах вашей игры, где требуется излучение в стиле взрыва, просто настраивая свойства emitter.x и emitter.y перед вызовом функции explode (спасибо Insanehero).

  • Phaser.Polygon был переработан для решения некоторых проблем миграции на Pixi v2 (спасибо @pnstickne за первоначальную реализацию #1267).

  • Polygon.area теперь рассчитывается только при изменении списка точек Polygon, а не при каждом вызове.

  • Теперь Phaser.Polygon может принимать список точек в различных форматах: массивы точек, числа, объекты с общедоступными свойствами x/y или любая их комбинация, либо в виде списка параметров (спасибо @pnstickne за оригинальную реализацию #1267).

  • Все классы Input теперь используют более согласованное свойство enabled вместо disabled. То есть теперь вы можете проверить if (input.mouse.enabled) вместо if (!input.mouse.disabled). Свойство disabled было перемещено в геттер для обратной совместимости, но устарело и будет удалено в будущей версии (спасибо @pnstickne #1257).

  • Класс Input был немного переработан, чтобы привести его в порядок. В частности:

    • pointerN являются псевдонимами для массива backed pointers[N-1]. Это упрощает (и повышает эффективность) перебор всех указателей, когда это применимо; также устраняет проверки существования указателя. Убраны различные жестко заданные ограничения (добавлено MAX_POINTERS); изменено значение по умолчанию maxPointers.
    • Убрано некоторое специальное использование из случаев, где это не имело значения.
    • Удалены === false/true, == использование для согласованности, изменено отсутствие проверки значения на typeof и т. д.
    • Обновлена документация для конкретности; добавлены @public@protected.
    • @deprecated currentPointers из-за странного шаблона установки; totalCurrentPointers более подходит (спасибо @pnstickne #1283).
  • Различные исправления и обновления ScaleManager (спасибо @pnstickne):

    • Режимы масштабирования теперь можно устанавливать независимо.
    • Переключение между полноэкранным и обычным режимами корректно восстанавливает режимы.
    • Выравнивание не смещается неправильно в полноэкранном режиме (#1255).
    • Изменение масштаба/выравнивания быстро обновляет макет.
    • isFullScreen возвращает логическое значение, как и должно быть.
    • Более быстрые родительские проверки (если требуется).
    • NO_SCALE не должен масштабироваться (по сравнению с предыдущим поведением отсутствия поведения).
    • Правильное использование scaleMode в зависимости от режима.
    • Полноэкранный режим всегда масштабируется, чтобы заполнить экран в Firefox (#1256).
  • AudioSprite — удален ненужный оператор if (спасибо @DaanHaaz #1312).

  • ArcadePhysics.skipQuadTree теперь установлен по умолчанию в true. QuadTree — замечательная вещь, если объекты в вашей игре хорошо разнесены. Но в плотно упакованных играх, особенно с тайловыми картами или одноэкранными играми, они значительно снижают производительность и потребляют ресурсы процессора. Мы приняли решение отключить QuadTree Arcade Physics по умолчанию. Он все еще там и может быть снова включен через game.physics.arcade.skipQuadTree = false, но делайте это только в том случае, если уверены, что ваша игра выиграет от этого.

  • В Phaser.DOM появились новые функции DOM. Некоторые из них были перенесены из ScaleManager, где это уместно.

  • Key.justPressed был переименован в Key.downDuration, что является гораздо более понятным названием того, что на самом деле делает метод. Смотрите Key.justDown для хорошей чистой альтернативы.

  • Key.justReleased был переименован в Key.upDuration, что является гораздо более понятным названием того, что на самом деле делает метод. Смотрите Key.justUp для хорошей чистой альтернативы.

  • Keyboard.justPressed был переименован в Keyboard.downDuration, что является гораздо более понятным названием того, что на самом деле делает метод.

  • Keyboard.justReleased был переименован в Keyboard.upDuration, что является гораздо более понятным названием того, что на самом деле делает метод.

  • Keyboard.downDuration, Keyboard.upDuration и Keyboard.isDown теперь все возвращают null, если ключ не найден в локальном массиве ключей.

  • Класс Phaser.Device был сделан синглтоном и удалена его зависимость от Phaser.Game (спасибо @pnstickne #1328).

  • ArrayList был... Проблемы, решённые в версии 2.1.3 (Ravinda) от 23 октября 2014 года

  • Проблемы с работой игр Phaser из CocoonJS Launcher решены.

  • Теперь отслеживается только одно событие колеса прокрутки мыши, приоритет отдаётся новейшему стандартному событию. Это решает проблему в FF, где использовалось стандартное событие DOMMouseWheel.

  • В методе Stage.smoothed необходимо изменить значение PIXI.scaleMode.DEFAULT вместо PIXI.scaleMode.LINEAR.

  • У всех вновь созданных групп теперь есть ненулевой z-индекс.

  • Sprite.autoCull теперь работает корректно, если камера перемещается по миру.

  • Sprite.inCamera использует более быструю проверку, если включены автоотсечение или проверка границ мира, и правильно настраивается для положения камеры.

  • Camera.totalInView — это новое свойство, которое содержит общее количество визуализированных спрайтов с установленным параметром autoCull и находящихся в поле зрения камеры.

  • Emitter.setScale исправляет порядок приоритета minX и minY.

  • Group.iterate теперь может принимать неопределённые/нулевые аргументы.

  • При изменении состояния физический мир P2 больше не очищается полностью. Все тела, пружины, крепления, материалы и ограничения удаляются, но настройки конфигурации, такие как гравитация, восстановление, контактный решатель и т. д., сохраняются. Объект P2.World создаётся только при первом вызове Physics.startSystem. Каждый последующий вызов обращается к P2.World.reset. Это устраняет проблемы с неработающей гравитацией P2.World после переключения состояний и другие связанные с этим проблемы.

  • Text.lineSpacing снова работает правильно. Раньше между строками не добавлялось пространство.

  • P2.BodyDebug теперь синхронизируется со своим положением в Body.postUpdate, что предотвращает отставание на один кадр при высоких скоростях.

Новые функции Pixi 2.1.0

  • Добавлен метод unloadFromGPU в PIXI.BaseTexture.
  • Добавлена PIXI.VideoTexture.
  • Добавлена PIXI.RoundedRectangle.
  • Все float32arrays используют PIXI.Float32Array.
  • Удалено использование call в updateTransform, поскольку выполнение функции напрямую в 10 раз быстрее.
  • Опция autoResize добавлена в параметры рендерера (по умолчанию false). Pixi больше не изменяет автоматически стиль холста.
  • Оптимизирован метод PIXI.RenderTexture.getCanvas.

Исправления ошибок в Pixi 2.1.0

  • Исправлен метод destroy в PIXI.WebGLRenderer.
  • Исправлено Graphics.drawRoundedRectangle.
  • Исправлена проблема с Graphics.arcTo.
  • Исправлена ошибка с Graphics.arc.
  • Исправлена проблема с альфа-каналом Graphics.cacheAsBitmap.
  • Исправлена проблема с альфа-каналом PIXI.Strip.
  • Исправлена проблема с альфа-каналом PIXI.DisplayObject.cacheAsBitmap.
  • Исправлена ошибка PIXI.RenderTexture Canvas Clear.
  • Исправлена проблема PIXI.DisplayObject.updateTransform.
  • Исправлены текстуры шейдеров webGL.
  • Исправлена работа PIXI.DisplayObject.getLocalPosition().
  • Исправлено падение CocoonJS при загрузке уничтоженной текстуры.
  • Исправлена ошибка эмиттера eventTarget.

Pixi 2.0.0 (см. список изменений ниже)

  • Обновлён до Pixi v2.0.0.

  • С радостью удалили блокировку WebGL в IE11, так как теперь Pixi полностью его поддерживает.

  • Time.prevTime — это новое свойство, содержащее необработанное значение таймера игры из предыдущего обновления.

  • Sound.fadeTo позволяет вам затухать звук до заданной громкости за указанное время. Цвет и местоположение первого непрозрачного пикселя. Можно указать одно из 4 направлений сканирования: сверху вниз, снизу вверх, слева направо и справа налево.

  • BitmapData.getBounds вернёт объект Rectangle, который охватывает всю область непрозрачных пикселей в BitmapData. Это может быть полезно, если вы хотите обрезать прозрачные пиксели с краёв BitmapData перед сохранением.

  • Rectangle.scale позволяет масштабировать ширину и высоту прямоугольника.

  • RenderTexture имеет новый необязательный параметр: resolution.

Обновления

  • Исправлены определения типов TypeScript и внесены обновления (спасибо @clark-stevenson).
  • Изменён конструктор Animation: параметр delay заменён на frameRate, так как это более точное определение того, что должно быть. Внутренне ничего не изменилось.
  • Добавлен метод Circle.getBounds.
  • Добавлен метод Ellipse.getBounds.
  • Device.canPlayAudio теперь поддерживает файлы opus напрямую, а также аудио, закодированное в формате opus, хранящееся в контейнерах ogg (#1232).
  • PIXI.AbstractFilter теперь включён по умолчанию для поддержки новой функции sprite.shader в Pixi v2.
  • Все сравнения typeof заменены с == на === (спасибо @bobbywilson0 #1230).
  • Исправления JSDoc в классе Rope (спасибо @Rovanion).
  • Filter.update теперь кэширует предыдущую позицию указателя, чтобы избежать переполнения униформы. Также униформа мыши теперь представляет собой значение от 0 до 1 в зависимости от положения в игровом окне.

Исправлены ошибки

  • Устранена ошибка ссылки на Loader.baseURL в методе Cache._resolveUrl. Это предотвращает ошибку, когда Safari показывал множество ошибок загрузки файлов, но всё равно загружал файлы (спасибо @neurofuzzy #1235).
  • Исправлено заполнение значения униформы мыши в фильтре.
  • Исправлена проблема, когда аудиофайлы с запросами после них не проходили проверки canPlayAudio (спасибо Vithar).
  • Input.hitTest теперь точно определяет попадания на крайние края отображаемого объекта (спасибо InsaneHero).
  • Button.setSounds теперь работает, если в качестве источника звука задан AudioSprite.

Новые функции Pixi v2

  • Теперь к спрайтам можно применять пользовательские шейдеры. Производительность намного выше, чем у фильтров.
  • Рендереры теперь имеют разрешение. Идеально подходит для работы с различной плотностью пикселей.
  • Большой рефакторинг веб-рендерера WebGL и рендерера WebGLSpriteBatch.
  • Рефакторинг CanvasRenderer.
  • Функция DisplayObject.updateTransform переписана для повышения производительности.
  • Новый класс Events.
  • Новый конструктор для всех рендереров (включая autoDetect).
  • Массовый рефакторинг графики (WebGL и Canvas).
  • Графические объекты теперь могут быть интерактивными.
  • Удалено сообщение об ошибке из removeChild.
  • Добавлено множество новых функций в класс Matrix.
  • Refactored RenderTexture. Теперь принимает матрицу в функции рендеринга.
  • AsciiFilter, NoiseFilter и TiltShiftFilter.
  • добавлены методы getChildIndex и setChildIndex в DisplayObjectContainer.
  • исправлены ошибки.

Исправление ошибок Pixi v2

  • Исправлена ошибка iOS8 alpha.
  • установлено значение по умолчанию отступа 0 для графических объектов.
  • начальная ширина и высота PIXI.Graphics равна 0.
  • исправлена работа Graphics getBounds.
  • исправлен кэш AsBitmap альфа-проблемы для canvas.
  • исправлён расчёт minY в updateBounds.
  • исправлена ошибка Bezier в Graphics.
  • добавлена проверка ширины 0 в DisplayObjectContainer. * cache.addXML (обычно это делается автоматически из Loader) и получение их с помощью cache.getXML(key). Также есть cache.checkXMLKey(key), cache.checkKeys и cache.removeXML(key);
  • Rectangle.aabb — новый метод, который принимает массив точек и возвращает прямоугольник, соответствующий AABB (ограничивающей области) точек (спасибо @codevinsky #1199);
  • поддержка AudioSprite теперь встроена в Loader и SoundManager. AudioSprites похожи на листы спрайтов, только они состоят из набора аудиофайлов и маркеров в конфигурации json. Вы можете найти более подробную информацию по ссылке: https://github.com/tonistiigi/audiosprite (спасибо @codevinsky #1205);
  • Point.parse вернёт новый объект Point на основе свойств x и y объекта, переданного Point.parse (спасибо @codevinsky #1198);
  • Sound.fadeOut(duration) будет постепенно уменьшать громкость звука до нуля в течение заданной длительности. В конце затухания звук будет остановлен и будет отправлен Sound.onFadeComplete;
  • Sound.fadeIn(duration, loop) начнёт воспроизведение звука или перезапустит его, если он уже воспроизводится, установит его громкость на ноль, а затем увеличит громкость в течение заданной продолжительности, пока она не достигнет 1. В конце затухания будет отправлено событие Sound.onFadeComplete;
  • Text.addColor позволяет установить определённые цвета в тексте. Он работает, принимая значение цвета, которое является типичной строкой HTML, такой как «#ff0000» или «rgb(255,0,0)», и позицию. Значение позиции — это индекс символа в строке текста, с которого начинается применение этого цвета. После установки цвет остаётся в использовании до тех пор, пока не встретится другой цвет или конец строки. Например, если текст был «Photon Storm», и вы сделали Text.addColor('#ffff00', 6), слово «Storm» будет выделено жёлтым цветом;
  • Text.clearColors сбрасывает все ранее установленные цвета из Text.addColor;
  • если вы передадите тонированный Sprite в BitmapData.draw или BitmapData.copy, он теперь будет рисовать тонированную версию Sprite на BitmapData, а не оригинальную текстуру;
  • BitmapData.shadow(color, blur, x, y) предоставляет быстрый способ установить все соответствующие настройки тени, которые затем будут использоваться в будущих вызовах отрисовки;
  • Cache.addBitmapData имеет новый параметр: frameData, позволяющий передавать объект Phaser.FrameData вместе с BitmapData;
  • Cache.getFrameData имеет новый параметр: map, который позволяет указать, из какого кэша получить FrameData, например, Phaser.Cache.IMAGE или Phaser.Cache.BITMAPDATA;
  • Sprite.loadTexture, если ему дана BitmapData в качестве текстуры, теперь будет запрашивать кэш, чтобы узнать, есть ли у него какие-либо связанные FrameData, и если да, то загрузит их в AnimationManager;
  • BitmapData.textureLine принимает объект Phaser.Line и изображение в кэше изображений. Затем он точно рисует изображение как повторяющуюся текстуру на всю длину линии;
  • AnimationManager.name теперь возвращает свойство name текущей воспроизводимой анимации, если таковая имеется;
  • Group.filter принимает функцию предиката и передаёт дочерний элемент, индекс и весь массив дочерних элементов. Затем возвращает ArrayList, содержащий всех детей, для которых предикат возвращает true (спасибо @codevinsky #1187);
  • Cache.checkUrl позволяет проверить, находится ли ресурс в кэше на основе абсолютного URL (спасибо @englercj #1221);
  • Cache.getUrl получает ресурс из кэша на основе абсолютного URL, с которого он был загружен (спасибо @englercj #1221);
  • Sound.allowMultiple позволяет одновременно иметь несколько экземпляров одного звука. Это полезно только при работе под Web Audio, и мы рекомендуем вам реализовать локальную систему пула, чтобы не перегружать звуковые каналы. Но это позволяет одному объекту Sound воспроизводиться одновременно, что полезно для эффектов стрельбы и тому подобного (#1220);

Обновления

  • исправления и обновления определений TypeScript (спасибо @clark-stevenson @englercj @benjamindulau);

  • добавлены параметры sourceRect и maskRect обратно в BitmapData.alphaMask, поскольку они были случайно удалены в версии 2.1 (спасибо seejay92);

  • исправления jsdoc (спасибо @danxexe #1209);

  • теперь AnimationParser использует value вместо nodeValue при анализе файлов атласа XML, избегая Chrome. Deprecation warnings (спасибо @valtterip #1189)

  • Color.webToColor восстановлен. Преобразует цвет rgba CSS в значение нативного цвета.

  • В Color.createColor теперь заполняется свойство color возвращаемого объекта результатами Phaser.Color.getColor.

  • В Color.createColor теперь есть свойство color32 с результатами Paser.Color.getColor32.

  • HexToColor был оптимизирован для встраивания регулярного выражения, и вызов createColor перемещён, чтобы он теперь полностью заполнял цветовой объект, а не только устанавливал свойства r, g, b.

  • Keyboard.PLUS и Keyboard.MINUS были добавлены в список кодов клавиш (спасибо @VictorBjelkholm #1281).

Исправления ошибок

  • Если игровые объекты изменяют свой фрейм, например, с помощью анимированного спрайта, и изменение происходит с ранее обрезанного фрейма на необрезанный (полноразмерный), то предыдущие значения обрезки оставались активными, вызывая сбой (спасибо stupot).
  • Если вы вызывали StateManager.start из метода init состояний, который также имел метод preload, это приводило к сбою при запуске следующего состояния.
  • StateManager.boot вызывал бы start в состоянии дважды, если оно было добавлено в игру и запущено до завершения загрузки DOM. Это не вызывало ошибки, но приводило к ненужному дублированию вызовов функций.
  • Изменение любых свойств текста, таких как шрифт, lineSpacing и fontSize, на объекте Text, который ещё не был добавлен в список отображения, вызывало ошибку updateTransform. Теперь родитель проверяется первым во всех установщиках.
  • Таймер с задержкой, которая была числом с плавающей точкой, а не целым числом, не работал корректно. Значения задержки таймера теперь передаются через Math.round, чтобы избежать этого (спасибо @osmanzeki #1196).
  • Loader неправильно вызывал fileComplete для устаревших аудиофайлов вместо того, чтобы установить его в качестве обратного вызова, выдавая ошибки, если аудиофайл не загружался (спасибо @spayton #1212).
  • Проверка Uint32Array, используемая в Utils, некорректно заменяла Uint32Array в Safari, вызывая ошибки, такие как сбой BitmapData.getPixel32, и другие связанные проблемы (исправления #1043 и #1197).
  • Camera.follow ломалась, если родитель спрайта, за которым следовали, масштабировался каким-либо образом (спасибо @englercj #1222).
  • Исправлен 4fv униформ в фильтре Pixelate.

Версия 2.1.1 — «Eianrod» — 11 сентября 2014 года

Версия 2.1.1 Phaser является экстренным выпуском. Она устраняет потенциальное состояние гонки, которое могло произойти в состояниях, пытающихся изменить состояние из метода создания, но имевших пустой прелоадер или предварительно кэшированные активы.

Версия 2.1.0 — «Cairhien» — 9 сентября 2014 года

Новые функции

  • Обновлён до p2.js 0.6.0 (https://github.com/schteppe/p2.js/commit/d1c7a340c42e4d5d1d939fba5fd13c5e49d6abd2) — это было изменением API, поэтому, пожалуйста, ознакомьтесь с разделом p2.js этого журнала изменений, особенно если вы используете p2 в своей игре.

  • Если вы используете CocoonJS, установите тип рендеринга игры на CANVAS, а не WEBGL или AUTO. Также отключите любой код изменения размера экрана или настройки полей ScaleManager. По умолчанию в этом режиме CocoonJS теперь устанавливает «screencanvas=true», что значительно повышает производительность.

  • Ninja Physics больше не включён в файлы сборки по умолчанию. Недостаточно людей использовали его, и не поступало достаточно вкладов, чтобы помочь его улучшить, поэтому мы сэкономили место и удалили его. Он всё ещё доступен в файлах сборки grunt, если вам это нужно, но мы отказываемся от него в основной библиотеке на данный момент. Он вернётся в Phaser3, когда мы перейдём к модульной системе классов.

  • ScaleManager имеет новый режим масштабирования под названием RESIZE, который скажет Phaser отслеживать размер родительского контейнера (либо элемента dom, либо окна браузера, если не указано) и устанавливать размер холста в соответствии с ним. Если родительский элемент изменит размер, холст также будет изменять размер, сохраняя соотношение пикселей 1:1. Существует также новый метод ScaleManager.setResizeCallback, который позволит вам определить собственную функцию для обработки событий изменения размера из игры, таких как повторное позиционирование спрайтов для гибкого адаптивного макета (#642).

  • Ширина и высота, передаваемые конструктору Phaser.Game, теперь могут быть числами или строками, в этом случае значением является... * P2.Body.loadData был удалён из-за устаревания.

  • P2.World.defaultFriction и defaultRestitution были удалены из-за устаревания.

  • Canvas.create noCocoon параметр был удален из-за устаревания.

  • Color.getColorInfo, RGBtoHexstring, RGBtoWebstring и colorToHexstring были удалены из-за устаревания.

  • Значения x и y в P2.PointProxy теперь возвращаются в пикселях (ранее они возвращались в метрах). См. PointProxy.mx/my для значений в метрах.

  • Значения x и y в P2.InversePointProxy теперь возвращаются в пикселях (ранее они возвращались в метрах). См. PointProxy.mx/my для значений в метрах.

  • Arcade.overlap и collide теперь более согласованы в разрешении группы против группы или группы против массива групп (благодаря @pyromanfo #877 #1147).

  • В обратных вызовах Pointer move теперь отправляется дополнительный параметр: fromClick, позволяющий вашим обратным вызовам различать указатель, который только что переместился, или переместился в результате нажатия (спасибо @iforce2d #1055).

  • Параметры GamePad и SinglePad onAxisCallback были изменены. Теперь вам отправляются: this (ссылка на SinglePad, вызвавший обратный вызов), индекс оси и значение оси в указанном порядке.

  • Если Time.elapsed было > Time.timeCap, то оно сбрасывало бы значение elapsed до 1 / 60. Теперь оно установлено на Time.timeCap, а Time.timeCap по умолчанию равно 1 / 60 * 1000, так как это значение в мс (спасибо @casensiom #899).

  • Полилинии Tiled теперь импортируются в свойство объектов карты, а также в столкновение карт (#1117).

  • Tile.setCollision теперь также корректирует список интересных граней плиток, что позволяет создавать односторонние прыжковые плитки без использования пользовательских обратных вызовов на основе конкретных плиток (спасибо @RafaelOliveira #886).

  • Stage.offset был перемещён в ScaleManager.offset.

  • Stage.bounds был удалён, вы можете получить к нему доступ через Stage.getBounds.

  • Stage.checkOffsetInterval был перемещён в ScaleManager.trackParentInterval.

  • Сигнал ScaleManager.hasResized был удалён. Вместо этого используйте ScaleManager.setResizeCallback.

  • Теперь границы мира можно установить любого размера, включая размер меньше игрового холста. Раньше он был заблокирован минимальным размером игрового холста, но теперь он может быть любым.

  • ScaleManager.orientationSprite был удалён, потому что он всё равно никогда не отображался правильно (он искажался масштабом игры), он будет возвращён в будущей версии с помощью настраиваемого состояния ориентации.

  • ArcadePhysics.overlap был обновлён таким образом, что свойства Body.overlapX/Y устанавливаются равными количеству, на которое два тела перекрываются. Ранее они были равны нулю и заполнялись только во время фазы разделения, но теперь данные доступны и для проверок перекрытия. Вы можете использовать эти значения в своём обратном вызове перекрытия по мере необходимости — обратите внимание, что они изменяются при каждой проверке, поэтому Sprite, перекрытый с 10 другими спрайтами, будет иметь значения overlapX/Y, обновлённые 10 раз за один проход столкновения, поэтому вы можете безопасно использовать значения только в обратном вызове (#641).

  • Cache.getImage теперь возвращает null, если запрошенное изображение не найдено.

  • BitmapData теперь возвращает ссылку на себя из всех своих методов рисования, что упрощает цепочку функций.

  • По умолчанию размер BitmapData, если ширина/высота не заданы, был изменён с 100x100 на 256x256.

  • Phaser.Text.destroy теперь уничтожает базовую текстуру по умолчанию (#1162).

  • BitmapData.copyPixels теперь называется BitmapData.copyRect, и подпись метода изменилась.

  • Подпись метода BitmapData.draw значительно изменилась.

  • Phaser.Canvas.getSmoothingEnabled вернёт true, если для данного контекста включено сглаживание изображений, в противном случае — false.

  • Math.numberArrayStep — это новый метод, который позволяет вам возвращать массив чисел от min до max, включая необязательный параметр step (спасибо @codevinsky #1170).

  • Из StateManager.preUpdate был удалён избыточный if (спасибо @FedeOmoto #1173). Изменения и новые функции в p2.js 0.6.0

  • Метод Phaser.Physics.P2.addPolygon теперь снова принимает вложенный массив (спасибо @wayfu #1060).

  • Исправлена проблема с предыдущим PR #1028, где вызов P2.setBoundsToWorld переопределял setBoundsToWorld в конструкторе P2 (спасибо @Dumtard #1028).

  • Исправлено масштабирование в CocoonJS с использованием рендерера webgl и screencanvas (спасибо @txusinho #1064).

  • Решена проблема с точным обнаружением щелчка или наложения на спрайты, которые использовали обрезанные атласы изображений для анимации или фреймов > 0.

  • Group.swap() правильно обновляет значения индекса Z (спасибо @Blank101 #1090).

  • Устройство теперь распознаёт ChromeOS как рабочий стол (спасибо @alvinsight @hilts-vaughan #1091).

  • Исправлен баг Point.rotate (спасибо @gamedolphin #1107).

  • InputHandler.checkBoundsRect неправильно назначал свойство в Sprite, привязанном к камере, которую перетаскивали влево (спасибо @CraigBeswetherick #1093).

  • Поменяли порядок аргументов Rectangle.containsRect (спасибо @beeglebug #1095 #1125).

  • Свойство «renderer» объекта конфигурации игры «Game» было ошибочно присвоено Game.renderer вместо renderType (спасибо @FedeOmoto #1127).

  • Fixed Group.removeBetweens по умолчанию endIndex (спасибо @darfux #1142).

  • Debug.cameraInfo больше не падает, если границы камеры обнуляются (спасибо @wayfu #1143).

  • Camera.setBoundsToWorld больше не падает, если границы камеры обнуляются (спасибо @wayfu #1143).

  • Исправлен тип разрешения в SampleFilter (спасибо @VictoryRice #1137).

  • Вызов P2.Body.destroy или ArcadePhysics.Body.destroy не обнулял родительское тело спрайта, вызывая ошибку при следующем обновлении (спасибо @jonathanhooker #1077).

  • BitmapFonts теперь правильно добавляются в Cache._bitmapFont и возвращаются через Cache.getBitmapFont (спасибо @prudolfs #1076).

  • Документы InputHandler обновлены, чтобы избежать путаницы с типом данных Pointer (#1097).

  • Если вы использовали один объект конфигурации игры и не указали свойство enableDebug, он падал при Debug.preUpdate (спасибо @luizbills #1053).

  • P2.World.postBroadphaseHandler теперь проверяет, пуст ли возвращаемый массив пар, перед его обработкой (спасибо @wayfu #934).

  • Tilemap.hasTile теперь проверяет значение индекса Tile и возвращает false, если индекс равен -1 (т. е. неактивная плитка) (спасибо @elgansayer #859).

  • Sound.restart раньше вызывал удвоение звука, если он уже воспроизводился при вызове. Теперь корректно останавливает звук перед перезапуском (спасибо @wombatbuddy #1136).

  • Обнаружение оси геймпада теперь снова работает должным образом в Firefox (#1035).

  • GamepadButton.justPressed и justReleased теперь корректно сообщают, была ли кнопка только что нажата или отпущена (спасибо @padpadpad #1019).

  • TilemapParser.getEmptyData теперь правильно добавляет пустой массив тел в слои. Это устраняет проблему, когда p2 не мог преобразовать карту csv в коллизионные плитки (спасибо @sru #845).

  • CocoonJS не поддерживает события колеса мыши, поэтому они были перемещены в условную проверку (спасибо @videlais #1151).

  • ScaleManager window.resize обработчик постоянно отправлял события enterPortrait и enterLandscape при изменении размера окна, независимо от того, действительно ли оно вошло в эту ориентацию или нет.

  • Добавлен Sound._muteVolume, который останавливает сбой Firefox и IE9, если вы пытаетесь включить звук, который ещё не был включён, что также может произойти в результате изменения видимости игры (спасибо @osmanzeki #1108 #1123).

  • P2.World.getSprings раньше возвращал пустой массив, но теперь возвращает все пружины в мире (#1134).

  • Tween.generateData пропускал конечные значения в массиве данных. Теперь они включены как объект в последнем элементе массива.

  • Rectangle.bottom сеттер поменял порядок вычислений (спасибо @JakeCoxon #1165).

  • Phaser.Text не отображал текст на локальном холсте, если вы передавали текст в конструктор и не добавляли его в список отображения. Если задана строка, она теперь обновляет локальный холст при создании.

  • Signal.removeAll игнорировал параметр контекста и удалял все привязки независимо (спасибо @alect #1168).

  • P2.Body.addCapsule раньше не передавал значение радиуса через pxm, но теперь делает это, так что вы должны указывать его в пикселях, а не метрах. Изменения в DistanceConstraint

  • Изменена сигнатура DistanceConstraint, чтобы учитывать новые localAnchors.

Изменения в World

  • В сигнатуре World.createDistanceConstraint учтены новые локальные якоря (благодаря @rhmoller #1169).
  • Сигнатура RevoluteConstraint изменена с учётом worldPivot.
  • P2.Body теперь использует новое значение Body.type вместо Body.motionState, но поскольку у P2.Body уже есть свойство с именем type, мы пока оставили геттер/сеттер motionState.
  • World.enableBodySleeping был удалён и заменён на World.sleepMode.
  • Phaser P2.Springs теперь по умолчанию являются LinearSprings.
  • Теперь можно создавать вращательные пружины с помощью World.createRotationalSpring.

Критические изменения

  • Свойство .motionState переименовано в .type в классе Body.
  • Изменён конструктор RevoluteConstraint. Теперь локальные точки поворота передаются как опции, а не как прямые аргументы. См. демо с ограничениями.
  • Удалены методы World.prototype.toJSON и .fromJSON.
  • У экземпляров World удалены свойства .enableBodySleeping и .enableIslandSleeping. Вместо них можно использовать перечисление .sleepMode. См. демонстрацию сна.
  • Spring преобразован в базовый класс для новых классов LinearSpring и RotationalSpring. LinearSpring можно использовать как старый Spring.
  • Utils.ARRAY_TYPE теперь можно переопределить, введя глобальный P2_ARRAY_TYPE. Поддержка GLMAT_ARRAY_TYPE была удалена.

Другие изменения

  • Добавлен флаг .enableFrictionReduction в Narrowphase.
  • Добавлены методы RevoluteConstraint.prototype.setLimits.
  • Добавлены методы PrismaticConstraint.prototype.setLimits.
  • LockConstraint, DistanceConstraint и GearConstraint теперь могут быть созданы из текущих преобразований тела.
  • RevoluteConstraint теперь может быть создан из текущих преобразований тела и мировой точки.
  • Идентификатор материала теперь можно передать через конструктор.
  • Экземпляры ContactMaterial теперь имеют свойство .contactSkinSize.
  • Добавлен метод Body.prototype.getAABB.
  • Ограничения для DistanceConstraint. См. демонстрацию DistanceConstraint.
  • Добавлена возможность перекрытия Body.prototype.overlaps.
  • Добавлен класс OverlapKeeper.
  • Если используется подшагивание в World.prototype.step, подшаги прерываются, если они медленнее реального времени.
  • Добавлена поддержка столкновений Heightfield/Convex и Heightfield/Circle.
  • Добавлено свойство .overlapKeeper в World.
  • EventEmitter.prototype.has теперь может проверять, были ли добавлены какие-либо слушатели к заданной теме.
  • Добавлены Utils.defaults.

Версия 2.0.7 — «Amadicia» — 18 июля 2014 года

Обновления

  • Обновление до Pixi.js 1.6.1, которое устраняет различные проблемы, такие как определения Float32 в IE9 и изменение размера и рендеринг RenderTexture.
  • Исправления и обновления определений TypeScript (спасибо @clark-stevenson и @alvinsight).
  • GameObjectFactory.spriteBatch теперь позволяет указать null в качестве параметра для родителя и автоматически добавляет пакет в game.world. Также исправлены проблемы с jsdocs (@petarov #1000).
  • Перестроен способ опроса элементов на предмет событий указателя (перетаскивание, щелчок, перемещение). Теперь быстрее и эффективнее, особенно когда некоторые элементы в стеке требуют точных проверок пикселей.
  • InputHandler.checkPointerOver теперь имеет новый параметр fastTest, который заставляет пропустить проверку пикселя, даже если она включена.
  • InputHandler.checkPointerDown теперь имеет новый параметр fastTest, который заставляет пропустить проверку пикселя, даже если она включена.
  • Ключ теперь сообщается при сбое анализа листа спрайтов (спасибо @lucbloom #1026).
  • Редактор конфигурации добавлен в основной репозиторий. См. http://editorconfig.org (спасибо @codevinksy #1027).
  • Keyboard.processKeyPress теперь проверяет, отключён обработчик ввода с клавиатуры или нет, прежде чем обрабатывать обратные вызовы клавиш.
  • Physics.bounds теперь правильно соответствует World.bounds при запуске системы (спасибо @Dumtard #1028).
  • Game._codePaused теперь устанавливается, если игра приостановлена вручную. См. обсуждение: http://www.html5gamedevs.com/topic/6719-codepaused-property/ (спасибо @devinb83 #1017).

Новые функции

  • ArrayList.setAll — устанавливает свойство для всех членов списка.
  • Sprite.loadTexture имеет новый необязательный логический параметр stopAnimation, который остановит текущую анимацию (если таковая имеется) после изменения текстуры (на основе #1029).
  • Animation.updateFrameData позволяет загружать... В запросе представлен текст технической направленности из области разработки и тестирования программного обеспечения. Основной язык текста запроса — английский.

Перевод:

Добавление нового объекта FrameData в существующую анимацию, даже если она сейчас запущена (на основе #1029)

  • AnimationManager.loadFrameData теперь обновляет все существующие анимации, чтобы использовать только что загруженный объект FrameData (на основе #1029).
  • Sprite.loadTexture теперь сохраняет свойство smoothed объекта Sprite и повторно применяет его после загрузки новой текстуры.
  • Group.checkAll позволяет проверить, существует ли одно и то же свойство у всех дочерних элементов группы и установлено ли оно на заданное значение (спасибо @codevinsky #1013).
  • Group.checkProperty позволяет проверить, существует ли свойство у заданного дочернего элемента группы и установлено ли оно на указанное значение (спасибо @codevinsky #1013).
  • Phaser.Utils.setProperty устанавливает свойство объекта независимо от глубины (спасибо @codevinsky #1013).
  • Phaser.Utils.getProperty получает свойство объекта независимо от глубины (спасибо @codevinsky #1013).

Исправления ошибок

  • Исправлено идеальное перетаскивание пикселей (спасибо @jeroenverfallie #996).
  • Debug.preUpdate всё ещё вызывался в игровом цикле, даже если enableDebug было установлено в false (спасибо @qdrj #995).
  • Phaser.Physics.P2.Body.addPolygon не работал с плоским массивом чисел для координат (спасибо @petarov, исправление #883).
  • Добавлен отсутствующий Loader.onPackComplete Signal (спасибо @mjeffery #1007).
  • Уровневое QuadTree: вместо level++, который изменяет текущий уровень узлов, подузлы должны получать текущий уровень узла + 1 (спасибо @devinb83 #1018).
  • Предотвращено переопределение объектов с идеальными пиксельными проверками другими элементами с более высоким приоритетом ID (#983).
  • Group.create не создавал с флагом отладки p2 (спасибо @Dumtard #1014).
  • World.wrap при использовании границ объекта не корректировал границы должным образом, что означало сбой обёртывания за пределами камеры (спасибо @jackrugile #1020).
  • Pixi обновил worldTransform из массива до объекта, а Phaser Image, BitmapText, Text и Graphics по-прежнему использовали доступ к массиву для заполнения свойства world, что давало неверные результаты (спасибо @alvinsight).
  • Если вы добавляете Tween в TweenManager и сразу же останавливаете его, он всё равно будет существовать в TweenManager (спасибо @gilangcp #1032).
  • AnimationManager не обновляет currentFrame при воспроизведении до второго кадра (спасибо @Dumtard #1041).
  • Анимация теперь защищена от _frameData, являющегося нулевым (спасибо @lucbloom #1033).
  • Tilemap.swap теперь точно меняет местами от A до B и от B до A (спасибо @noidexe #1034).
  • BitmapData.resize исправлен для обновления свойства crop, решает проблемы с изображениями, которые обрезаются с помощью BitmapData.load.
  • Исправление ориентации Sprite, поскольку оно больше не использует PIXI.TextureCache (спасибо @DarkDev- #1036).

Версия 2.0.6 — «Jornhill» — 10 июля 2014 года

Значительные внутренние изменения

  • Глобальный массив PIXI.TextureCache больше не используется внутри для хранения файлов текстур Pixi. На самом деле это не требование Pixi, и мы сталкивались с различными проблемами конфликтов текстур в тестах DragonBones и проблемами с общими фреймами текстур между спрайтами. Это означало, что мы не могли обрезать спрайт без обрезки всех экземпляров, если только мы не создавали новый кадр текстуры во время выполнения, что, как вы можете себе представить, является огромным накладным расходом, если затем вы хотите обрезать анимированный спрайт.

После разговора с Мэтом из GoodBoyDigital об этой проблеме возникла идея просто вообще не использовать TextureCache, а позволить каждому спрайту иметь свой собственный кадр. Так что это направление, в котором мы пошли. Мы не стали откладывать это до версии 2.1, так как это фактически не меняет API Phaser, но меняет то, как всё работает внутри. Поэтому, если у вас есть игровой код, напрямую подключённый к TextureCache, вам необходимо знать об этом изменении перед обновлением до 2.0.6.

  • Изменён способ работы Sprite.crop. Теперь он будет корректировать размеры самого спрайта, оставаясь в предыдущих координатах x/y спрайтов. Пожалуйста, имейте это в виду, если вы используете обрезанные спрайты в своей игре. Однако изменение того стоило, поскольку в результате оно стало значительно более мощным.

Обновления

  • Объединение Pixi 1.6.0 с Phaser — все замечательные новые возможности Pixi. * Извлекаются пиксели по мере их отрисовки в новый BitmapData.
  • BitmapData.load принимает игровой объект или строку и изменяет размер BitmapData в соответствии с ним, а затем отрисовывает пиксели.
  • Keyboard.addCallbacks теперь имеет новый параметр для захвата события нажатия клавиши.
  • Keyboard.pressEvent сохраняет последнее событие нажатия клавиши DOM.
  • Keyboard.processKeyDown теперь запускает обратный вызов после создания и/или обновления всех объектов.
  • Keyboard.processKeyUp теперь запускает обратный вызов после создания и/или обновления всех объектов.
  • Phaser.Keyboard.lastChar возвращает строковое значение последней нажатой клавиши.
  • Phaser.Keyboard.lastKey возвращает последний нажатый объект Key.
  • RetroFont.updateOffset позволяет изменять значения offsetX/Y, используемые шрифтом во время рендеринга.
  • ArcadePhysics.Body имеет новое логическое свойство enable. Если значение равно false, тело не будет проверяться на коллизии или перекрытия, и его методы pre или post update не будут вызываться. Используйте это для простого переключения физических тел без необходимости уничтожать или заново создавать сам объект Body.
  • BitmapData.addToWorld создаст новый объект Phaser.Image, назначит BitmapData его текстурой, добавит его в мир и вернёт его.
  • BitmapData.copyPixels теперь принимает Sprite, Image, BitmapData, HTMLImage или строку в качестве источника.
  • Loader.pack позволит вам загрузить новый файл JSON пакета активов Phaser. Пакет активов — это специально структурированный файл, который позволяет определить все активы для вашей игры во внешнем файле. Файл можно разделить на разделы, что позволяет контролировать загрузку определённого набора файлов из него. Пример файла JSON можно найти в папке resources\Asset Pack JSON Format, а примеры использования — в репозитории примеров Phaser.
  • Loader.totalQueuedPacks возвращает количество пакетов активов в очереди.
  • Loader.totalLoadedPacks возвращает количество уже загруженных пакетов активов.
  • Emitter.explode — это новый ярлык для одновременного взрыва фиксированного количества частиц.
  • Emitter.flow — это новый ярлык для создания потока частиц на основе заданной частоты.
  • Sprite.crop (и Image.crop) был полностью переработан. Теперь вы можете обрезать анимированные спрайты (лист спрайтов и атлас текстур), вы можете определить смещение x/y обрезки, а прямоугольник обрезки отображается в свойстве Sprite.cropRect.
  • Sprite.updateCrop доступен, если вы хотите обновить прямоугольник обрезки, на который есть внешняя ссылка.
  • У спрайтов и изображений теперь есть свои собственные объекты текстур, они больше не являются ссылками на те, которые хранятся в глобальном Pixi.TextureCache. Это позволяет динамически переопределять кадр текстуры без нарушения работы других спрайтов в вашей игре, например, путём обрезки. Они по-прежнему используют общие базовые текстуры, поэтому ссылки на изображения сведены к минимуму.
  • Sprite.resetFrame вернёт текстуру спрайта к её исходным размерам. Это вызывается, когда вы вызываете Sprite.crop без прямоугольника, чтобы сбросить эффект обрезки, но может быть полезно в других ситуациях, поэтому мы оставили его как общедоступный метод.
  • Слои тайловой карты теперь можно использовать с неограниченной камерой (камерой, которая может перемещаться за пределы мира). В настоящее время, когда неограниченная камера перемещается за пределы мира, тайловые карты начинают вести себя странно, потому что они отображаются только строго в пределах границ мира. С этим изменением тайловая карта продолжит прокручиваться и показывать пустое пространство за своим краем (спасибо @jotson #851).
  • Свойство TilemapLayer.wrap — если оно истинно, карта отображается так, как будто она находится на поверхности тороида (бублика), а не плоскости. Это позволяет играм плавно переходить от одного края к противоположному краю мира, не замечая перехода. Обратите внимание, что размер мира должен соответствовать размеру карты (спасибо @jotson #851).
  • Добавлены сопоставления кнопок контроллера PlayStation 3 в Phaser.Gamepad (спасибо @wayfu).
  • Метод GamepadButton.destroy добавлен. Вызывается автоматически SinglePad при отключении контроллера.
  • Добавлен Math.factorial (спасибо @alvinsight, #940).
  • Добавлена полная поддержка мышиного колеса, с новыми константами и обратными вызовами для движения колёсика мыши (спасибо @woutercommandeur, #959).
  • Версия Phaser. * В Pixi PixelateFilter был добавлен @paperkettle #939).
  • TileMap.setPreventRecalculate позволяет включать / выключать пересчёт граней тайлов для коллизии тайлов, что удобно при изменении больших частей карты, чтобы избежать замедления (спасибо @sivael, #951).
  • Group.add имеет новый необязательный логический параметр: silent. Если установлено значение true, дочерний элемент не будет отправлять событие onAddedToGroup.
  • Group.addAt имеет новый необязательный логический параметр: silent. Если установлено значение true, дочерний элемент не будет отправлять событие onAddedToGroup.
  • Group.remove имеет новый необязательный логический параметр: silent. Если установлено значение true, дочерний элемент не будет отправлять событие onRemovedFromGroup.
  • Group.removeBetween имеет новый необязательный логический параметр: silent. Если установлено значение true, дети не будут отправлять свои события onRemovedFromGroup.
  • Group.removeAll имеет новый необязательный логический параметр: silent. Если установлено значение true, дети не будут отправлять свои события onRemovedFromGroup.
  • Внутренние перемещения детей в группе (например, bringToTop) теперь используют новый параметр silent, чтобы избежать отправки ребёнком некорректных событий добавления и удаления из группы.
  • Camera.updateTarget была переработана и теперь работает более плавно при определённых условиях (спасибо @tjkopena, исправление #966).
  • Signal.removeAll теперь имеет новый параметр context. Если указано, удаляются только слушатели, соответствующие заданному контексту (спасибо @lucbloom за идею, #880).
  • Animation.next переходит к следующему кадру анимации, даже если она сейчас не воспроизводится. Можно дополнительно определить количество кадров для перехода, но по умолчанию это 1. Это также псевдоним AnimationManager, поэтому можно сделать Sprite.animations.next().
  • Animation.previous возвращается к предыдущему кадру анимации, даже если он сейчас не воспроизводится. Можно дополнительно определить количество кадров для возврата, но по умолчанию это 1. Это также псевдоним AnimationManager, поэтому можно сделать Sprite.animations.previous().
  • Теперь можно отлаживать рендеринг объектов AABB и Circle Ninja Physics (спасибо @psalaets, #972).
  • Phaser.Utils.mixin смешивает исходный объект с целевым объектом, возвращая вновь изменённый целевой объект.
  • Можно использовать game.add.plugin из GameObjectFactory (спасибо @alvinsight, #978).
  • Color.getWebRGB теперь принимает либо объект, либо числовое значение цвета.
  • Rectangle.randomX возвращает случайное значение, находящееся в пределах горизонтальных границ прямоугольника.
  • Rectangle.randomY возвращает случайное значение, расположенное в пределах вертикальных границ прямоугольника.
  • Используя объект конфигурации игры, теперь можно указать значение флага preserveDrawingBuffer для средства визуализации WebGL. По умолчанию он отключён из соображений производительности. Но если вам нужно иметь возможность делать снимки экрана ваших игр WebGL с помощью toDataUrl на игровом холсте, вам нужно установить его в true (#987).
  • Добавлены параметры для индивидуального отключения горизонтальной и вертикальной обёртки мира (спасибо @jackrugile, #988).
  • Теперь вы можете предотвратить создание или загрузку класса Debug, используя настройку конфигурации игры: enableDebug. По умолчанию это true, установите значение false, чтобы класс не создавался. Обратите внимание, что вы несёте ответственность за проверку существования этого класса перед его вызовом, но вы можете сделать это через if (game.debug) { ... } (запрос #984).

Исправления ошибок

  • Свойство Sprite.alive теперь явно определено в прототипе Sprite (спасибо @lewster32, #841).

  • BitmapData.resize теперь правильно обновляет baseTexture и размеры текстуры.

  • Исправлена проблема с геймпадом, которая неправильно проверяла геймпад без префикса webkit.

  • Phaser.RenderTexture неправильно передал scaleMode в Pixi.RenderTexture, вызывая ошибку в рендерере.

  • Данные анимации спрайта не сбрасывались при переходе от листа спрайтов к одному кадру в Sprite.loadTexture (спасибо @lucbloom, исправление #850).

  • Timer.ms будет сообщать значение игрового времени в мс, если таймер ещё не запущен, вместо 0.

  • Timer.seconds будет сообщать значение игрового времени, если таймер ещё не запущен, вместо 0.

  • Стиль Canvas, установленный из... ### Исправления ошибок

  • Исправлен алгоритм Line.pointOnLine (спасибо @woutercommandeur, исправление #784).

  • Исправлено столкновение сегмента линии при определённых обстоятельствах (спасибо @woutercommandeur, исправление #760).

  • Изменена сигнатура метода P2 DistanceConstraint. Обновлён Phaser, теперь maxForce передаётся как объект (исправление #788).

  • Флаг this._reversed перемещён за пределы цикла свойств в Tween (в соответствии с проблемой tween.js 115).

  • Emitter.makeParticles обновлён для использования проверки Array.isArray() для значений ключа/кадра, чтобы можно было передавать нестроковые объекты (спасибо @AnderbergE, исправление #786).

  • Tilemap.createFromObjects теперь будет принудительно создавать свойство, даже если оно не существует (исправление регрессии от версии 2.0.4).

  • Phaser.Line.intersectsPoints исправлено путём правильной проверки границ (спасибо @woutercommandeur, исправление #790).

  • Group.set и setAll были изменены в версии 2.0.4, чтобы не создавать свойство, если оно уже существует. Это нарушило обратную совместимость, поэтому было исправлено.

  • Sound.play теперь возвращает звуковой объект (спасибо @AnderbergE, исправление #802).

  • Тест устройства Silk UA обновлён, чтобы избежать конфликта Safari (спасибо @jflowers45, исправление #810).

  • Sound.stop на Samsung S4 случайно выдавал ошибку DOM. Аудио остановка была заключена в try/catch (спасибо FSDaniel).

  • RandomDataGenerator.integerInRange возвращал бы нецелое значение, если передать число с плавающей запятой.

  • Таймер обновлён таким образом, что паузы, возобновлённые кодом, не нарушают внутреннее значение _pausedTotal (спасибо @joelrobichaud, исправление #814).

  • Таймер: когда пауза была установлена кодом после паузы на уровне игры, флаг codepaused не устанавливался (спасибо @joelrobichaud, исправление #814).

  • Stage.backgroundColor теперь корректно принимает шестнадцатеричные значения #RRGGBB и цвета 0xRRGGBB (исправление #785).

  • Color.getRGB возвращал неправильные цветовые компоненты, если задавалось значение цвета без альфа-канала, теперь работает как с 0xRRGGBB, так и с 0xAARRGGBB.

  • Color.getWebRGB теперь работает независимо от того, задано ли значение цвета 0xRRGGBB или 0xAARRGGBB.

  • Если объект был включён для перетаскивания с помощью bringToTop, событие onDragStop не срабатывало до тех пор, пока мышь не была перемещена (спасибо @alpera, исправление #813).

  • RetroFont.text вызывал ошибки WebGL из-за проблемы с Pixi.RenderTexture. Исправлено в Phaser и код отправлен в Pixi.

  • RenderTexture.resize вызывал ошибки WebGL из-за проблемы с Pixi.RenderTexture. Исправлено в Phaser и код отправлен в Pixi.

  • Group.hasProperty исправлен, чтобы не использовать hasOwnProperty, а серию проверок in (спасибо @mgiuffrida за идею, #829).

  • Tilemap.removeTile устанавливает тайлы равными нулю, но должен устанавливать их индекс равным -1 (спасибо @draklaw, исправление #835).

Версия 2.0.4 — «Mos Shirare» — 29 апреля 2014 года

Обновления

  • Обновление до Pixi.js 1.5.3.

  • Обновление до последней версии p2.js — все коммиты с 0.5.0 по 27 апреля 2014 г.

  • Исправления и обновления определений типов TypeScript (спасибо @clark-stevenson @metrofun @killalau).

  • В Timer удалены все временные локальные переменные в основном цикле обновления.

  • Параметр жёсткого сброса Input.reset теперь передаётся методам сброса Keyboard и Key.

  • AnimationManager.destroy теперь перебирает дочерние анимации, вызывая уничтожение всех них, избегая утечки памяти (спасибо stauzs).

  • AnimationManager.play теперь вызывает Animation.stop для текущей анимации перед переключением на новую (спасибо @nihakue, #713).

  • ArcadePhysics.Body.phase проверяется в postUpdate, чтобы предотвратить его многократный вызов в одном кадре.

  • Group.setProperty теперь проверяет, существует ли свойство, прежде чем устанавливать его, это относится к Group.setAll и всему остальному, использующему setProperty внутри.

  • QuadTree.retrieve теперь проверяет, есть ли у данного Sprite тело, прежде чем продолжить.

  • ArcadePhysics.collideSpriteVsGroup проверяет, имеет ли Sprite тело, теперь безопасно пропускает подгруппы или другие группы, отличные от Sprite.

  • Group.remove теперь проверяет дочерний элемент, чтобы убедиться, что он является членом корневой группы, прежде чем удалять его, иначе Pixi выдаёт ошибку.

  • Эмиттер больше не проверяет, равен ли minParticleScale = * Для проверки масштаба добавлена опция maxParticleScale, позволяющая снова использовать частицы фиксированного масштаба.

  • Теперь PIXI.AbstractFilter по умолчанию включён в сборку Phaser Pixi, что упрощает использование внешних фильтров Pixi.

  • У всех игровых объектов появилось новое свойство: destroyPhase (логическое), которое равно true, если объект находится в процессе уничтожения, и false — в противном случае.

  • Если Tween.yoyo был установлен в true, но repeat был равен 0, то yoyo не происходило. Теперь, если yoyo установлено, а repeat нет, счётчик повторов устанавливается равным 1 (спасибо @hilts-vaughan, исправление #744).

  • RandomDataGenerator.integerInRange использует новый метод округления значения до целого числа, чтобы избежать проблем с вероятностью распределения (спасибо PhaserFan).

  • Обновлена проверка Device little / big endianess.

  • Время было обновлено таким образом, что physicsElapsed никогда не будет нулевым (возвращается к 1/60), также исправлена ошибка p2 прошедшего времени (спасибо @georgiee, исправление #758).

  • Input и Pointer теперь используют новый ArrayList вместо LinkedList, что решает проблемы с удалением элементов списка во время обратного вызова.

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

  • Пустые Tilemaps больше не создают null тайлы, а вместо этого создают объекты Tile с индексом -1, которые можно заменить и обновить, как и любой другой тайл.

  • Tilemap.addTilesetImage теперь вызывает console.warn, если вы укажете недопустимый ключ набора тайлов и не создадите набор тайлов, вместо того чтобы выбрать набор по умолчанию.

  • Math.smoothstep и Math.smootherstep были обновлены для работы независимо от того, a > или < b (спасибо @gre, исправление #772).

  • Text.updateText теперь устанавливает lineCap равным round, чтобы избежать случайных сбоев шрифта в Chrome.

  • Loader теперь использует XDomainRequest в IE9 для загрузки данных JSON, помогая решить проблемы CORS.

Новые функции

  • Новый шаблон проекта Phaser специально для requireJS в папке resources/Project Templates (большое спасибо @ashatch).

  • В Loader теперь есть событие onFileStart, которое вы можете прослушать (спасибо @codevinsky, #705).

  • Group.classType позволяет вам изменить тип объекта, который Group.create или createMultiple создаёт, с Phaser.Sprite на ваш собственный класс.

  • Timer.clearPendingEvents удаляет все события, помеченные для удаления; это выполняется автоматически в начале цикла обновления.

  • Device.crosswalk определяет, работает ли ваша игра под Intels Crosswalk XDK.

  • Keyboard.reset имеет новый параметр hard, который управляет степенью сброса. Мягкий сброс не удаляет обратные вызовы или прослушиватели событий.

  • Key.reset имеет новый параметр hard, который управляет степенью сброса. Мягкий сброс не удаляет обратные вызовы или прослушиватели событий.

  • InputManager.resetLocked — если Input Manager был сброшен заблокированным, все вызовы, сделанные в InputManager.reset, например, из-за изменения состояния, игнорируются.

  • Group.resetCursor сбрасывает курсор группы обратно к началу группы или к заданному значению индекса.

  • World.wrap берёт игровой объект и, если его координаты x/y выходят за границы мира, перемещает его на противоположную сторону для эффекта обёртывания.

  • Device.support32bit — это новая логическая переменная, которая устанавливает, поддерживает ли контекст 32-битное манипулирование пикселями с использованием представлений массива буфера или нет.

  • P2.World теперь имеет собственные методы паузы и возобновления, так что вы можете приостановить симуляцию физики независимо от вашей игры (спасибо @georgiee).

  • Phaser.ArrayList — это новый итеративный объект, аналогичный по принципу структуре данных набора, но работающий с одним массивом без изменения структуры объекта.

  • Добавьте параметры scaleMode в FilterTexture и RenderTexture (обновление pixi.js от @giraluna).

  • Ваш State теперь может иметь метод pauseUpdate, который вызывается постоянно, когда игра приостановлена.

  • Timer.timeCap — это новое значение, позволяющее вашим таймерам защититься от неожиданно больших дельта-таймеров (таких как raf de-vis или перегрузка процессора).

  • Camera.unfollow позволяет легко перестать следить за отслеживаемым объектом (спасибо @alvinsight, #755).

  • Animation.setFrame позволяет установить анимацию на определённый кадр (спасибо @adamholdenyall, #706).

  • Point.dot — получить скалярное произведение двух объектов Point. Point.cross — получить векторное произведение двух объектов Point.

  • Point.perp — сделать объект Point перпендикулярным (поворот на 90 градусов).

  • Point.rperp — сделать объект Point перпендикулярным (-90 градусов поворота).

  • Point.normalRightHand — нормализовать (сделать единичной длины) объект Point правой рукой.

  • Point.angle — возвращает угол между этим объектом Point и другим объектом с общедоступными свойствами x и y.

  • Point.angleSq — возвращает квадрат угла между этим объектом Point и другим объектом с общедоступными свойствами x и y.

  • Point.getMagnitudeSq — вычисляет длину в квадрате объекта Point.

  • Point.project — проецирует две точки на другую точку.

  • Point.projectUnit — проецирует две точки на точку единичной длины.

  • Point.multiplyAdd — добавляет два двумерных объекта Point вместе и умножает результат на заданный скаляр.

  • Point.negative — создаёт отрицательную точку.

  • Point.interpolate — интерполирует две заданные точки, основываясь на значении f (от 0 до 1), и возвращает новую точку.

  • Color.packPixel упаковывает компонент rgb в одно целое число.

  • Color.unpackPixel распаковывает целое число в объект цвета.

  • Color.fromRGBA преобразует целое число в формате 0xRRGGBBAA в объект цвета.

  • Color.toRGBA преобразует компоненты rgba в 32-битное целое число.

  • Color.RGBtoHSL преобразует цвет rgb в hsl (оттенок, насыщенность, яркость).

  • Color.HSLtoRGB преобразует значения hsl в объект цвета rgb.

  • Color.RGBtoHSV преобразует цвет rgb в цвет hsv (оттенок, насыщенность, значение).

  • Color.HSVtoRGB преобразует значение hsv в объект цвета rgb.

  • Color.createColor — создаёт новый облегчённый объект цвета, используемый большинством методов преобразования цветов.

  • Color.updateColor — обновляет существующий объект цвета для обновления свойства rgba.

  • Color.RGBtoString преобразует цвет rgba в строку цвета # или 0x.

  • Color.HSVColorWheel вернёт массив с 360 объектами цвета для каждого сегмента цветового колеса HSV, вы можете дополнительно установить значения насыщенности и величины.

  • Color.HSLColorWheel вернёт массив с 360 объектами цвета для каждого сегмента цветового колеса HSL, вы можете дополнительно установить значения насыщенности и яркости.

  • BitmapData.cls очищает текущий контекст.

  • BitmapData.fill заполняет контекст заданным цветом.

  • BitmapData.processPixelRGB позволяет выполнять пользовательский обратный вызов для каждого пикселя в BitmapData, передавая цвет пикселя вашему обратному вызову.

  • BitmapData.processPixel позволяет выполнять пользовательский обратный вызов для каждого пикселя в BitmapData, передавая значение цвета пикселя вашему обратному вызову.

  • BitmapData.replaceRGB будет сканировать растровое изображение для определённого цвета и заменять его новым заданным.

  • BitmapData.setHSL устанавливает значения оттенка, насыщенности и яркости для каждого пикселя в заданной области или для всего BitmapData, если область не была указана.

  • BitmapData.shiftHSL сдвигает значения оттенка, насыщенности и яркости для каждого пикселя в заданной области или для всего BitmapData, если область не была указана.

  • BitmapData.extract сканирует этот BitmapData для всех пикселей, соответствующих заданным значениям r, g, b, а затем рисует их в заданном целевом BitmapData.

  • BitmapData.circle рисует заполненный круг в BitmapData с заданными координатами x, y и радиусом.

Исправления ошибок

  • Основной цикл таймера мог неправильно удалить событие таймера, если новое было добавлено специально во время обратного вызова события (спасибо @garyyeap, исправление №710).
  • Исправлено использование параметра destroy в Group.removeAll и связанных функциях (спасибо @AnderbergE, исправление №717).
  • P2.World.convertTilemap теперь правильно проверяет параметр collides плиток при преобразовании.
  • Animation.destroy неправильно очищал сигналы onStart, onLoop и onComplete.
  • StateManager.restart неправильно пропускал первый дополнительный параметр после clearCache (спасибо @mariusbrn, исправление №722).
  • Line.angle и Math.angleBetween использовали аргументы Math.atan2 в неправильном порядке (спасибо @jotson, исправление №724).
  • Group.destroy проверяет родителя перед удалением (спасибо @clark-stevenson, исправление №733).
  • Исправлена опечатка в P2.World.setMaterial (спасибо @OpherV, исправление №739). Инпут хендлер._сет хенд курсор приватная переменная не была установлена должным образом, что означает, что хенд курсор иногда мог оставаться (например, во время последовательности уничтожения).
  • Уничтожение объекта с инпут хендлером во время его события онДаун приводило к ошибкам отправки сигналов (спасибо @jflowers45, исправление #746).
  • Метод сиркл.дистанс использовал неправильный вызов метода матх, если требовалось округлённое значение расстояния (спасибо @OpherV, исправление #745).
  • Метод пойнт.дистанс использовал неправильный вызов метода матх, если требовалось округлённое значение расстояния (спасибо @OpherV, исправление #745).
  • P2.боди.лоад полигон был обновлён для исправления проблем с центром масс (спасибо @georgiee, исправление #749).
  • Игра проверяет, существует ли окно.консоль перед использованием (должно исправить проблемы в IE9, когда инструменты разработчика закрыты), однако она всё ещё используется глубже в Pixi.
  • Маски теперь работают при использовании в рендер текстурах / кэш ас битмап и фильтрах (обновление pixi.js).
  • Иногда обрезался обведённый текст (обновление pixi.js).
  • Полигон.контентс теперь работает для координат слева от полигона (спасибо @vilcans, исправление #766).
  • Пауза/возобновление игры могли неправильно увеличивать приостановленные таймеры (спасибо @georgiee, исправление #759).
  • Анимации, возобновляющиеся после паузы, больше не пропускают кадры (спасибо @merixstudio, исправление #730).
  • Тайлмэп.филл выдавал ошибку, если вызывался на пустой тайлмэп, полный нулевых значений (спасибо @DrHackenstein, исправление #761).
  • Лоадер парсер.битмап шрифт обновлён так, чтобы разбор xml работал правильно в IE9 (спасибо @georgiee).
  • Звуки, которые были приостановлены через код игры, переставали быть приглушёнными, если игра приостанавливалась и возобновлялась.
  • Плитки CSV тайлмэп неправильно устанавливали ссылку на слой тайлов, вызывая сбой столкновения (спасибо @Chapelin, исправление #692).

2.0.4 — обновления нулевого часа

Следующие проблемы были исправлены в версии 2.0.4 примерно через час после официального релиза:

  • Скейл менеджер сидс _чек приватная переменная нулевым значением, чтобы избежать последующей проверки сравнения (спасибо @jflowers45, исправление #782).
  • P2.боди.аппли форс должен был использовать pxmi вместо pxm (спасибо @Trufi, исправление #776).
  • В P2 было исправлено создание RevoluteConstraint путём передачи maxForce в опциях (спасибо @woutercommandeur, исправление #783).
  • Методы тайлмэп.гет тайл и гет тайл xy раньше возвращали null в версии 2.0.3, но возвращали объект тайла в версии 2.0.4 (с индексом -1), теперь они снова возвращают null.

Версия 2.0.3 — «Аллоранлен» — 11 апреля 2014 года

Обновления

  • Обновление до Pixi.js 1.5.2.
  • Обновление до p2.js 0.5.0.
  • Возвращён результат P2.Body.setCircle для дальнейшей цепочки и манипуляции (исправление #659).
  • Обновлён плагин PhysicsEditor для сохранения позиции, радиуса, битов маски, битов категории и флагов сенсора (спасибо @georgiee, #674).
  • Дальнейшие настройки определений TypeScript (спасибо @clark-stevenson).
  • Понижен размер по умолчанию SpriteBatch с 10 000 до 2 000, так как это даёт более быстрые результаты на мобильных устройствах (обновление Pixi.js).
  • Исправлено «зубчатое» рисование штрихов на пользовательских шрифтах (спасибо @nickryall, #677).
  • Функция состояния.апдейт (и, следовательно, обновление любых подклассов спрайтов или других объектов) теперь вызывается перед Stage, Tweens, Sound, Input и т. д. (#662).
  • Процесс Phaser jshint теперь выполняется на Travis (спасибо @xtian, #656).
  • Gruntfile Phaser теперь разделён на отдельные задачи (спасибо @xtian, #638).
  • Клавиша.ресет теперь очищает любые обратные вызовы, связанные с событиями онДаун и онАп, и обнуляет onHoldCallback, если установлен. Клавиша.ресет вызывается клавиатурой.ресет при изменении состояния.
  • Если передать null в Tilemap.пут тайл в качестве параметра тайла, он передаст вызов Tilemap.ремове тайл.
  • Определения TypeScript обновлены для последних изменений (спасибо @clark-stevenson).
  • Клавиатура.стоп обнуляет ссылки на функции после удаления прослушивателей событий (спасибо @bmceldowney, #691).
  • Tilemap.хаст тайл позволяет использовать параметр типа многослойного слоя (спасибо @Raeven0, #680).
  • Обновился Grunt для зависимостей разработки (спасибо @xtian, #695).
  • Эмиттер теперь испускает объекты Phaser.Particle вместо Phaser.Sprites, которые можно расширять по мере необходимости.
  • Из эмиттера были удалены различные локальные свойства, которые уже были объявлены в Phaser.Group, который он расширяет.
  • Параметр родителя PluginManager был удалён, поскольку он избыточен. Также большинство основных... * Функции упорядочены, а jsdocs исправлены.
  • p2.World.defaultRestitution устарел и теперь называется p2.World.restitution.
  • p2.World.defaultFriction устарел и теперь называется p2.World.friction.
  • В p2.World теперь используется 4 тела для границ мира вместо одного тела с 4 фигурами. Это предотвращает срабатывание bounds в узкой фазе с каждым телом в мире.
  • Границы p2.World теперь включены в события обратного вызова, такие как beginContact и impact.
  • Благодаря @STuFF выпадающий список классов в документации API теперь имеет отступы для подклассов.

Новые функции

  • Добавлена возможность извлечения одного фиксатора p2 из кэша (спасибо @georgiee, #674).

  • Таймеры теперь могут иметь значение задержки запуска (спасибо @georgiee, #660).

  • CacheAsBitmap добавлен к Display Object, поэтому работает для Sprite, Image, Button. Позволяет кэшировать сложные иерархии отображения для ускорения работы.

  • CacheAsBitmap добавлен к Graphics Object. Позволяет кэшировать сложные графические структуры иерархий для ускорения работы.

  • Добавлена функция generateTexture для отображения объектов. Создаёт текстуру из текущей иерархии отображения объекта для использования в качестве текстуры в другом месте.

  • Добавлен необязательный FilterArea для отображения объекта (для оптимизации).

  • Функции цепочки графики.

  • Добавлен Pointer.positionUp, который записывает последнюю точку, в которой указатель покинул экран (спасибо @Cryszon, #676).

  • Phaser.Point.centroid статическая функция добавлена для вычисления центроида или средней точки массива точек (спасибо @lewster32, #675).

  • SoundManager.remove(sound) теперь позволяет удалить звук из SoundManager, уничтожая его в процессе.

  • Sound.destroy удалит звук и все локальные ссылки, которые он содержит, при необходимости удалив себя из SoundManager.

  • SoundManager.removeByKey(key) удалит все звуки из SoundManager с ключом, соответствующим заданному значению.

  • ArcadePhysics.Body.hitTest(x, y) вернёт логическое значение на основе того, находятся ли указанные мировые координаты внутри Body или нет.

  • StateManager.restart позволяет быстро перезапустить текущее состояние, при необходимости очищая мир и кэш.

  • Tilemap.removeTile(x, y, layer) позволяет удалить плитку по заданным координатам и обновляет данные о столкновении.

  • Tilemap.removeTileWorldXY позволяет удалить плитку по указанным значениям координат пикселей и обновляет данные о столкновениях.

  • Key.enabled boolean позволяет переключать, обрабатывает ли Key свой метод обновления или отправляет какие-либо события без удаления и повторного создания.

  • У Emitter теперь есть значения minParticleAlpha и maxParticleAlpha для установки случайной альфы излучаемых частиц.

  • Emitter.particleAnchor позволяет контролировать якорь излучаемых Частиц. По умолчанию равен 0,5 (как и раньше), но теперь находится под вашим контролем.

  • Emitter.setAlpha позволяет быстро установить минимальные и максимальные значения альфа.

  • Emitter.setScale позволяет быстро установить минимальные и максимальные значения масштаба.

  • Emitter.blendMode позволяет установить blendMode любой излучаемой Частицы (требуется браузер, поддерживающий режимы смешивания холста).

  • Group.customSort позволяет сортировать дочерние элементы Group на основе вашей собственной функции сортировки.

  • Emitter.setScale имеет новый параметр «rate», который позволяет частицам изменяться в масштабе с течением времени, используя любое значение замедления или шкалу времени.

  • Emitter.setScale теперь позволяет масштабировать ось x и y частиц независимо.

  • Emitter.setAlpha имеет новый параметр «rate», который позволяет частицам изменять альфа с течением времени, используя любое значение замедления или шкалу времени.

  • Emitter.bringToTop и Emitter.sendToBack — логические значения, позволяющие при желании установить порядок отображения Частицы при излучении.

  • Теперь Emitter вызывает функцию Phaser.Particle.onEmit, которая остаётся пустой для переопределения и добавления пользовательских поведений.

  • p2.World имеет новое свойство contactMaterial, которое можно настроить как обычный P2 Contact Material и применяется, когда два тела сталкиваются и не имеют определённых материалов.

  • Group.remove имеет новый параметр «destroy» (по умолчанию false), который при необходимости вызовет destroy для элемента, удалённого из Group.

  • Group.removeAll имеет новый параметр «destroy» (по умолчанию false), который при необходимости вызовет destroy. Об элементах, удалённых из группы

  • У Group.removeBetween появился новый параметр «destroy» (по умолчанию false), который при необходимости вызывает destroy для элементов, удалённых из Группы.

  • @georgiee создал новый класс P2.FixtureList, чтобы упростить доступ к приспособлениям созданного тела P2:

Это особенно полезно в сочетании с PhysicsEditor и P2.Body#addPhaserPolygon.

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

Случаи использования:

  • Настроить биты коллизий в PhysicsEditor и позже захотеть их изменить.
  • Разместить датчик в своём приспособлении и получить доступ к этому отдельному приспособлению позже (чтобы временно отключить).
  • Создать небольшое тело с тремя приспособлениями (круг, круг + многоугольник/выпуклый). Теперь вы хотите, чтобы часть многоугольника вела себя как резина, и назначаете упругий (восстановление > 1) материал. Назначьте ключ приспособления в PhysicsEditor и получите доступ к приспособлению следующим образом. (см. изображение для описанного мной приспособления).

Исправления ошибок

  • Если вы вводите inputEnable = false для игрового объекта, вы не могли снова включить его с помощью inputEnable = true, только напрямую через обработчик (спасибо @nickrall, исправление #673).
  • Исправлена ошибка setTexture в TilingSprite (исправление ошибки pixi.js 1.5.2).
  • Исправлена ошибка точки привязки на холсте в TilingSprite (исправление ошибки pixi.js 1.5.2).
  • Исправлена ошибка positionOffset, которая была некорректной в TilingSprite (исправление ошибки pixi.js 1.5.2).
  • Исправлена проблема, когда фильтры не применялись к TilingSprite (исправление ошибки pixi.js 1.5.2).
  • Исправлена ошибка SpriteBatch canvas transform (исправление ошибки pixi.js 1.5.2).
  • Исправлена проблема с кэшированными текстурами при использовании изображений в кодировке base64 (@cacheflowe) (исправление ошибки pixi.js 1.5.2).
  • Исправлена проблема, когда видимость не учитывалась в sprite batch (исправление ошибки pixi.js 1.5.2).
  • Исправлена ошибка в gl.bindTexture, которая пыталась использовать неопределённую частную переменную. (@photonstorm) (исправление ошибки pixi.js 1.5.2).
  • Исправлена «сокращённая» версия Math.floor в setTransform, если roundPixels имеет значение true. (@photonstorm) (исправление ошибки pixi.js 1.5.2).
  • SoundManager.boot будет проверять, был ли создан AudioContext, прежде чем продолжить (спасибо @keyle, исправление #669).
  • Исправлена ошибка, из-за которой методы move up и move down в группах не работали (спасибо @jonthulu, исправление #684).
  • Исправлена ошибка в Group.next, когда курсор находится на последнем дочернем элементе (спасибо @jonthulu, исправление #688).
  • Emitter.minParticleScale и maxParticleScale неправильно сбрасывали размер тела.
  • Group.removeBetween теперь правильно перебирает дочерние элементы.
  • В World была ошибка в названии метода restitution. Теперь исправлено.
  • Объекты с InputHandler теперь деактивируют его, когда объект удаляется из группы, но не уничтожается (исправление #672).
  • Исправлены векторы, используемые в фильтрах BlurX и BlurY (спасибо @nickryall, исправление #668).

p2.js v0.5.0

  • Добавлено свойство .enableIslandSleeping в World.
  • Добавлено свойство .useFrictionGravityOnZeroGravity в World.
  • Переименовано .useWorldGravityForFrictionApproximation в World в .useWorldGravityAsFrictionGravity для большей единообразия.
  • Улучшения сна.
  • Добавлен атрибут .frictionIterations в GSSolver, атрибут .skipFrictionIterations удалён.
  • Обновление до gl-matrix 2.1.0.
  • Удалено QuadTree.
  • Удалён mat2.
  • Добавлена функция Utils.extend.
  • Добавлены методы .setStiffness и .setRelaxation в Constraint.
  • Атрибуты .stiffness, .relaxation и .useGlobalEquationParameters удалены из GSSolver.
  • Методы .setGlobalStiffness, .setGlobalRelaxation, .setGlobalEquationParameters добавлены в World.
  • Имя атрибута .eps изменено на .epsilon в Equation.
  • Атрибут .useBoundingBoxes удалён из NaiveBroadphase в пользу нового атрибута .boundingVolumeType в Broadphase.
  • Методы .getMaxForce и .setMaxForce добавлены в LockConstraint.
  • Названия атрибутов .bi, .bj, .ni, .ri, .rj изменены на .bodyA, .bodyB, .normalA, .contactPointA, .contactPointB в классах Equation, ContactEquation и FrictionEquation.
  • IslandSolver удалён в пользу нового свойства World.islandSplit.
  • Изменены конструкторы. Соответствие якорю.
  • StateManager теперь отвечает за очистку ввода, таймеров, твинов, физики, камеры и списка отображения World.
  • Удалено использование Int16Array из всех игровых объектов, заменено на стандартный массив. Phaser теперь снова работает на Android 2.x и IE9 (исправление #590).
  • При создании спрайта (через Group.create или напрямую) с exists = false и телом P2 тело не добавляется в мир.
  • Каждый класс Input теперь проверяет, был ли он уже запущен. Если это так, он не добавляет слушателей снова, если они не были обнулены.
  • Множество исправлений в файле определений TypeScript (как всегда спасибо кларку-стивенсону за его неустанную работу над ними).
  • Эмиттеры теперь поднимают частицу, которую они собираются испустить, наверх группы перед этим. Избегает частиц, скрытых за другими.
  • ArcadePhysics.Body.setSize теперь принимает параметры как положительные, а не отрицательные значения.
  • ArcadePhysics.World.separate теперь будет проверять общие значения гравитации для определения порядка разделения. Вы можете установить World.forceX в true, чтобы всегда разделять сначала по X и пропустить эту проверку.
  • TileSprites теперь испускают события outOfBounds и enterBounds соответственно.
  • Теперь вы можете создать несколько пустых слоёв в Tilemap.

Новые функции.

  • Добавлена переменная Device.getUserMedia типа boolean, полезная, если вам нужен доступ к веб-камере или микрофону.
  • Math.removeRandom позволяет удалить (и вернуть) случайный объект из массива.
  • В ArcadePhysics.World теперь есть объект checkCollision, который можно использовать для включения/отключения столкновения с 4 стенами его границ.
  • Sprite.events.onEnterBounds добавлен. Это отправляется, если спрайт покидает границы, но затем возвращается. Противоположность onOutOfBounds.
  • Timer.removeAll удалит и очистит все события, но сохранит работу таймера.
  • Group.setAllChildren рекурсивно проверяет, являются ли его дочерние элементы группами, и, если да, рекурсивно применяет значение к их дочерним элементам также (функция #589).
  • Time.deltaCap позволяет установить ограничение для таймера delta. По умолчанию он равен нулю (что отключено). Если вы используете ArcadePhysics, то он устанавливается равным 0,2, но вы можете изменить его по мере необходимости.
  • У ArcadePhysics.Body есть объект deltaMax, который позволяет ограничить дельту, применяемую к позиции, значениями +- это значение.
  • ArcadePhysics.Body теперь автоматически проверяет масштаб спрайта и соответствующим образом регулирует размер тела (исправление #608).
  • Emitter.particleClass теперь может быть установлен на любой объект, расширяющий Phaser.Sprite, который будет испущен вместо обычного спрайта.
  • Существует совершенно новый скрипт экспорта PhysicsEditor специально для Phaser (в папке ресурсов), а также новые функции синтаксического анализа полигонов p2 благодаря georgiee.

Версия 2.0.0 — «Айз Седай» — 13 марта 2014 года.

Существует обширный Migration Guide, доступный для тех, кто переходит с Phaser 1.x на 2.x. В руководстве мы подробно описываем критические изменения API и подход к нашей новой физической системе.

Новые функции.

  • Phaser.Image — это совершенно новый отображаемый объект, идеально подходящий для логотипов, фонов и т. д. Вы можете масштабировать, вращать, подкрашивать, смешивать изображение и получать входные события от изображения, но у него нет анимации или физического тела.
  • Теперь можно использовать свойство hitArea для спрайтов и объектов Image. hitArea может быть геометрическим объектом (Rectangle, Circle, Polygon, Ellipse) и используется в проверках pointerOver.
  • InputManager.getLocalPosition(displayObject, pointer, output) вернёт локальные координаты указанного displayObject и указателя.
  • InputManager.hitTest проверит наличие указателей на спрайте/изображении, его hitArea (если установлено) или любом из его дочерних элементов.
  • Текст имеет множество новых методов, помогающих его стилизовать: Text.fill, Text.align, Text.stroke и т.д.
  • Текст теперь хорошо работает с именами шрифтов, содержащими пробелы.
  • Text.setShadow применяет тень к отображаемому тексту. Управляйте x, y, цветом и размытием.
  • Text.lineSpacing позволяет задать дополнительный интервал между каждой отображаемой строкой.
  • Text.inputEnabled позволяет включить все события ввода над текстовыми объектами: перетаскивание, щелчок и т. д. — всё, что работает со спрайтом, теперь работает и с текстом.
  • Phaser.Ellipse добавлен. Полностью... * Group.bringToTop()
  • Group.moveUp(child) переместит дочерний элемент вверх по списку отображения, меняя его местами с элементом над ним.
  • Group.moveDown(child) переместит дочерний элемент вниз по списку отображения, меняя его местами с элементом под ним.
  • Теперь протестировано Device.windowsPhone.
  • Панель Debug теперь работает в режиме WebGL. Обратите внимание на предупреждение в верхней части документации Debug (запрос функции #499).
  • Теперь вы можете создавать пустые Tilemaps, а затем заполнять их данными позже.
  • У одного объекта Animation теперь есть 3 новых события: onStart, onLoop и onComplete.
  • Animation.loopCount содержит количество раз, которое анимация зациклилась с момента последнего запуска.
  • Tween.generateData(frameRate) позволяет вам генерировать данные анимации в массив, который затем можно использовать по своему усмотрению (см. новые примеры).
  • Group.xy(index, x, y) позволяет установить координаты x и y дочернего элемента группы с заданным индексом.
  • Group.reverse() меняет порядок отображения всех дочерних элементов в группе.
  • Твинеры теперь привязаны к собственному TweenManager, не всегда глобальному игровому. Так что теперь вы можете создавать свои собственные менеджеры (для вас, Кларк :)
  • ScaleManager.fullScreenTarget позволяет изменить DOM-элемент, для которого вызывается полноэкранный API (запрос функции №526).
  • Объединили Georges p2 BodyDebug и переформатировали для прохождения jshint. Выглядит потрясающе :)
  • ArcadePhysics.Body имеет новое свойство gravityScale, которое является модификатором, умноженным на значение гравитации мира для тела.
  • Line.coordinatesOnLine вернёт все координаты на линии с использованием алгоритма линии Брезенхэма.
  • Линия теперь имеет свойства x, y, width, height, top, bottom, left и right, так что вы можете эффективно получить её границы.
  • TilemapLayer.getRayCastTiles позволит вам получить все тайлы, которые попадают на заданную линию для дальнейшей обработки.

Обновления

  • Огромная благодарность clark-stevenson за потрясающую работу по обновлению файла определений TypeScript.
  • Debug.renderRectangle имеет новый параметр: filled. Если true, он рендерится как с fillRect, если false — strokeRect.
  • Phaser.AnimationParser теперь устанавливает обрезанные данные непосредственно для кадров текстуры Pixi. Протестировано через JSON Hash, JSON Data, Sprite Sheet и XML.
  • Game.add.renderTexture теперь имеет параметр addToCache. Если установлено, текстура будет сохранена в Game.Cache и может быть извлечена с помощью Cache.getTexture(key).
  • Game.add.bitmapData теперь имеет параметр addToCache. Если установлено, текстура будет сохранена в Game.Cache и может быть извлечена с помощью Cache.getBitmapData(key).
  • InputManager теперь устанавливает стиль курсора canvas на «inherit» вместо «default».
  • World.reset теперь вызывает Camera.reset, который возвращает камеру обратно в 0,0 и отменяет отслеживание любого объекта, за которым она могла следить.
  • Добавлен hostname: '*' в grunt-connect в Gruntfile.js (исправляет #426).
  • Классы Device, Canvas и GamePad обновлены для лучшей поддержки CocoonJS (спасибо Videlais).
  • BitmapData.alphaMask будет рисовать данное изображение на BitmapData, используя изображение в качестве альфа-маски.
  • Новый GameObjectCreator (доступ к которому осуществляется через game.make или State.make) позволяет легко создать объект, но НЕ добавить его в список отображения.
  • TilemapParser теперь выдаёт предупреждение, если размер изображения набора тайлов не соответствует размерам тайла.
  • Мы теперь принудительно переводим IE11 в режим Canvas, чтобы избежать ошибки Pixi с предварительно умноженной альфой. Будет удалён после исправления, извините, но это лучше, чем вообще без игры, верно? :(
  • Loader.setPreloadSprite() теперь установит sprite.visible = true после применения обрезки. Это должно помочь избежать проблем (#430) на супермедленных соединениях.
  • Изменён способ проверки видимости страницы, теперь он должен быть более совместимым с большим количеством браузеров.
  • Phaser.Input.Key.isUp теперь по умолчанию равен 'true', как и GamepadButton.isUp (#474).
  • Значительно улучшена поддержка API видимости + pageshow/pagehide + focus/blur. Работает в Chrome, IE, Firefox, iOS, Android (также исправляет #161).
  • Пауза в игре теперь будет отключать звук, а возобновление — включать, если только звук не был отключён через игру (исправляет #439).
  • ScaleManager имеет 2 новых события: ScaleManager.enterFullScreen и ScaleManager.leaveFullScreen, так что вы можете напрямую реагировать на изменения полноэкранного режима. * Генератор случайных данных RandomDataGenerator.integerInRange(min, max) теперь включает в свой диапазон и min, и max (#501).
  • Твин больше не копирует все свойства объекта в объект _valuesStart при создании.
  • Теперь можно создавать полностью пустые тайлмапы. Это позволяет динамически генерировать карты во время выполнения.
  • Keyboard.event теперь хранит последнее событие клавиатуры DOM.
  • У Animation.stop появился новый параметр: dispatchComplete. Если он равен true, будет отправлено событие Animation.onComplete.
  • Тайлы спрайтов теперь имеют свойство физического тела, которое вызывается в предварительных и последующих обновлениях. По умолчанию оно равно null, как и у всех физических тел.
  • Формат тайлмапа по умолчанию — json, если он не определён (спасибо RyanDansie, #528).
  • Эмиттер частиц теперь запоминает кадры, которые ему были даны, и сбрасывает их при испускании новой частицы.
  • Методы Game.focusLoss и focusGain, а также сигналы onBlur и onFocus добавлены, что позволяет более точно контролировать паузу игры в сравнении с потерей фокуса.
  • Добавлен метод Keyboard.removeKey (спасибо qdrj, #550).
  • Key.event теперь сохраняет последнее событие, которое его вызвало.

Исправления ошибок

  • Явно приостановленный таймер продолжает работу, если вы расфокусируете и сфокусируете окно браузера (спасибо georgiee).
  • В TimerEvent.pendingDelete и проверках в Timer.update добавлен метод, поэтому удаление события в обратном вызове больше не вызывает исключение (спасибо georgiee).
  • Исправлены определения TypeScript на строках 1741–1748 (спасибо wombatbuddy).
  • Ранее при использовании Sprite.crop() он обрезал все спрайты, использующие одно и то же базовое изображение. Теперь он берёт локальную копию данных текстуры и обрезает только её.
  • В тайлмапе были неправильные подписи @method, поэтому большинство из них отсутствовало в документации.
  • Исправлена ошибка, когда изменение состояния приводило к тому, что камера не сбрасывалась, если она следовала за объектом.
  • У тайла было два свойства (callback и callbackContext), которые никогда не назначались, обновлены для использования правильных имён (спасибо ratkingsimon).
  • Исправлена ошибка, которая возникала, если использовался InputHandler.onInputUp и спрайт уничтожался во время события.
  • IE11 не заполнял значение Device.ie## Version. Теперь оно извлекается из ревизии Trident, но для проверок IE11+ всё ещё используется Device.trident.
  • Исправлена ошибка в Math.angleBetween, где использовались координаты в неправильном порядке.
  • Раньше проверка Pixel Perfect не работала, если спрайт был повёрнут или имел ненулевую опорную точку, теперь работает при любых условиях + фреймы атласа.
  • Если спрайты с проверкой Pixel Perfect перекрывали друг друга, пиксельная проверка не учитывалась в методе перемещения указателя.
  • Обновлён Input.Mouse для использования event.button, а не event.which, чтобы константная ссылка из input.mouse.button была правильной (спасибо grimor).
  • Текст, который был зафиксирован на камере, «дёргался», если мир прокручивался. Теперь работает, как ожидалось, для всех фиксированных объектов.
  • Исправлена ошибка, из-за которой Sound.play не выбирал настройку локального цикла, если она не была указана в параметре.
  • Активные анимации теперь отслеживают, приостанавливается ли игра, и нормально возобновляются, когда игра возобновляется (исправляет #179).
  • Переключение между вкладками теперь правильно приостанавливает игру на мобильных браузерах (iOS7+).
  • Переключение между вкладками правильно приостановит и возобновит твинов, позволяя их событиям onComplete срабатывать (исправляет #292).
  • Полноэкранный режим теперь использует window.outerWidth/Height при использовании EXACT_FIT в качестве режима масштабирования, что устраняет ошибки ввода координат (исправляет #232).
  • Полноэкранный режим теперь работает в Internet Explorer и использует новый вызов полноэкранного режима без префикса.
  • Исправлен TilemapParser — выдавал предупреждение о наборе тайлов, если были установлены поля/интервалы (исправление #485, спасибо Cybolic).
  • AnimationParser.spriteSheet не учитывал поля или интервалы при расчёте количества спрайтов в строке/столбце, а также не допускал дополнительного заполнения степени двойки в конце (исправление #482, спасибо yig).
  • Документация AnimationManager.add гласила, что «кадры» могут быть нулевыми, но код не мог обработать это, поэтому по умолчанию используется пустой массив, если ничего не указано (спасибо yig).
  • Решена проблема, из-за которой переставал работать SoundManager.volume на глобальной основе (исправляет #488).
  • Phaser.Timer больше не будет создавать отрицательные тики во время загрузки игры. Версия 1.1.6 — «Shienar» — 24 февраля 2014 г.

Новые примеры:

  • Добавлена прекрасная новая мини-игра в гольф от jpcloud.

Обновления:

  • Теперь Loader может загружать файлы JSON напрямую (спасибо lucas).
  • TilemapParser теперь выдаёт ошибку, если тайлсэт не того размера.

Исправления ошибок:

  • Обновлён Physics.Body.applyDamping, чтобы скорость корректно снижалась до нуля (спасибо caezs).
  • ArcadePhysics.collideSpriteVsTilemapLayer не вызывал процесс или коллизионные колбэки, если в проверке участвовал только один тайл (спасибо mandarinx).
  • Множество исправлений документации (спасибо nhowell).
  • Исправление для PixiPatch, благодаря которому маски снова отображаются (спасибо georgios).
  • Модифицирован ArcadePhysics.intersects, теперь он возвращает значение и присваивает его (спасибо bunnyhero).
  • Множество исправлений определений TypeScript (спасибо clark).

Версия 1.1.5 — «Saldaea» — 12 февраля 2014 г.

Исправления ошибок:

  • Явно приостановленный Timer продолжает работу, если вы перефокусируете окно браузера (спасибо georgiee).
  • Добавлены TimerEvent.pendingDelete и проверки в Timer.update, так что удаление события в колбэке больше не вызывает исключения (спасибо georgiee).
  • Исправлены определения TypeScript на строках 1741–1748 (спасибо wombatbuddy).
  • SAT.js добавлен в определение TypeScript. Теперь компилируется правильно.
  • В файл Grunt добавлен отсутствующий Line.js.
  • Уравнения diffX и diffY в Tilemap#paste изменены, исправлена проблема №393 (спасибо brejep).
  • Добавлено отсутствующее возвращаемое значение в Body.hitLeft и hitRight, исправляет проблему №398 (спасибо ram64).
  • Исправлен пример с замедлением анимации, проблема №379 (спасибо wesleywerner).
  • Удалена UMD-обёртка SAT.js, исправляет проблему №361 (спасибо luizbills).
  • Из Body.separate удалён чек inContact.
  • Исправлена документация по Tilemap (неверно указывала на методы Tileset).

Версия 1.1.4 — «Kandor» — 5 февраля 2014 г. Значительные изменения в API

  • Loader.tileset был удалён, поскольку он больше не требуется, это было сделано в рамках капитального ремонта системы Tilemap.
  • TilemapLayers теперь создаются через сам объект Tilemap: map.createLayer(x, y, width, height, tileset, layer, group), а не через GameObjectFactory.
  • Теперь Tilemap.createFromObjects может превратить кучу объектов Tiled в спрайты за один вызов и также копирует все свойства.
  • Tween.onStartCallback и onCompleteCallback были удалены во избежание путаницы. Вместо этого следует использовать события onStart, onLoop и onComplete.
  • Значение по умолчанию Button.forceOut изменилось с true на false, поэтому кнопки будут возвращаться в состояние Up (если оно установлено) при нажатии и отпускании.
  • Принцип работы обратного вызова процесса столкновения значительно изменился и теперь работает так, как изначально предполагалось.
  • Квадродерево уровня World больше не создаётся, они теперь строятся и разрушаются каждый раз, когда вы сталкиваете группу, что помогает повысить точность столкновений.
  • Была интегрирована система SAT для столкновений и разделения тел.
  • Тела больше не добавляются в квадродерево мира, поэтому все их свойства, связанные с квадродеревом, такие как skipQuadtree, quadTreeIndex и т. д., были удалены.
  • Body.drag был удалён. Пожалуйста, используйте новое значение Body.linearDamping (которое является числовым значением, а не объектом Point).
  • Body.embedded и Body.wasTouching были удалены, поскольку они больше не требуются.
  • Body.customSeparateX/Y были удалены, так как теперь следует использовать Body.customSeparateCallback.
  • Значения по умолчанию Body.maxVelocity были изменены с 10 000 до 2000.
  • Body.customSeparateCallback позволяет вам установить собственный обратный вызов, когда два тела должны разделиться, вместо использования встроенного метода.
  • Body.collideCallback позволяет задать обратный вызов, который срабатывает всякий раз, когда тело сталкивается с любой из его активных граней.
  • Body.allowCollision был переименован в Body.checkCollision.
  • Boolean Body.rebound контролирует, будет ли тело обмениваться скоростью при столкновении. Установите значение false, чтобы позволить ему «толкаться» (см. новые примеры).
  • Удалены Body.deltaAbsX и deltaAbsY, поскольку они больше не используются внутри.
  • Body.screenX и screenY стали геттерами, больше не рассчитываются каждый кадр.
  • ArcadePhysics теперь имеет setBounds и setBoundsToWorld, и вы можете указать, какие стены создаются или нет (слева, справа, сверху, снизу).
  • Удалено: Debug.renderSpriteTouching, Debug.renderLocalTransformInfo, Debug.renderWorldTransformInfo, Debug.renderSpriteCollision и Debug.dumpLinkedList.
  • Был удалён Body.setSize. Теперь следует использовать Body.setCircle, setRectangle или setPolygon.

Новые функции

  • Phaser.Timer теперь полностью функционален и полностью документирован. Вы можете создавать Phaser.TimerEvents на таймере, и было предоставлено множество новых примеров.

  • Добавлена поддержка API геймпада с множеством новых примеров (спасибо Карлу Маклину).

  • В конструктор Phaser.Game теперь можно передать один объект, содержащий все настройки игры + настройки Stage. Полезно для сложных конфигураций.

  • Ширина/высота, передаваемые Phaser.Game, теперь могут быть процентами, то есть «100 %» установит ширину на максимальную внутреннюю ширину окна.

  • Добавлено свойство stage.fullScreenScaleMode для определения масштабирования при полноэкранном режиме (спасибо oysterCrusher).

  • Добавлена поддержка полей и интервалов вокруг кадра в Loader.spritesheet.

  • Добавлен Device.vibration для проверки доступности API вибрации или её отсутствия.

  • Добавлены Device.trident и Device.trident## Version для тестирования IE11.

  • Добавлен Device.silk для обнаружения Kindle Fire и обновлена проверка рабочего стола, чтобы исключить Kindles (спасибо LuckieLordie).

  • У TilemapLayers теперь есть значения отладки и debugAlpha, которые включают отрисовку краёв столкновений (очень удобно для отладки, как следует из названия!).

  • У анимаций появилось новое событие: onLoop.

  • Теперь вы можете загрузить любой двоичный файл через Loader: game.load.binary(key, url, callback) — необязательный обратный вызов позволяет выполнить постобработку перед входом в кэш.

  • Group.set позволит вам глубоко установить новое свойство для одного дочернего элемента группы.

  • Было добавлено свойство Stage.display. Это прямая ссылка на корневой объект Pixi Stage (очень). Демо-версия запуска шара от Патрика О'Райли

  • Физика — запуск шара: бросьте спрайт в любую точку мира (Patrick O'Reilly).

  • Физика — следование за запуском шара в мире: расширенная версия примера запуска шара (Patrick O'Reilly).

  • Ввод данных — пример сенсорного джойстика, показывающий, как использовать виртуальный игровой контроллер clay.io (спасибо gabehollombe).

  • Игры — «Парные карты» (Matching Pairs) от Patrick O'Reilly.

  • Игры — «Саймон говорит» (Simon Says) от Patrick O'Reilly.

  • Анимация — пример использования событий анимации: onStart, onLoop и onComplete.

  • Отображение — Pixi Render Texture: преобразование Phaser примера Pixi.js Render Texture.

  • Ввод — 5 новых примеров использования API геймпада (спасибо Karl Macklin).

  • Анимация — создание группы: показывает, как создать анимацию для всех дочерних элементов группы за один вызов.

  • Частицы — дождь (Jens Anders Bakke).

  • Частицы — снег (Jens Anders Bakke).

  • Группы — вложенные группы: показывает, как внедрить одну группу в другую.

  • Время — множество новых примеров использования обновлённого класса Phaser.Timer.

Обновления

  • Обновление до последней версии сборки ветки разработки Pixi.js (до выпуска 1.4).
  • При уничтожении спрайта одновременно удаляются все активные фильтры.
  • Обновлён Pixi.js, чтобы удаление фильтров теперь работало правильно без нарушения списка отображения.
  • Phaser.Canvas.create обновлён, так что ему можно задать ID в качестве третьего параметра (также может быть установлен через новый объект конфигурации игры).
  • Пример отображения/полноэкранного режима обновлён с учётом нового изменения полноэкранного режима.
  • Множество обновлений файлов определений TypeScript — игры теперь полностью компилируются, добавлено много недостающих классов :) (спасибо Niondir).
  • Из конструктора Group удалён код проверки на «нулевой родитель». Теперь он будет родительским по отношению к game.world, только если значение parent не определено.
  • Учебники теперь переведены на испанский язык (спасибо feiss).
  • Метод separateY обновлён для повторной реализации специального условия «верховые платформы» (спасибо cocoademon).
  • SoundManager.onSoundDecode теперь отправляет ключ, за которым следует звуковой объект, также теперь отправляется кешем при автоматическом декодировании при загрузке.
  • Переработан метод переключения использования обрезанных спрайтов для поддержки масштабирования и вращения (спасибо cocoademon).
  • Большинство функций GameObjectFactory теперь имеют параметр group, поэтому вы можете сделать: game.add.sprite(x, y, frame, frameName, group), вместо того чтобы по умолчанию использовать группу World.
  • Методы Group.countLiving и countDead раньше возвращали -1, если группа была пустой, но теперь возвращают 0.
  • Текст теперь можно фиксировать на камере, обновлён пример world/фиксированный на камеру, чтобы показать это.
  • ArcadePhysics.overlap и collide теперь распознают TileSprites в проверках столкновений.
  • Много исправлений документации в классе Tween.
  • Твинеры запускают событие onLoop, если они настроены на повторение. Событие onComplete теперь срабатывает только для последнего повтора (или никогда, если повтор бесконечен).
  • Указатель раньше снимал паузу с приостановленной игры каждый раз, когда на него нажимали/касались (это позволяло избежать некоторых мошеннических плагинов браузера). Теперь это происходит, только если Stage.disableVisibilityChange имеет значение true.
  • Input теперь не устанавливает курсор по умолчанию, если он уже установлен в none.
  • Теперь можно сталкивать группу саму с собой. Это проверит всех детей друг против друга, но не самих себя (спасибо cocoademon).
  • RenderTexture.render / renderXY имеет новый параметр: renderHidden, логическое значение, которое позволит вам визуализировать спрайты, даже если их свойство visible установлено в false.
  • Добавлены определения prototype.constructor в каждый класс (спасибо darkoverlordofdata).
  • У метода Group.destroy появился новый параметр: destroyChildren (логический), который при необходимости вызовет метод destroy всех дочерних объектов Group.
  • Был добавлен метод Button.clearFrames.
  • Device.quirksMode — логическое значение, информирующее вас о том, находится ли страница в строгом (false) или нестандартном (true) режиме.
  • Canvas.getOffset теперь выполняет проверку строгого/нестандартного режима и использует document.documentElement при вычислении scrollTop и scrollLeft, чтобы избежать предупреждений консоли Chrome.
  • Класс Time теперь имеет собственный Phaser.Timer, доступ к которому можно получить через game.time.events. См. новые примеры таймера, чтобы узнать, как их использовать.
  • Добавлен StateManager.getCurrentState для возврата текущего запущенного объекта State (спасибо...). Удалено:
  • Перенаправление console.log из Utils, так как оно мешало работе в Firefox.
  • Привязка ArcadePhysics к QuadTree, теперь его можно использовать независимо от системы физики.
  • Методы ArcadePhysics.preUpdate и postUpdate, поскольку они больше не нужны.

Улучшения:

  • Body.acceleration стало более плавным и менее хаотичным на высоких скоростях.
  • Значения Body.bottom и Body.right больше не округляются, что даёт точные значения субпикселей.
  • Исправлена документация в классе Emitter.
  • Изменён предел ограничения для значения таймера delta, используемого для физических расчётов, с 1,0 до 0,05 в соответствии с основными обновлениями.
  • Улучшен Phaser.Math.min, чтобы можно было передавать либо массив чисел, либо множество чисел в качестве параметров для получения наименьшего значения.
  • Добавлен Phaser.Math.max как противоположность Math.min.
  • Добавлены Phaser.Math.minProperty и maxProperty. Работают аналогично Math.min/max, но могут быть заданы свойством массива или списка объектов для проверки.
  • В Body.reset добавлен параметр «full», позволяющий контролировать, будет ли сброшено движение или все данные.
  • Сделаны доступными Group.pivot и Sprite.pivot, чтобы можно было напрямую устанавливать опорные точки для вращения.
  • Использована собственная и более быстрая проверка Array.isArray.
  • Добавлен параметр контекста callback в Tween.onUpdateCallback(callback, context), чтобы избежать необходимости связывать или создавать анонимные функции.
  • Обновлён TweenManager.removeAll, чтобы он помечал все анимации как pendingDelete, а не удалял массив, чтобы избежать ошибок размера массива обратных вызовов анимации (спасибо DarkDev).

Исправления ошибок:

  • Cache.getImageKeys возвращал отсутствующие в массиве значения, теперь они исключены.
  • Исправлено Group.scale, теперь можно масштабировать группу напрямую.
  • Удалено World.scale, так как он мешал работе Group.scale — масштабирование мира всё ещё возможно, но необходимо учитывать изменения ввода самостоятельно.
  • Флаг «dirty» для Tilemap перемещён на флаг для каждого слоя. Исправляет ошибку №242.
  • Group.length теперь возвращает количество детей в группе независимо от их состояния существования/живости или 0, если в группе нет детей.
  • Camera.setBoundsToWorld изменено, чтобы соответствовать world.bounds, вместо world (спасибо cocoademon).
  • Исправлена ошибка, когда передача null в качестве родителя группы не устанавливала его в game.world, как это должно было быть (спасибо tito100).
  • Исправлен Pixi-баг (№425) — некорректное свойство width для многострочного BitmapText (спасибо jcd-as).
  • Tween.onStart теперь вызывается, когда анимация начинается после заданного значения задержки (спасибо stevenbouma).
  • Спрайты, которые зафиксированы на камере, теперь могут перетаскиваться с помощью ввода независимо от положения в мире (спасибо RafaelOliveira).
  • RenderTexture теперь корректно отображается в играх Canvas.
  • Canvas.addToDOM теперь более надёжен при применении стиля overflowHidden.
  • Исправлен Pixi.StripShader, который должен остановить странные проблемы с TileSprite GPU, о которых сообщалось (спасибо GoodboyDigital).
  • Патч desyrel.xml, чтобы в нём не было символов нулевой ширины/высоты, так как они нарушали работу Firefox 25.
  • Cache.addSound теперь реализует атрибут locked (спасибо haden).
  • Звук теперь проверяет CocoonJS во время воспроизведения, чтобы избежать конфликта readyState (спасибо haden).
  • Кнопки теперь правильно очищают ранее установленные кадры, если вы вызываете setFrames.
  • Звуки теперь будут корректно зацикливаться, если они приостановлены и возобновлены (спасибо haden).
  • InputHandler.checkBoundsRect и checkBoundsSprite теперь учитывают, зафиксирован ли спрайт на камере или нет.
  • Убрано свойство frame у TileSprites, так как его нельзя использовать, оно только разбивает изображение на тайлы, а не только его часть.
  • Исправлена ошибка WebGLRenderer updateGraphics (спасибо theadam).
  • Убрана дублирующаяся строка Timer.create (спасибо hstolte).
  • Исправлена проблема с камерой, которая немного не синхронизирована со спрайтами, зафиксированными на камере.
  • Решена проблема дрожания камеры размером в 1 пиксель, когда размер карты равен или меньше размера игры.

Версия 1.1.3 — «Arafel» — 29 ноября 2013 года

Новые функции:

  • Phaser.Filter. Новый способ использования новых шейдеров/фильтров WebGL, поддерживаемых новой версией Pixi.
  • Phaser.BitmapData object. Холст, на котором можно свободно рисовать с множеством функций. Может использоваться в качестве текстуры для спрайтов. Подробности см. в новых примерах и документации.
  • Вся библиотека Phaser была... Loader.audio теперь может принимать либо массив строк URL, либо одну строку URL (спасибо crazysam и kevinthompson)

MSPointer обновлён для поддержки IE11 путём удаления префикса из слушателей событий.

Добавлен Device.cocoonJS для определения того, работает ли игра под Cocoon или в нативном браузере.

Loader теперь использует новую систему очередей внутри, что означает, что вы можете иметь активы с одним и тем же ключом, распределённые по разным типам.

Исправления ошибок

  • Множество исправлений в файле определений TypeScript (большое спасибо gltovar).
  • Команды Tilemap используют указанный слой при его задании (спасибо Izzimach).
  • Mouse.stop теперь использует true useCapture, что означает правильное прослушивание слушателями событий (спасибо beeglebug).
  • Пример ввода с клавиатуры исправлен (спасибо Atrodilla).
  • BitmapText.destroy теперь проверяет наличие холста перед вызовом parentNode.
  • В Group.swap была обнаружена сложная ошибка, которая проявлялась только при восходящих заменах B-A. После нескольких часов отладки ошибка была устранена.
  • Point.rotate asDegrees исправлено (спасибо BorisKozo).
  • ArcadePhysics.separateTile не возвращал значение, поэтому пользовательский процесс обратного вызова не вызывался (спасибо flameiguana).
  • StageScaleMode.forceOrientation теперь правильно сохраняет значение forcePortrait (спасибо haden).
  • Исправления в Math и Loader (спасибо theJare).
  • Tween — isRunning не сбрасывается, когда завершается нециклический твин (спасибо crazysam и kevinthompson).
  • Math.normalizeAngle и Math.wrapAngle (спасибо theJare).
  • Device.isTouch модифицирован для проверки maxTouchPointers вместо MSPointer.
  • InputHandler.checkPointerOver теперь проверяет видимость группы спрайтов перед обработкой.
  • Корпуса спрайтов (используемые для столкновений тайлов) не обновлялись при разделении спрайт->спрайт (спасибо jcs).
  • Плагины, у которых был postUpdate, но не было Update, не были отмечены как активные (спасибо crazysam).
  • Функция StateManager.onPausedCallback не вызывается, когда игра приостановлена (спасибо haden).
  • Исправлен «джиттер» при прокрутке, где тайловые карты и спрайты отстают на один кадр (спасибо jcs).

Версия 1.1.2 — 1 ноября 2013 года

  • Новое: теперь вы найдёте полный базовый шаблон проекта в папке resources/Project Templates. Скоро добавим более сложные.

  • Новое: Phaser.Button теперь имеет возможность устанавливать звуковые эффекты при событиях over/out/up/down, чтобы они воспроизводились автоматически.

  • Новое: добавлен метод init в плагины, который будет вызываться при их добавлении в PluginManager (спасибо beeglebug).

  • Новое: Physics.Body теперь имеет свойство center (проблема 142, спасибо MikeMnD).

  • Новое: множество исправлений в поддержке полноэкранного режима. Ввод теперь работает, масштабирование восстанавливается должным образом, масштаб мира правильный, добавлена поддержка сглаживания.

  • Новое: добавлен Group.cursor. Он указывает на первый элемент, добавленный в группу. Вы можете перемещать курсор с помощью Group.next() и Group.previous().

  • Новое: добавлен Tween.isTweening(object), чтобы проверить, анимируется ли объект в данный момент или нет (спасибо mikehamil10).

  • Новое: добавлены методы getMagnitude, setMagnitude, normalize и isZero в Point (спасибо beeglebug).

  • Новое/изменение: Group.callAll теперь поддерживает вложенные функции и контекст, делая его действительно мощным!

  • Обновлённое: исправлены несколько последних ошибок в расчётах тела и границ спрайта, в свою очередь это решило проблемы с коллизиями тайловых карт в версии 1.1.

  • Обновлённое: завершена документация для класса Phaser.Button.

  • Обновлённое: улучшен и исправлен пример игры Invaders.

  • Обновлённое: улучшен и исправлен образец игры Star Struck.

  • Обновлённое: если вы приостановите анимацию, при следующем воспроизведении она возобновится (разморозится сама).

  • Обновлённое: hexToRGB теперь принимает короткие шестнадцатеричные коды (#EEE) (спасибо beeglebug).

  • Обновлённое: функции состояния (preload, update, render и т. д.) теперь передаются текущему параметру игры (спасибо beeglebug).

  • Обновлённое: если ваша игра работает в Canvas (не WebGL), теперь вы можете установить Stage.backgroundColor в строки CSS стиля rgba, позволяя использовать полупрозрачные игровые фоны.

  • Обновлённое: event.preventDefault() добавлен во все обработчики событий мыши.

  • Обновлённое: Sprite.deltaX/Y удалены из-за неиспользования. Значения prevX/Y перемещены в Sprite._cache.prevX/Y.

  • Обновлённое: из-за отсутствия... Расширяет функционал прототипа Sprite, который теперь может получать функции из классов, которые ранее не были предусмотрены (Button, TilemapLayer), теперь полностью изолирован.

  • Исправлена проблема 135 — добавлены проверки typeof в большинство функций ArcadePhysics для предотвращения ошибок с нулевыми значениями.

  • Исправлена проблема 136 — distanceTo использует worldX/Y вместо x/y.

  • Исправлено множество примеров, где клавиши курсора и пробел не блокировали перемещение страницы браузера (если вы найдёте ещё такие примеры, сообщите нам!).

  • Исправлена проблема 149 — файлы Starling XML снова загружаются правильно, также создан пример для демонстрации их использования (спасибо haden).

  • Устранена проблема, когда файл Starling XML не содержал значения frameX/Y, что приводило к сбою при импорте.

  • Пример с несколькими анимациями теперь представляет собой прекрасную подводную сцену :)

  • Исправлена проблема 141 — если Sprite перетаскивается, а указатель отпускается за пределами Sprite, то Sprite будет считать, что указатель всё ещё над ним (спасибо Paratron).

  • Исправлена проблема 88 — неверные значения game.input.x/y при клике на масштабированном этапе (спасибо DrHackenstein).

  • Исправлена проблема 143 — при переходе в полноэкранный режим координаты ввода x/y становились некорректными.

Версия 1.1.1 — 26 октября 2013 г.

  • Быстрый патч для восстановления работы Phaser.AUTO в Firefox / Android.
  • Любой ключ, добавленный через addKey, теперь автоматически добавляется в список захвата.

Версия 1.1 — 25 октября 2013 г.

Что нового

  • JSDoc работает! Мы добавили блоки jsdoc3 к каждому свойству и функции в каждом файле и опубликовали документацию API в папке docs.

  • Совершенно новая система примеров (больше никакого PHP!) и более 150 примеров для изучения.

  • Сгенерирован новый файл определений TypeScript (в папке сборки — спасибо TomTom1229 за ручную доработку).

  • Добавлена новая система сборки на основе Grunt (благодаря Florent Cailhol).

  • Новое: Phaser.Animation.generateFrameNames — очень полезно при создании данных анимации из атласов текстур с использованием имён файлов, а не индексов.

  • Добавлен Sprite.play в качестве удобного ярлыка для воспроизведения анимации, уже загруженной на Sprite.

  • Добавлен Canvas.setUserSelect() для отключения сенсорных выносок и пользовательских выделений внутри холста.

  • Добавлен Keyboard.addKey(), который создаёт новый объект Phaser.Key, который можно опрашивать на предмет обновлений, нажатых состояний и т. д. См. два новых примера, демонстрирующих использование.

  • Добавлен Button.freezeFrames boolean. Останавливает установку кадров при событиях мыши, если значение равно true.

  • Расширен загрузчик 404 error для отображения URL файла, который не загрузился, а также ключа.

  • Новое: добавлены константы направления для спрайтов, которые корректируются на основе движения тела.

  • Полностью переработан обработчик цикла обновления Sprite.update. В сочетании с исправлением кэша преобразования и дальнейшими оптимизациями это теперь выполняется гораздо быстрее.

  • Добавлен Keyboard.createCursorKeys(), который создаёт объект с четырьмя объектами Key внутри, сопоставленными с вверх, вниз, влево и вправо. См. новый пример в папке ввода.

  • Добавлено Body.skipQuadTree boolean для более точного контроля над тем, когда тело добавляется в World QuadTree.

  • Переработаны Angular Velocity и Angular Acceleration на Sprite.body и созданы два новых примера для демонстрации использования.

  • Добавлен Sprite.fixedToCamera boolean. Спрайт, зафиксированный на камере, не перемещается вместе с миром, но его координаты x/y относятся к верхнему левому углу камеры.

  • Добавлен Group.createMultiple — полезен, когда вам нужно создать группу идентичных спрайтов для объединения, например, пуль.

  • Добавлен Group.total. То же, что и Group.length, но больше соответствует остальной части именования Group.

  • Добавлен Sprite.outOfBoundsKill boolean flag. Автоматически уничтожит спрайт, покинувший границы игрового мира (по умолчанию отключено).

  • Множество изменений и исправлений в ArcadePhysics, включая:

    • Функции с «mouse» в названии были обновлены до «pointer», чтобы более точно отражать их назначение.
    • Новые функции скорости: moveToObject, moveToPointer, moveToXY
    • Новые функции ускорения: accelerateToObject, accelerateToPointer, accelerateToXY
    • Новые функции расстояния: distanceBetween, distanceToXY, distanceToPointer
    • Новые угловые функции: angleBetween, angleToXY, angleToPointer
    • velocityFromAngle и velocityFromRotation добавлены с созданными примерами. Что изменилось
  • Параметр killOnComplete для Animation.play. Действительно полезен в ситуациях, когда вы хотите, чтобы спрайт анимировался один раз, а затем уничтожал себя после завершения, например, эффект взрыва.

  • Добавлен Sprite.loadTexture(key, frame), который позволяет загружать новый набор текстур в существующий спрайт вместо создания нового спрайта.

  • Возвращён Sprite.destroy и значительно улучшена очистка дочерних объектов.

  • Во все основные функции Loader добавлено «return this», что позволяет при желании связывать вызовы загрузки.

  • Добавлены Text.destroy() и BitmapText.destroy(), а также обновлён Group.remove, чтобы сделать его более надёжным, если у элемента нет событий.

  • Добавлена Phaser.Utils.shuffle для перемешивания массива.

  • Обновлены Graphics.destroy, x, y и функции угла.

  • Добавлено AnimationManager.refreshFrame — сбросит текстуру, используемую для спрайта (полезно после очистки прямоугольника кадрирования).

  • Для быстрого тестирования перекрытия тела без разделения добавлены Physics.overlap(sprite1, sprite2).

  • На загруженной странице игра может загрузиться с неправильным смещением этапа x/y, что может привести к неправильному расчёту входных событий. Для решения этой проблемы в Stage добавлено новое свойство: Stage.checkOffsetInterval. По умолчанию оно будет проверять смещение холста каждые 2500 мс и соответствующим образом корректировать его. Вы можете установить значение «false», чтобы полностью отключить проверку, или установить более высокое или более низкое значение. Мы рекомендуем вам установить достаточно низкое значение во время предварительного загрузчика игр, но как только игра полностью загрузится, можно безопасно отключить проверку.

  • Добавлен Rectangle.floorAll для округления всех значений в Rectangle (x, y, ширина и высота).

Что изменилось:

  • Переименованы Phaser.Text.text в Phaser.Text.content, чтобы избежать конфликта и перезаписи из локальной переменной Pixi.

  • Переименован Phaser.Text.style в Phaser.Text.font, чтобы избежать конфликта и перезаписи из локальной переменной Pixi.

  • Phaser.Button теперь по умолчанию устанавливает useHandCursor в true.

  • При запуске нового состояния все активные твиновые анимации теперь удаляются.

  • Теперь по умолчанию при загрузке игры отключаются события user-select и touch action на игровом холсте.

  • Moved LinkedList.dump в Debug.dumpLinkedList(list).

  • Phaser.Animation.Frame теперь Phaser.Frame.

  • Phaser.Animation.FrameData теперь Phaser.FrameData.

  • Phaser.Animation.Parser теперь Phaser.AnimationParser (также файл переименован из Parser.js в AnimationParser.js).

  • Phaser.Loader.Parser теперь Phaser.LoaderParser (также файл переименован из Parser.js в LoaderParser.js).

  • Убрано свойство scrollFactor из всех игровых объектов. Извините, но новая система камеры не работает с ним, и в любом случае это вызывало всевозможные проблемы. Мы разработаем замену для него позже.

  • World теперь расширяет Phaser.Group. В результате мы обновили GameObjectFactory и другие классы, которые были связаны с ним. Если у вас где-то в коде использовалось world.group, вы можете просто удалить «group» из этого. Так что раньше world.group.add() теперь просто world.add().

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

  • Сделан Sprite.body необязательным и добавлены проверки, так что вы можете безопасно обнулить объект Sprite body, если используете свою собственную физическую систему, не влияя на рендеринг.

  • Перенесены проверки обновления камеры в World.postUpdate, поэтому все спрайты получают правильное скорректированное положение камеры.

  • Значение по умолчанию Game.antialias теперь «true», поэтому графика будет автоматически сглаживаться на холсте. Отключите его через конструктор игры или утилиты Canvas.

  • Phaser.Group теперь автоматически вызывает updateTransform для любого добавленного к нему потомка (избегает временных сбоев кадра при рендеринге новых объектов в первом кадре).

Что было обновлено:

  • Полный пересмотр Physics.Arcade.Body — теперь значительно. * Более стабильный и быстрый.
  • Обновлён ArcadePhysics.separateX/Y для использования новой системы тела — теперь результаты намного лучше.
  • Добавлен World.postUpdate — здесь происходят все изменения положения спрайта в результате физики перед рендерингом.
  • Добавлено Animation.paused — можно установить значение true/false.
  • Добавлена поддержка Body.maxVelocity (спасибо cocoademon).
  • InputHandler теперь создаёт массив _pointerData при создании и заполняет одним пустым набором значений, поэтому pointerOver и т. д. работают до вызова start.
  • Удалён параметр callbackContext из Group.callAll, поскольку он больше не нужен.
  • Обновлены Group.forEach, forEachAlive и forEachDead, теперь вы можете передать столько параметров, сколько захотите, которые будут переданы в обратный вызов после дочернего элемента.
  • Обновлён скрипт сборки, чтобы его можно было запускать из командной строки, и включает оболочки UMD (спасибо iaincarsberg).
  • World.randomX/Y теперь возвращает значения в любом диапазоне world.bounds (если установлено, иначе 0), включая отрицательные значения.
  • Обновлён InputHandler для использования Math.round вместо Math.floor при закреплении объекта во время перетаскивания.
  • Если вы не предоставили параметр useNumericIndex, то AnimationManager.add установит значение, посмотрев на тип данных первого элемента в массиве frames.
  • Group.create теперь устанавливает свойства visible и alive Sprite равными значению параметра «существует».
  • World.randomX/Y теперь работает с отрицательными значениями World.bounds.
  • Tweens .to теперь всегда будет возвращать родителя (спасибо powerfear).
  • Теперь вы можете передать PIXI.Texture в Sprite (вам также нужно передать Phaser.Frame в качестве параметра frame), но это полезно для спрайтов, использующих общие холсты соединений.
  • Группа.alpha теперь открыта публично и изменяет объект контейнера группы (не детей напрямую, у которых всё ещё могут быть свои собственные значения альфа).
  • Device.webGL использует новый код проверки для более точного обнаружения устройств, поддерживающих webGL.
  • Debug.renderSpriteBody обновлён для использования новых свойств Sprite.Body.screenX/Y.
  • Дополнительные проверки добавлены в AnimationManager.frame/frameName для заданных значений.
  • Теперь можно обнулить Sprite.crop, и он правильно очистит область прямоугольника обрезки.
  • Phaser.Time physicsElapsed delta timer clamp добавлен. Останавливает ошибки rogue iOS / медленных мобильных таймеров, вызывающих безумно высокие дельты.
  • Animation.generateFrameNames теперь может работать в обратном порядке, так что значения начала/остановки могут создавать кадры, которые соответственно увеличиваются или уменьшаются.
  • Loader обновлён для использования xhr.responseText при загрузке файлов json, csv или text. xhr.response по-прежнему используется для двоичных файлов Web Audio (спасибо bubba).
  • События Input.onDown и onUp теперь отправляют исходное событие, которое их вызвало (например, MouseEvent или TouchEvent) в качестве второго параметра после указателя (спасибо rezoner).
  • Значительно обновлён Sprite.crop. Значения теперь кэшируются, останавливая постоянные обновления кадров текстуры, и вы можете сделать, например, sprite.crop.width++ (спасибо haden).
  • Изменение: Sprite.crop необходимо включить с помощью sprite.cropEnabled = true.
  • Sprite.loadTexture теперь корректно работает со статическими изображениями, RenderTextures и анимациями.
  • Множество исправлений в Sprite.bounds. Теперь границы верны независимо от вращения, привязки или масштаба Sprite или любого из его родительских объектов.

Что было исправлено:

  • Найден баг QuadTree в версии 1.0.5, который теперь исправлен. QuadTree теперь обновляется должным образом с использованием значений localTransform.
  • Исправлены твинки Bounce.In и Bounce.InOut (спасибо XekeDeath).
  • Исправлена проблема в Animation.update, когда игра была приостановлена, она получала безумный дельта-таймер, вызывающий ошибку uuid.
  • Добавлен PixiPatch.js для исправления нескольких важных функций, пока Pixi не будет обновлён.
  • Исправлена ошибка в Animation.play, где заданные значения frameRate и loop не перезаписывали те, что были установлены при построении.
  • Исправлен небольшой баг, из-за которого Tween.pause / resume не возобновлялся корректно при прямом вызове.
  • Исправлена проблема, из-за которой очередь добавления Tweens.removeAll не очищала твинки.
  • Исправлено использование Emitter width/height для излучателей частиц (спасибо XekeDeath).
  • Сделана анимация более надёжной при пропуске кадров (спасибо XekeDeath).
  • Исправление для неправильной новой частицы. Позиционирование (проблема № 73) (спасибо cottonflop):
  • Исправлена проблема в Sound.play, из-за которой при отсутствии маркера воспроизводился весь звуковой спрайт.
  • Button.setFrames теперь устанавливает текущий кадр на основе состояния кнопки немедленно.
  • Loaded.setPreloadSprite теперь округляет значения ширины/высоты и начинает с 1. Это устраняет ошибки отрисовки холста в IE9/10 и Firefox.
  • Исправлена проблема, вызывающая постоянное срабатывание Keyboard.justPressed (спасибо stemkoski).
  • Исправлен баг в LinkedList#remove, который мог привести к тому, что first указывал на мёртвый узел (спасибо onedayitwillmake).
  • Fixed Cache.addDefaultImage, чтобы стандартное изображение работало в Canvas, а также в WebGL. Обновлён до нового изображения (чёрный квадрат 32x32 с зелёной обводкой).
  • Исправлена ошибка в проверке кэша преобразования Sprite, которая приводила к постоянному аннулированию кэша перекоса/масштаба — теперь обновляется по мере необходимости, значительное увеличение производительности!
  • Исправлена опечатка в StageScaleMode, теперь это не pageAlignVeritcally, а pageAlignVertically.
  • Исправлена проблема в Group.countLiving / countDead, где значение было на единицу больше (спасибо mjablonski).
  • Исправлена проблема с дрожащей камерой, если вы перемещали Sprite через скорость вместо размещения x/y.
  • Исправлено RandomDataGenerator.sow, так что теперь при вводе одного и того же семени вы получите те же результаты (спасибо Hsaka).
  • Исправлена Проблема № 101 (Мышь Кнопка 0 не распознаётся, спасибо rezoner).
  • Исправлена проблема, когда создание анимации только с одним кадром с индексом нуля вызывало ошибку UUID (спасибо SYNYST3R1).
  • Исправлено Rectangle.union (спасибо andron77).
  • Sound.resume теперь корректно возобновляет воспроизведение с момента паузы (исправляет проблему 51, спасибо Yora).
  • Исправлена проблема 105, когда уничтоженный перетаскиваемый объект вызывал ошибку ввода (спасибо onedayitwillmake).
  • Исправлена Проблема 111 — вызов Kill для экземпляра Phaser.Graphics вызывает ошибку неопределённых событий.
  • Game.destroy теперь останавливает raf, а также закрывает все связанные с вводом прослушиватели событий (Проблема 92, спасибо astrism).
  • Теперь пиксельное обнаружение кликов работает даже если Sprite является частью атласа текстур.

Версия 1.0.6 — 24 сентября 2013 г.

  • Добавлена проверка в Pointer.move, чтобы всегда учитывать Sprite с включённым pixelPerfect, независимо от идентификатора рендеринга.
  • BUG: Пиксельная проверка кликов не работает, если Sprite является частью атласа текстур.
  • Исправлена проблема с антиалиасингом в конструкторе игры, который не устанавливался правильно (спасибо luizbills).
  • Возвращена поддержка игрового объекта Graphics и двух примеров (спасибо earok за обнаружение).
  • Новое: Твинам теперь можно ставить в цепочку через несколько вызовов to() + создан пример (спасибо powerfear за добавление).
  • Исправлен Math.wrap (спасибо TheJare).
  • Новое: При загрузке листа спрайтов теперь можно передавать отрицательные значения для размеров кадра, которые указывают количество строк/столбцов для загрузки (спасибо TheJare).
  • Новое: BitmapText теперь поддерживает якорь и имеет фиксированные размеры поля (спасибо TheJare).
  • Исправлена ошибка, когда состояние содержало пустой Preloader, Update не вызывался (спасибо TheJare).
  • Добавлено несколько новых примеров (камеры, твимы и т. д.).
  • Добавлены дополнительные проверки, чтобы остановить столкновение, если оно включает пустую группу (спасибо cang).
  • Добавлено сглаживание времени в обновлении анимации, чтобы помочь кадрам, надеюсь, не слишком сильно рассинхронизироваться во время длинных анимаций с высокой частотой кадров.
  • Добавлен пропуск кадров в Animation.update. Если он сильно отстаёт, то теперь будет пропускать кадры, чтобы попытаться наверстать упущенное.

Версия 1.0.5 — 20 сентября 2013 г.

  • Исправлена проблема в FrameData.getFrameIndexes, где входной массив игнорировался.

  • Добавлен Math.numberArray — возвращает массив чисел от min до max (включительно), полезен для построения кадров анимации.

  • Исправлена ужасно коварная ошибка: если новый твин создавался в обратном вызове onComplete твинка, который вот-вот будет удалён, он автоматически вставлялся.

  • В Tween добавлен атрибут pendingDelete, чтобы предотвратить появление ошибок обновления во время цикла TweenManager после удаления твинка из обратного вызова.

  • Добавлен атрибут length в Group.

  • Атрибуты x/y добавлены в Phaser.Text явно, чтобы он работал с... Система камер (спасибо cocoademon)

  • Исправлена проблема, из-за которой не воспроизводились несколько анимаций одновременно, воспроизводилась только последняя (массив кадров был перезаписан, спасибо Legrandk).

  • Обновлён Debug.renderSpriteBounds(), теперь он больше не использует устаревший Sprite.worldView (спасибо MikeMnD).

  • Добавлены 2 новых свойства в объект Text: Text.text и Text.style, оба являются геттерами/сеттерами и не помечаются как грязные, если не изменены, поэтому безопасны для использования в основном цикле.

  • Удалён чек существования из Group.callAll, теперь он работает со всеми дочерними элементами (как следует из названия).

  • Добавлен Group.callAllExists — теперь можно вызывать функцию для всех детей, у которых exists = предоставленное логическое значение.

  • Завершена работа над примером игры Breakout — теперь полностью играбельна, правильный отскок, подсчёт очков, жизни и т. д.

  • Удалена фиктивная запись Group.sort до тех пор, пока она не заработает.

  • Удалён ArcadePhysics.postUpdate.

  • Обновлён Sprite.update, чтобы установить renderable в false, когда объект выходит за пределы камеры, а не «видимое» false, иначе это останавливает обновление преобразования Pixi.

  • ОШИБКА: существует известная проблема, когда QuadTree получает неправильные координаты прямоугольника, если Sprite является дочерним элементом Group или другого Sprite, который имеет смещение x/y.

Версия 1.0.4 — 18 сентября 2013 г.

  • Небольшое исправление в Phaser.Canvas, чтобы он не устанавливал overflow hidden, если родительский элемент DOM не существует.

  • Добавлен Loader.setPreloadSprite(sprite, direction) — это автоматически применит обрезной прямоугольник к спрайту, который обновляется в соответствии с ходом загрузки.

  • Множество изменений внутри StateManager. Функции состояния теперь передаются через link(), который автоматически создаёт ключевые свойства Game (загрузка, ввод и т.д.).

  • Исправлена ошибка в getFrameByName, которая не возвращала первый кадр в массиве.

  • Обновлено Phaser.Rectangle.intersects для использования x и y вместо left и top, чтобы его можно было использовать для проверки перекрытия физических тел.

  • Исправлена проблема в кэше, где индекс кадра не был установлен правильно (спасибо Cameron).

  • Исправлена проблема в Sprite, где boundsY не был установлен (спасибо Cameron).

  • По какой-то причине в файле сборки было 2 копии класса Canvas — исправлено, сэкономлено несколько КБ :)

Версия 1.0.3 — 17 сентября 2013 г.

  • FrameData.getFrameIndexes и getFrameIndexesByName реорганизованы в более универсальную функцию getFrames.

  • Различные исправления параметров цикла в звуковой системе.

  • Документация начата для большинства классов. Следите за прогрессом в папке Docs.

  • Оптимизирован AnimationManager.add, теперь он будет получать только необходимые кадры, а не все, и теперь быстрее анализирует данные кадра.

  • Исправлено Phaser.Text и Phaser.BitmapText, теперь они отображаются правильно, и добавлено несколько примеров текста.

Версия 1.0.2 — 16 сентября 2013 г.

  • Добавлен необязательный параметр в Animation.stop: resetFrame. Если true, анимация будет остановлена, а затем текущий кадр будет сброшен на первый кадр анимации.

  • Исправлена проблема, вызывающая игнорирование параметром количества «взрывов» частиц.

  • Добавлено 'collideWorldBounds' в Emitter.makeParticles.

  • Добавлено Emitter.angularDrag.

  • Изменено Emitter.bounce с числа на точку, так что теперь установите его свойства x/y для управления различным количеством отскоков на ось.

  • Исправлена ошибка в AnimationManager, где useNumericIndex всегда был установлен в true.

  • Добавлено множество примеров частиц.

  • Добавлена начальная часть игры Breakout.

  • Добавлена начальная часть платформерной игры.

Версия 1.0.1 — 15 сентября 2013 г.

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

  • В Group.create добавлен необязательный флаг, позволяющий установить состояние существования спрайтов по умолчанию.

  • Sprite.animation.stop больше не требует параметра имени анимации, по умолчанию останавливается текущая анимация.

  • Лицензия в package.json исправлена.

  • Логическая ошибка в функции separateTileX исправлена, иногда это приводило к туннелированию больших спрайтов через маленькие плитки.

Версия 1.0 — 13 сентября 2013 г.

  • Массовый рефакторинг всей кодовой базы.

  • Basic и GameObject удалены, Sprite переведён на диету. 127 свойств и методов сокращены до... Методы:

  • Расширенные проверки звука устройства для включения opus и webm.

  • Обновлены Loader и Cache, теперь они поддерживают загрузку тегов Audio(), а также Web Audio.

  • Установлено Input.recordPointerHistory в значение false, теперь вам нужно включить отслеживание указателя, если вы хотите его использовать.

  • SoundManager теперь автоматически обрабатывает разблокировку касанием на iOS.

  • Добавлен TilemapLayer.putTileWorldXY для размещения тайла на основе значений пикселей и putTile на основе координат карты тайлов.

  • Уменьшено количество итераций StageScaleMode.setScreenSize с 40 до 10 и задокументирована минимальная высота тела в 2000 пикселей.

  • Добавлена Phaser.Net для функций браузера и сети, в настоящее время включает синтаксический анализ строки запроса и методы обновления.

  • Добавлен новый компонент CSS3 Filters. Применяйте фильтры размытия, оттенков серого, сепии, яркости, контраста, поворота оттенка, инвертирования, непрозрачности и насыщения к игровому этапу.

  • Исправлены методы CircleUtils.contains и containsPoint.

  • Устранена проблема со слишком высокими значениями Input.speed для новых событий касания.

  • Добавлен Sprite.bringToTop().

  • Добавлен Stage.disableVisibilityChange, чтобы остановить автоматическую паузу/возобновление.

  • Добавлена поддержка кадрирования в компоненте Texture, так что вы можете выполнять Sprite.crop для ограничения рендеринга указанным прямоугольником без искажений.

  • Добавлены ссылки на все функции прослушивателя событий, чтобы их можно было аккуратно уничтожить.

  • Исправлена интересная проблема в Firefox, когда при завершении аудиодорожки срабатывало ещё одно событие «canplaythrough», сбивая с толку Loader.

  • Добавлен новый PluginManager. Все эффекты камеры перенесены в плагины. Теперь всё будет плагином.

  • Добавлен Sprite.transform.centerOn(x,y) для быстрой центровки спрайта по координатам без изменения происхождения спрайта и независимо от вращения.

  • Добавлен Input.pollRate — это позволяет ограничить частоту обработки событий указателя (0 = каждый кадр, 1 = через кадр и т. д.).

  • Переименована функция «init» в «preload». Теперь она автоматически вызывает load.start.

  • Добавлен класс CanvasUtils, включая возможность установки рендеринга изображения, добавления холста в DOM и других полезных вещей.

Версия 0.9.6 — 24 мая 2013 г.

  • Практически у каждого класса теперь есть документация — если вы обнаружите опечатку или что-то пропущенное, пожалуйста, сообщите (спасибо pixelpicosean).

  • Файл Grunt обновлён для создания нового файла JS Special FX (спасибо HackManiac).

  • Устранена проблема, мешающая работе Phaser на iOS 5 (iPad 1).

  • Создана новая папка для мобильных тестов, обновлён index.php для использования мобильного CSS и проведены некоторые тесты для мобильных устройств.

  • Решены несколько проблем со скоростью в стандартном браузере Android 2.x.

  • Контекст камеры save/restore перемещён обратно в проверки параметров (ускорение работы стандартного браузера Samsung S3).

  • Исправлен баг с StageScaleMode.checkOrientation, не учитывающим значение NO_SCALE.

  • Добавлена поддержка MSPointer (спасибо Diego Bezerra).

  • Добавлена Camera.clear для выполнения clearRect вместо fillRect, если необходимо (по умолчанию — false).

  • Поменяно значение Camera.opaque по умолчанию с true на false для повышения производительности.

  • Обновлено Stage.visibilityChange, чтобы избежать блокировки экрана паузы в определённых ситуациях.

  • Добавлены сигналы StageScaleMode.enterLandscape и enterPortrait для упрощения проверки ориентации устройства.

  • Добавлено StageScaleMode.isPortrait.

  • Обновлён StageScaleMode для проверки как window.orientationchange, так и window.resize событий.

  • Обновлён RequestAnimationFrame для использования performance.now для субмиллисекундной точности и для управления циклом Game.time.update.

  • В RequestAnimationFrame setTimeout используется фиксированный временной шаг и изменена последовательность обратных вызовов. Производительность Android 2/iOS5 значительно улучшилась.

  • Удалены Stage.ORIENTATION_LANDSCAPE, поскольку значения должны быть взяты из Stage.scale.isPortrait / isLandscape.

  • Удалено Stage.maxScaleX/Y, они перемещены в StageScaleMode.minWidth, minHeight, maxWidth и maxHeight.

  • Исправлено Stage.scale, чтобы он изменял размер без необходимости сначала менять ориентацию.

  • Добавлены StageScaleMode.startFullscreen(), stopFullScreen() и isFullScreen для использования API полноэкранного режима в настольных браузерах.

  • Поменян Stage.offset с Point на MicroPoint.

  • Поменян Stage.bounds с Rectangle на Quad.

  • Добавлена поддержка State.destroy. Функция вызывается при переходе в новое состояние (спасибо JesseFreeman).

  • Добавлен Sprite.fillColor, используемый в рендере Sprite, если изображение не загружено (устанавливается через свойство или Sprite.makeGraphic) (спасибо JesseFreeman).

  • Переименован Phaser.Finger в Phaser.Pointer.

  • Обновлены все классы Input, теперь они используют Input.pointers с 1 по 10.

  • Обновлён Touch и MSPointer для поддержки мультитач (если оборудование поддерживает это) и созданы новые тесты для демонстрации этого.

  • Добавлены Input.getPointer, Input.getPointerFromIdentifier, Input.totalActivePointers и Input.totalInactivePointers.

  • Добавлены Input.startPointer, Input.updatePointer и Input.stopPointer.

  • Подтверждена работа Phaser Input на Windows Phone 8 (Nokia Lumia 920).

  • Добавлен Input.maxPointers, чтобы ограничить количество пальцев, которые ваша игра будет слушать в системах с мультитачем.

  • Добавлен Input.addPointer. По умолчанию Input создаст 5 указателей (+1 для мыши). Используйте addPointer() для добавления максимум до 10.

  • Добавлен Input.position — объект Vector2, содержащий последнюю позицию последнего активного Pointer.

  • Добавлен Input.getDistance. Найдите расстояние между двумя заданными объектами Pointer.

  • Добавлен Input.getAngle. Найдите угол между двумя заданными объектами Pointer.

  • Значение Pointer.totalTouches ведёт текущий счёт количества нажатий Pointer.

  • Добавлены Pointer.position и positionDown. positionDown размещается при касании, а position обновляется при перемещении, что полезно для отслеживания расстояния/направления/жестов.

  • Добавлено Game.state — теперь содержит ссылку на текущий объект состояния (если он был задан).

  • Перенесены события запуска Input из конструкторов в один метод Input.start.

  • Добавлена Input.disabled boolean для глобального отключения всей обработки событий ввода.

  • Добавлены Input.Mouse.disabled, Input.Touch.disabled, Input.MSPointer.disabled и Input.Keyboard.disabled.

  • Добавлен Device.mspointer boolean. true, если MSPointer доступен на устройстве.

  • Добавлены сигналы Input.onDown, onUp, onTap, onDoubleTap и onHold, запускаемые мышью или касанием.

  • Добавлен Input.recordPointerHistory для записи координат x/y, отслеживаемых Pointer. Также добавлены Input.recordRate и Input.recordLimit для точного управления.

  • Добавлен Input.multiInputOverride, который может быть MOUSE_OVERRIDES_TOUCH, TOUCH_OVERRIDES_MOUSE или MOUSE_TOUCH_COMBINE.

  • Добавлен GameObject.setBoundsFromWorld для быстрой установки границ игрового объекта в соответствии с текущим игровым миром.

  • Добавлены GameObject.canvas и GameObject.context. По умолчанию они ссылаются на Stage.canvas, но могут быть изменены на что угодно, например DynamicTexture.

  • Новые ссылки на canvas и context применяются к Sprite, GeomSprite и TilemapLayer.

  • Добавлен DynamicTexture.assignCanvasToGameObjects(), позволяющий перенаправлять рендеринг GameObject на DynamicTexture массово.

  • Добавлен DynamicTexture.render(x,y) для рендера текстуры на холст Stage.

  • Добавлен Basic.ignoreGlobalUpdate — останавливает обновление объекта как часть основного игрового цикла, вам нужно будет вызвать update самостоятельно.

  • Добавлен Basic.ignoreGlobalRender — останавливает рендер объекта как часть основного игрового цикла, вам нужно будет вызвать render самостоятельно.

  • Добавлены параметры forceUpdate и forceRender в Group.update и Group.render соответственно. В сочетании с ignoreGlobal можно создавать собственные настройки рендеринга.

  • Исправлен расчёт прогресса Loader.progress, теперь он точно передаёт значение от 0 до 100 вашему обратному вызову загрузчика.

  • Добавлен параметр «жёсткий сброс» в Input.reset. Жёсткий сброс очищает сигналы ввода (например, при смене состояния), мягкий (например, при паузе игры) — нет.

  • Добавлен Device.isConsoleOpen() для проверки, открыта ли консоль браузера. Протестировано в Firefox с Firebug и Chrome с DevTools.

  • Добавлен параметр задержки в Tween.to().

  • Исправлена ошибка, когда GeomSprite.renderOutline игнорировался для объектов Circle.

  • Исправлена ошибка с рендером кругов GeomSprite в два раза больше их размера и со смещением от фактических значений x/y.

  • Добавлен Sprite.cacheKey, хранящий ключ элемента из кэша, который использовался для его текстуры (если есть). Версия 0.9.4 — 28 апреля 2013

  • Добавлены методы Tilemap.getTile, getTileFromWorldXY, getTileFromInputXY.

  • Добавлены методы Tilemap.setCollisionByIndex и setCollisionByRange.

  • У GameObject появился параметр renderRotation, который позволяет контролировать визуальное вращение спрайта (полезно, когда нужно изменить угол, но графика не меняется).

  • В Camera.width/height добавлена дополнительная проверка, чтобы их нельзя было установить больше размера Stage.

  • Появились методы Collision.separateTile и Tilemap.collide.

  • Исправлена ошибка проверки границ Tilemap, если размер карты меньше игровых размеров.

  • Сделаны публичными методы World._cameras, World.cameras и превращён в геттер метод Game.camera (спасибо Hackmaniac).

  • Метод Circle.isEmpty теперь правильно проверяет диаметр (спасибо bapuna).

  • Обновлён Gruntfile для экспорта новой версии phaser.js, завёрнутой в блок UMD для require.js/commonJS (спасибо Hackmaniac).

Версия 0.9.3 — 24 апреля 2013

  • Добавлен новый игровой объект ScrollZone. Бесконечно полезен, особенно для прокручивающихся фонов. Создано 6 примеров тестов.
  • У объекта GameObject появились методы hideFromCamera(cameraID), showToCamera и clearCameraList, которые позволяют скрыть объект от определённой камеры или показать его ей, а также очистить список камер.
  • Объект GameObject получил метод setBounds(), который ограничивает игровой объект определённой областью мира (полезен, чтобы объекты не уходили за края).
  • У объектов GameObject появился атрибут outOfBoundsAction, который может быть либо OUT OF BOUNDS STOP, останавливающим движение объекта, либо OUT OF BOUNDS KILL, убивающим его.
  • У объектов GameObject появился атрибут rotationOffset, полезный, если графику нужно повернуть, но она не была нарисована лицом к нулю градусов (вправо).
  • Класс GameMath получил атрибуты shiftSinTable и shiftCosTable, позволяющие быстро перебирать таблицы данных.
  • Улучшена проверка кадров в AnimationManager.
  • Переработана обработка Tilemap с нуля, чтобы обеспечить поддержку многослойных карт (экспортированных из Tiled / Mappy).
  • Tilemap больше не требует буфера на камеру (в рамках подготовки к поддержке WebGL).
  • Решены проблемы с Group, не добавляющим ссылку на Game к вновь созданным объектам (спасибо JesseFreeman).
  • Предотвращена потенциальная проблема состояния гонки в Game.boot (спасибо Hackmaniac).
  • Исправлено отображение кадра ноль атласа текстур перед началом воспроизведения анимации (спасибо JesseFreeman).
  • Исправлен баг, при котором Camera.visible = false всё равно выполняла рендеринг.

Опубликовать ( 0 )

Вы можете оставить комментарий после Вход в систему

1
https://api.gitlife.ru/oschina-mirror/codeveryday-phaser-ce_wechat.git
git@api.gitlife.ru:oschina-mirror/codeveryday-phaser-ce_wechat.git
oschina-mirror
codeveryday-phaser-ce_wechat
codeveryday-phaser-ce_wechat
master