@jorginius, @photonstorm, @samme
@samme, @SBCGames
Указатели ввода останавливаются для события «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} в конфигурации вашей игры.
@jf-m, @josalmi, @photonstorm, @samme.
@daniel-nth, @highlyinteractive, @mikeks, @ndee85, @photonstorm, @samme, @thomasMeynckens.
Если вы используете аргумент loadAnchors в конструкторе Phaser.Creature, вам придётся изменить свой код.
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.
Исправлена ошибка передачи параметров 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).
Исправлено определение для 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.
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 | активен |
(†) захват включён
input.mouseWheel
. Изменённые свойства:— input.mouse.wheelDelta
→ input.mouseWheel.delta
;
— input.mouse.mouseWheelCallback
→ input.mouseWheel.callback
.
Старые свойства пока продолжают работать.
Обработчик колеса мыши использует input.mouseWheel.preventDefault
, а не input.mouse.capture
.
input.pointerLock
. Изменённые свойства:— input.mouse.pointerLock
→ input.pointerLock.onChange
;
— input.mouse.requestPointerLock()
→ input.pointerLock.request()
;
— input.mouse.locked
→ input.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 был удалён.
@giniwren, @griever989, @mindcity, @omretterry, @photonstorm, @samme, @Siri0n, @tobspr.
@bseiller, @GrindheadGames, @josalmi, @photonstorm, @qdrj, @samme, @Siri0n, @zhanghuanchong.
@budda, @Hagisus, @HaoboZ, @hardylr, @intersrc, @jamesjsewell, @josalmi, @joshlory, @melissaelopez, @mickeyren, @photonstorm, @samme, @tobspr.
@KIVassilev, @photonstorm, @samme.
Вы можете установить... Версия 2.10.1 — 18 февраля 2018
@bseiller, @dhashvir, @Lucas-C, @mmacvicar, @Nek-, @netdreamer, @omretterry, @pantoninho, @photonstorm, @samme, @seiyria, @squaresun, @Tembac, @wtravO.
Версия 2.10.0 — 18 января 2018
В запросе нет информации о содержании версии 2.10.0. Конфиг:
Новые функции игрового цикла:
Константы 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:
Phaser.Video#playWhenUnlocked.
Сигнал Phaser.Video#onTouchUnlock.
Обновления
Теперь Phaser возвращается к рендереру Canvas, если выбран AUTO и создание контекста WebGL не удаётся. Phaser.Device#webGL теперь является мягкой проверкой и не создаёт тестовый контекст WebGL. Это немного точнее (#402) и немного быстрее (#420). Phaser.Device#webGLError был удалён.
Ввод с геймпада теперь включён, пока игра приостановлена (#423).
Убрано сглаживание усиления для изменений громкости WebAudio (#385).
Обновлён ионный пример проекта (#381).
Удалены следующие устаревшие элементы (#403):
Исправлены ложные срабатывания в TweenManager#isTweening (#414). Изменение свойства smoothed у отображаемого объекта теперь помечает текстуру WebGL как грязную (#432, #433).
@ankush-badyal, @Dreaded-Gnu, @Mertank, @pavle-goloskokovic, @photonstorm, @qdrj, @samme, @squaresun
checkIsRunning
(#414).game.stage
в качестве параметра parent
в методах game.add.useCenter
(#418).style
(#415).@bananatron, @mblais, @mepsoid, @naglfar, @photonstorm, @samme
Phaser.BitmapData#polygon рисует многоугольник.
Phaser.Keyboard#removeCallbacks удаляет обратные вызовы, добавленные с помощью Phaser.Keyboard#addCallbacks.
Phaser.Loader#imageFromGrid и Phaser.Loader#imageFromTexture являются аналогами Phaser.Create#grid и Phaser.Create#texture для загрузки изображений.
Phaser.Point.sortClockwise сортирует точки вокруг опорной точки.
Phaser.Point#atan вычисляет арктангенс точки.
Phaser.Point#expand увеличивает величину точки до минимальной длины.
Phaser.World#wrapAll оборачивает всех членов группы. Оптимизация и улучшения в Phaser 2.9.2 от 9 ноября 2017 года
Новые функции:
Обновления:
Исправления ошибок:
Документация:
Спасибо: @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.
Переименован метод Emitter#count в Emitter#counts. Emitter#count устарел и будет удалён в версии v2.9.0.
Удалён устаревший метод Phaser.Events#onRemovedFromWorld.
Исправлено столкновение полигонов p2 (#366).
Исправлена нефатальна ошибка при нажатии на холст игры в браузерах, не поддерживающих Document.hasFocus() (например, Opera Mini, старая версия Opera) (#367). В этих браузерах игра может не возобновляться автоматически при повторном получении фокуса. Версия 2.8.7 — 12 сентября 2017
Документация:
Спасибо: @bobhfut, @falquaddoomi, @HaoboZ, @pavle-goloskokovic, @photonstorm, @samme.
Версия 2.8.6 — 10 сентября 2017
Обновления: несколько внутренних изменений в Phaser.DeviceButton и Phaser.Pointer (https://photonstorm.github.io/phaser-ce/Phaser.DeviceButton.html и https://photonstorm.github.io/phaser-ce/Phaser.Pointer.html соответственно).
Исправления ошибок:
Документация:
Благодарности: @2called-chaos, @bseiller, @falquaddoomi, @johnbuttcoingalt, @photonstorm, @samme, @samvieten, @yupaul.
Версия 2.8.5 — 30 августа 2017
Изменения:
grunt custom --exclude=moduleName --filename=phaser-custom
Исправленные ошибки:
Исправлена ошибка ReferenceError в Phaser.Input#executeTouchLockCallbacks, затрагивающая Firefox Mobile (#336).
@Dreaded-Gnu, @goldfire, @photonstorm, @rafelsanso, @ryanrossiter, @samme, @Zykino
cacheAsBitmap и generateTexture могут обрезать прозрачные пиксели (#283).
points
(#301).alphaThreshold
в InputHandler#enableDrag — это число, а не логическое значение.Перевод текста на русский язык:
В запросе нет информации о других частях текста. Пожалуйста, уточните запрос, если вам требуется перевод дополнительных фрагментов. Отчёт о проделанной работе
Благодарности bulgakovk, cmd-johnson, dolanmiu, georgesboris, johnbuttcoingalt, mindcity, photonstorm, samme.
Версия 2.8.1 — 20 июня 2017 года
Новые функции
Обновления
Исправления ошибок
Исправлено... Версия 2.7.7 — 20 апреля 2017
Добавлены:
Обновления:
Исправления ошибок:
Благодарности:
@aaronransley, @andrewjb123, @Cryt1c, @goldfire, @gre, @LandonSchropp, @NickH-nz, @noseglid, @photonstorm, @samme, @tanquetav, @vantreeseba, @vpmedia, @Xan0C.
Исправлены ошибки:
Исправлен неправильный расчёт worldScale (#15).
@fridrisnew, @goldfire, @hdodov, @Peter42, @photonstorm, @samme, @SBCGames, @vpmedia
Устранена проблема, из-за которой вызов 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
Phaser.Image#lifespan теперь работает правильно (#46). Фазер. Физикс. Аркада. Боди. ресет() теперь изменяет размер тела, если масштаб спрайта изменился (#10).
Исправлена работа Фазер. Камера. чекбаундс(), чтобы она не мерцала, когда её вид больше границ.
Восстановлена работа функций Фазер. Матх#бетвен и Фазер. Матх#рандом.
Фазер. Лоадер теперь сбрасывается непосредственно перед тем, как сигнализирует о завершении загрузки (#53).
Исправлено рендеринг на устройствах, использующих старые версии JavaScript.
Устранены сбои на очень старых устройствах.
Исправлена ошибка при уничтожении спрайта во время Фазер. Груп#апдейт.
Отслеживание локального вращения в Фазер. Вэпон#файр восстановлено (#66).
В Фазер. Саунд устранена утечка памяти WebAudio.
Заменён отсутствующий файл jshintrc (#2912).
Добавлен аргумент tempPoint / undefined блок в Graphics.содержитПоинт.
Исправлена условная проверка Text.сетЧарэктери Лимит.
Добавлен аргумент разрешения в LoaderParser.джсонБмтФонт.
Определения TypeScript для Phaser. Плагин. АСтар приведены в соответствие с исходным кодом плагина.
Уточнение единиц времени в Phaser. Саунд.
Уточнено поведение group.exists.
Уточнена семантика fixedToCamera.
Изменён Emitter.гравити с числа на Phaser. Поинт.
Решена проблема, из-за которой tsc иногда выдавал ошибки при определённых обстоятельствах.
Теперь кнопки геймпада работают правильно при частичном нажатии и отпускании.
Phaser. Лайн. интерсекстРектэнгле() теперь работает правильно для горизонтальных и вертикальных линий (#2942).
Функция removeTextureAtlas теперь удаляет правильный объект кэша.
Добавлен третий необязательный параметр в PIXI. БазэТекстур, позволяющий масштабировать текстуры в соответствии с devicePixelRatio (спасибо @cloakedninjas).
Исправлены определения TypeScript и обновления (спасибо @Aleksey-Danchin).
Phaser. АниматионПарсер. спрайтШит() теперь работает должным образом (спасибо @stoneman1, @qarlosh).
EarCut не был включён в сборку из-за неправильного пути в задачах grunt. Теперь он должен работать (спасибо @stoneman1).
Некоторые браузеры используют CancelRequestAnimationFrame вместо CancelAnimationFrame, и теперь это исправлено (спасибо @stoneman1).
Теперь Фазер 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.
Обратите внимание, что Phaser использует собственную сборку Pixi и всегда делал это. В нашу собственную сборку были внесены следующие изменения, но не в Pixi в целом.
Исправлены и обновлены определения типов 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 в целом.
В результате это также исправляет то, как обрабатываются пустые группы, когда у них нет других дочерних элементов, кроме групп. Так что теперь расчёты верны.
_bounds
rect (0, 0, 1, 1) на (0, 0, 0, 0).setStageReference
и removeStageReference
были удалены из всех классов Pixi. У объектов больше нет свойств stage
или ссылок на объект Stage. Это связано с тем, что для любых вычислений не требуется ссылка на Stage, а Phaser может иметь только 1 Stage, поэтому добавление и удаление ссылок на него были излишними действиями.Uncaught TypeError: Cannot set property 'x' of undefined
в Body.js (спасибо @ErwanErwan #2607).headers
. Это объект, проверяемый запросами XHR, используемый для установки заголовка запроса определённых типов файлов. JSON и XML предварительно настроены, но вы можете добавить или изменить это свойство по мере необходимости (спасибо @stoneman1 #2585 #2485).typescript/readme.md
для получения инструкций по установке (спасибо @monagames #2576).collideGroupVsSelf
, collideSpriteVsSprite
и т. д., были обновлены для работы с телами круглой формы (спасибо @VitaZheltyakov).sprite.body.onWorldBounds = new Phaser.Signal()
и оно будет вызываться при столкновении, передавая пять аргументов: спрайт, на котором оно произошло, и 4 логических значения, сопоставленных с верхом, низом, левым и правым, указывающих, с какой стороны мира произошло столкновение.sprite.body.onCollide = new Phaser.Signal()
и оно будет вызываться при столкновении, передавая два аргумента: столкнувшиеся спрайты.Эта функция по умолчанию отключена. Чтобы использовать эту функцию, установите это свойство в 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).
Обратите внимание, что 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.
updateTransform
в начале getBounds
помогают избежать устаревания границ.Спасибо Корину Уилкинсу из Aardman Digital за большую часть исследовательской работы, которая привела к перечисленным выше изменениям Pixi.
Примечание: эта версия также была выпущена как 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).
Обратите внимание, что Phaser использует собственную сборку Pixi и всегда использовал её. В нашей собственной сборке были внесены следующие изменения, а не в Pixi в целом.
Добавлены 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).
false
(помечая Tween для уничтожения), если свойство Tween.target становится ложным. Это может произойти, если объект, за которым следил Tween, был уничтожен, обнулён или вообще удалён.true
.explode
будет кумулятивно добавлять частицы к текущему итогу. При количестве 10 первый вызов будет испускать 10 частиц, следующий — 20 и так далее. Вызовы для запуска теперь будут сбрасывать количество каждый раз. Это изменение поведения по сравнению с более ранними версиями, поэтому, если вы полагались на старый способ, учтите это в своём коде (спасибо @BdR76 #2187).canvas
объекта конфигурации равным элементу DOM, который вы хотите использовать, например: { canvas: document.getElementById('yourCanvas') }
(спасибо @Friksel #2311).asBlob
теперь используется тип «blob» для загрузчика XHR, и результирующий файл не приводится к типу Blob после загрузки. Это исправляет загрузку видео в виде больших двоичных объектов в Chrome для Android (спасибо @JuCarr #2433).Phaser.GAMES[_this.game.id].load
в качестве обработчика обратного вызова, что мешало бы ему работать, если у вас было настроено несколько загрузчиков в Phaser. Теперь он использует локальную ссылку на _this
(спасибо @SBCGames #2435).mouseoutglobal
не удалялся при уничтожении игры (спасибо @stoneman1 #2345 #2344 #2342).onLoop
для анимаций с одним дочерним элементом, например, созданных через Tween.to с -1 в качестве значения повтора (спасибо @ForgeableSum #2407).fixedToCamera = true
, который затем устанавливался для ввода и включался для перетаскивания из центра (input.enableDrag(true)
), выдавал ошибку при перетаскивании (спасибо @solusipse #2367).Обратите внимание, что Phaser использует собственную сборку Pixi и всегда использовал её. В нашей сборке были внесены следующие изменения, но не в Pixi в целом:
stage.updateTransform()
. Это может привести к ряду проблем, включая ввод мышью, если width, height или getLocalBounds вызываются внутри методов update или preUpdate. Теперь это исправлено в нашей сборке Pixi (спасибо @st0nerhat #2357).renderSession.smoothProperty
к контексту Canvas при изменении размера. Это должно помочь с нежелательным сглаживанием холста (спасибо @sergey7c4 #2395 #2317). Версия 2.4.6 — от 18 февраля 2016 года
2.4.6 является точечным релизом, который исправляет две серьёзные ошибки и должен быть использован вместо версии 2.4.5 во всех случаях. Журнал изменений версии 2.4.5 приведён ниже.
Версия 2.4.5 — «Sienda» — от 17 февраля 2016 года
Исправлены определения типов 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).
Обратите внимание, что Phaser использует собственную сборку Pixi и всегда использовал её. В нашей собственной сборке были внесены следующие изменения, но не в Pixi в целом.
_pixiId
холста перед его удалением из CanvasPool, что означает, что теперь он уничтожает гораздо больше элементов холста, чем раньше!renderable
и рендерил его в любом случае. Теперь он пропускает рендер, если renderable
ложно (спасибо @Green92 #2214).segments
, который позволяет контролировать, сколько сегментов создаётся при рисовании дуги. По умолчанию используется 40. Используйте большее число для большей точности, например, если вы обнаружите, что обратные дуги не соединяются полностью (#2064).x
, y
, key
и frame
. Они позволяют переопределить значения по умолчанию для Emitter и испустить частицу из заданных координат с новой текстурой.child.reset
, так и/или child.loadTexture
для данного дочернего объекта. Он используется внутри getFirstDead
и подобных методов, но сделан публичным, чтобы вы могли использовать его в качестве группового итерационного обратного вызова. Обратите внимание, что у дочернего элемента должны быть публичные методы reset
и loadTexture
, чтобы вызов был действительным.createIfNull
, x
, y
, key
и frame
. Если вызываемый метод не может найти соответствующий дочерний элемент (например, getFirstDead не может найти мёртвых детей), то необязательный createIfNull
позволяет мгновенно создать нового ребёнка в группе, используя для этого аргументы позиции и текстуры. Это позволяет всегда получать ребёнка от Group и устраняет необходимость в проверках на null и вставках Group в коде вашей игры. Те же аргументы можно использовать и по-другому: если createIfNull
ложно И вы предоставляете дополнительные аргументы И ребёнок найден, то он будет передан новому методу Group.resetChild
. Это позволяет получить ребёнка из Group, сбросить его и мгновенно подготовить к использованию в игре без дополнительного кода.PointerMode
было добавлено для лучшей простой дискриминации ввода в будущем между активными указателями, такими как сенсорные экраны, и пассивными указателями, такими как курсоры мыши (спасибо @pnstickne #2062).Исправлены определения типов 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).
Обратите внимание, что 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
), у которого есть дочерние элементы, которые вы хотите отрендерить, не вызывая при этом сброса пакета.
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)
Это небольшое обновление, которое обновляет среды выполнения Creature и исправляет пару небольших проблем с кешем.
Также оно изменяет скрипты сборки Grunt таким образом, что все сторонние библиотеки (такие как Creature, P2, gl-matrix и PIXI) теперь хранятся вне Phaser. Они определены и помещены первыми в файлы сборки. Больше не нужно прятать PIXI в пространстве имён Phaser или исправлять UMD для Phaser.
Обновления:
Исправления ошибок:
Версия 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 получает скорость точки в теле.
Все вызовы методов 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 — это новый класс, который позволяет динамически генерировать текстуры спрайтов из массива пиксельных данных без необходимости в каких-либо внешних файлах. Мы продолжим улучшать его в следующих выпусках, но пока что ознакомьтесь с новыми примерами, показывающими, как его использовать.
В этом тексте осталось перевести значения ключей. Они оставлены без перевода, так как являются техническими терминами. Преимущества добавления нескольких выпуклых фигур с автоматической настройкой центра масс #1801
key
и будет использовать BitmapData для рендеринга тайлсета вместо изображения из кэша (спасибо @unstoppablecarl за идею #1838).Из компонента 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 или ранее.
Все основные игровые объекты получили важное внутреннее реструктурирование. Мы перенесли все общие функции в новый набор классов компонентов. Они охватывают такие функции, как «Crop», «Physics Body», «InCamera» и другие. Вы можете найти исходный код каждого компонента в папке src/gameobjects/components
репозитория.
Все классы игровых объектов были реструктурированы для использования нового подхода на основе компонентов. Это положило конец структуре «классов-богов», которая была у нас раньше, и устранило буквально сотни строк дублирующегося кода. Это также позволило нам добавить функции игровым объектам; например, объекты растрового текста теперь являются полноправными гражданами с точки зрения физических возможностей.
Хотя это было большое внутреннее изменение с точки зрения API, не так много изменилось — вы всё ещё получаете доступ к тем же методам и свойствам таким же образом, как и раньше. Теперь Phaser намного более компактен под капотом.
Стоит отметить, что... * Поддерживаются повёрнутые и зеркальные тайлы в тайлмапах, экспортированных из редактора карт Tiled (спасибо @nkholski #1608).
rotation
для всех типов объектов.rotation
у объекта, и если оно присутствует, оно устанавливается как Sprite.angle (#1433).window.PhaserGlobal.hideBanner
в значение true
, и вывод будет пропущен. Честно говоря, я бы предпочёл, чтобы вы этого не делали, но теперь такая возможность есть.layer.setScale(2)
удвоит размер слоя. Камера и аркадное столкновение будут соответственно реагировать на слой в зависимости от масштаба (спасибо @mickez #1605).Исправлены определения 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, если дуга является последующей дугой и не установлен стиль линии.
BitmapData.drawGroup рисует непосредственных потомков Phaser.Group в BitmapData. Потомки рисуются только в том случае, если для их свойства exists установлено значение true. Потомки будут нарисованы в их мировых координатах пространства x и 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 года
Исправления ошибок
Версия 2.2.0 — «Bethal» — 3 декабря 2014 года
Новые функции
Слой тайловой карты получил значительное повышение производительности на канвасе со смещением края перерисовки (спасибо @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 был немного переработан, чтобы привести его в порядок. В частности:
Различные исправления и обновления ScaleManager (спасибо @pnstickne):
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
Исправления ошибок в Pixi 2.1.0
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
.
delay
заменён на frameRate
, так как это более точное определение того, что должно быть. Внутренне ничего не изменилось.opus
напрямую, а также аудио, закодированное в формате opus
, хранящееся в контейнерах ogg (#1232).sprite.shader
в Pixi v2.canPlayAudio
(спасибо Vithar).исправления и обновления определений 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).
Исправления ошибок
init
состояний, который также имел метод preload
, это приводило к сбою при запуске следующего состояния.Версия 2.1.1 Phaser является экстренным выпуском. Она устраняет потенциальное состояние гонки, которое могло произойти в состояниях, пытающихся изменить состояние из метода создания, но имевших пустой прелоадер или предварительно кэшированные активы.
Обновлён до 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
type
, мы пока оставили геттер/сеттер motionState
.null
в качестве параметра для родителя и автоматически добавляет пакет в game.world
. Также исправлены проблемы с jsdocs (@petarov #1000).fastTest
, который заставляет пропустить проверку пикселя, даже если она включена.fastTest
, который заставляет пропустить проверку пикселя, даже если она включена.stopAnimation
, который остановит текущую анимацию (если таковая имеется) после изменения текстуры (на основе #1029).Перевод:
Добавление нового объекта FrameData в существующую анимацию, даже если она сейчас запущена (на основе #1029)
smoothed
объекта Sprite и повторно применяет его после загрузки новой текстуры.После разговора с Мэтом из GoodBoyDigital об этой проблеме возникла идея просто вообще не использовать TextureCache, а позволить каждому спрайту иметь свой собственный кадр. Так что это направление, в котором мы пошли. Мы не стали откладывать это до версии 2.1, так как это фактически не меняет API Phaser, но меняет то, как всё работает внутри. Поэтому, если у вас есть игровой код, напрямую подключённый к TextureCache
, вам необходимо знать об этом изменении перед обновлением до 2.0.6.
silent
. Если установлено значение true
, дочерний элемент не будет отправлять событие onAddedToGroup
.silent
. Если установлено значение true
, дочерний элемент не будет отправлять событие onAddedToGroup
.silent
. Если установлено значение true
, дочерний элемент не будет отправлять событие onRemovedFromGroup
.silent
. Если установлено значение true
, дети не будут отправлять свои события onRemovedFromGroup
.silent
. Если установлено значение true
, дети не будут отправлять свои события onRemovedFromGroup
.silent
, чтобы избежать отправки ребёнком некорректных событий добавления и удаления из группы.context
. Если указано, удаляются только слушатели, соответствующие заданному контексту (спасибо @lucbloom за идею, #880).Sprite.animations.next()
.Sprite.animations.previous()
.game.add.plugin
из GameObjectFactory (спасибо @alvinsight, #978).preserveDrawingBuffer
для средства визуализации WebGL. По умолчанию он отключён из соображений производительности. Но если вам нужно иметь возможность делать снимки экрана ваших игр WebGL с помощью toDataUrl на игровом холсте, вам нужно установить его в true
(#987).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).
Обновление до 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 и радиусом.
Следующие проблемы были исправлены в версии 2.0.4 примерно через час после официального релиза:
Добавлена возможность извлечения одного фиксатора 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.
Случаи использования:
Исправления ошибок
p2.js v0.5.0
Новые функции.
Существует обширный Migration Guide, доступный для тех, кто переходит с Phaser 1.x на 2.x. В руководстве мы подробно описываем критические изменения API и подход к нашей новой физической системе.
Новые функции.
Новые примеры:
Обновления:
Исправления ошибок:
Версия 1.1.5 — «Saldaea» — 12 февраля 2014 г.
Исправления ошибок:
Версия 1.1.4 — «Kandor» — 5 февраля 2014 г. Значительные изменения в API
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.
Улучшения:
Исправления ошибок:
MSPointer обновлён для поддержки IE11 путём удаления префикса из слушателей событий.
Добавлен Device.cocoonJS для определения того, работает ли игра под Cocoon или в нативном браузере.
Loader теперь использует новую систему очередей внутри, что означает, что вы можете иметь активы с одним и тем же ключом, распределённые по разным типам.
Новое: теперь вы найдёте полный базовый шаблон проекта в папке 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 становились некорректными.
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, включая:
Параметр 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 для любого добавленного к нему потомка (избегает временных сбоев кадра при рендеринге новых объектов в первом кадре).
Что было обновлено:
Что было исправлено:
Исправлена проблема в 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 и других полезных вещей.
Практически у каждого класса теперь есть документация — если вы обнаружите опечатку или что-то пропущенное, пожалуйста, сообщите (спасибо 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
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Опубликовать ( 0 )