Spec-Zone.ru › Phaser

Класс: Phaser.Physics.Ninja

Конструктор

new Ninja(game)

Физика Ninja. Система физики Ninja была создана в Flash компанией Metanet Software и портирована на JavaScript Ричардом Дейви.

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

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

  • Столкновение AABB с AABB
  • Столкновение AABB с Circle
  • Поддержка свойств «неподвижный» для AABB и Circle
  • Столкновение n-способов, так что AABB/Circle может проходить через плитку снизу и приземляться на неё.
  • QuadTree или пространственная сетка для более быстрого поиска Body vs. Tile Group.
  • Оптимизация внутренней векторной математики и сокращение количества создаваемых временных переменных.
  • Расширение Gravity и Bounce, чтобы разрешить отдельные значения для осей x/y.
  • Поддержка тел, связанных со спрайтами, у которых якорь не установлен в 0.5

Не стесняйтесь пытаться реализовать любое из вышеперечисленного и отправлять Pull Request со своим кодом! Не забудьте включить тестовые примеры, доказывающие их работоспособность.

Параметры
Имя Тип Описание
game Phaser.Game

ссылка на текущую инстанцию игры.

Исходный код: physics/ninja/World.js (Строка 29)

Классы

AABB
Body
Circle
Tile

Публичные свойства

bounds : Phaser.Rectangle

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

Исходный код: physics/ninja/World.js (Строка 49)

game : Phaser.Game

Локальная ссылка на игру.

Исходный код: physics/ninja/World.js (Строка 34)

gravity : number

Настройка гравитации мира.

Исходный код: physics/ninja/World.js (Строка 44)

maxLevels : number

Используется QuadTree для установки максимального уровня итераций.

Исходный код: physics/ninja/World.js (Строка 59)

maxObjects : number

Используется QuadTree для установки максимального количества объектов в каждом квадранте.

Исходный код: physics/ninja/World.js (Строка 54)

quadTree : Phaser.QuadTree

QuadTree мира.

Исходный код: physics/ninja/World.js (Строка 64)

time : Phaser.Time

Локальная ссылка на game.time.

Исходный код: physics/ninja/World.js (Строка 39)

Публичные методы

clearTilemapLayerBodies(map, layer)

Очищает все физические тела из заданного TilemapLayer, которые были созданы с помощью World.convertTilemap.

Parameters
Name Type Argument Description
map Phaser.Tilemap

Tilemap для получения данных карты.

layer number | string | Phaser.TilemapLayer <optional>

Слой для обработки. Если не указан, используется map.currentLayer.

Source code: physics/ninja/World.js (Line 224)

collide(object1, object2, collideCallback, processCallback, callbackContext) → {boolean}

Проверяет столкновение между двумя игровыми объектами. Вы можете выполнить столкновения: Sprite vs. Sprite, Sprite vs. Group, Group vs. Group, Sprite vs. Tilemap Layer или Group vs. Tilemap Layer.
Второй параметр может быть массивом объектов разных типов.
Объекты также автоматически разделяются. Если разделение не требуется, используйте ArcadePhysics.overlap.
Можно указать необязательный параметр processCallback. Если он задан, эта функция будет вызвана при обнаружении столкновения между двумя спрайтами. Она вызывается до любого разделения,
давая вам возможность выполнить дополнительные проверки. Если функция возвращает true, то выполняется столкновение и разделение. Если false — пропускается.
collideCallback — необязательная функция, которая вызывается только если объекты столкнулись. Если установлен processCallback, он должен вернуть true, чтобы вызвать collideCallback.

Parameters
Name Type Argument Default Description
object1 Phaser.Sprite | Phaser.Group | Phaser.Particles.Emitter | Phaser.TilemapLayer

Первый объект для проверки. Может быть экземпляром Phaser.Sprite, Phaser.Group, Phaser.Particles.Emitter или Phaser.TilemapLayer.

object2 Phaser.Sprite | Phaser.Group | Phaser.Particles.Emitter | Phaser.TilemapLayer | array

Второй объект или массив объектов для проверки. Может быть Phaser.Sprite, Phaser.Group, Phaser.Particles.Emitter или Phaser.TilemapLayer.

collideCallback function <optional>
null

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

processCallback function <optional>
null

Функция обратного вызова, которая позволяет выполнить дополнительные проверки объектов при перекрытии. Если она установлена, столкновение произойдёт только если processCallback вернёт true. Два объекта будут переданы в эту функцию в том же порядке, в котором вы их указали.

callbackContext object <optional>

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

Returns
boolean -

True, если произошло столкновение, иначе false.

Source code: physics/ninja/World.js (Line 330)

convertTilemap(map, layer, slopeMap) → {array}

Проходит по всем тайлам в заданном Tilemap и TilemapLayer и преобразует тайлы, установленные на столкновение, в физические тайлы.
Вызывайте эту функцию *после* указания всех тайлов, с которыми вы хотите столкнуться, с помощью функций вроде Tilemap.setCollisionBetween и т.д.
Каждый раз при вызове этого метода любые ранее созданные тела будут уничтожены и удалены из мира.
Понимайте, что это очень ресурсоёмкая операция и её не следует выполнять в основном цикле игры.

В Ninja тайлы имеют ID от 0 до 33, где 0 — 'пустой', 1 — полный тайл, 2 — наклон под 45 градусов и т.д. Список ID
можно найти в самом конце Tile.js, или в удобной визуальной справке в папке resources/Ninja Physics Debug Tiles в репозитории.
Параметр slopeMap — массив, который управляет тем, как индексы тайлов в данных вашей карты будут сопоставлены с ID тайлов Ninja.
Например, если у вас 6 тайлов в наборе: Представьте, что первые 4 должны быть преобразованы в полностью твёрдые тайлы, а остальные 2 — в тайлы со скосом под 45 градусов.
Ваш массив slopeMap будет выглядеть так: [ 1, 1, 1, 1, 2, 3 ].
Где каждый элемент массива — тайл в вашей карте, и получившийся тайл Ninja, который он должен создать.

Parameters
Name Type Description
map Phaser.Tilemap

Tilemap для получения данных карты.

layer number | string | Phaser.TilemapLayer

Слой для обработки. Если не указан, используется map.currentLayer.

slopeMap object

Карта соответствия индекса тайла ID тайла.

Returns
array -

Массив объектов Phaser.Physics.Ninja.Tile, которые были созданы.

Source code: physics/ninja/World.js (Line 246)

enable(object, type, id, radius, children)

Создаёт физическое тело Ninja для данного игрового объекта или массива объектов.
Игровой объект может иметь только 1 активное физическое тело одновременно, и оно не может быть изменено до тех пор, пока объект не будет уничтожен.

Parameters
Name Type Argument Default Description
object object | array | Phaser.Group

Игровой объект, для которого создаётся физическое тело. Также может быть массивом или группой объектов, физическое тело будет создано для каждого потомка, у которого есть свойство body.

type number <optional>
1

Тип формы Ninja для создания. 1 = AABB, 2 = Circle или 3 = Tile.

id number <optional>
1

Если это тело типа Tile, здесь можно установить ID тайла, например, Phaser.Physics.Ninja.Tile.SLOPE_45DEGpn, Phaser.Physics.Ninja.Tile.CONVEXpp и т.д.

radius number <optional>
0

Если это тело типа Circle, это значение определяет радиус.

children boolean <optional>
true

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

Source code: physics/ninja/World.js (Line 121)

enableAABB(object, children)

Это создаст физическое тело Ninja Physics AABB на заданном объекте игры. Его размеры будут соответствовать ширине и высоте объекта в момент его создания.
Объект игры может иметь только 1 активное физическое тело в любой момент времени, и его нельзя изменить до тех пор, пока объект не будет уничтожен.

Параметры
Имя Тип Аргумент Значение по умолчанию Описание
object объект | массив | Phaser.Group

Объект игры, на котором нужно создать физическое тело. Также может быть массивом или группой объектов; тело будет создано на каждом дочернем объекте, имеющем свойство body.

children логическое значение <необязательно>
true

Создавать ли тело на всех дочерних объектах этого объекта? Если true, то будет рекурсивно проверяться структура отображения до тех пор, пока это возможно.

Исходный код: physics/ninja/World.js (Строка 75)

enableBody(object)

Создаёт физическое тело Ninja Physics на заданном объекте игры.
Объект игры может иметь только 1 активное физическое тело в любой момент времени, и его нельзя изменить до тех пор, пока тело не будет сброшено.

Параметры
Имя Тип Описание
object объект

Объект игры, на котором нужно создать физическое тело. Тело будет создано только если у этого объекта есть свойство body со значением null.

Исходный код: physics/ninja/World.js (Строка 181)

enableCircle(object, radius, children)

Создаст физическое тело Ninja Physics типа круг на заданном объекте игры.
Объект игры может иметь только 1 активное физическое тело в любой момент времени, и его нельзя изменить до тех пор, пока объект не будет уничтожен.

Параметры
Имя Тип Аргумент Значение по умолчанию Описание
object объект | массив | Phaser.Group

Объект игры, на котором нужно создать физическое тело. Также может быть массивом или группой объектов; тело будет создано на каждом дочернем объекте, имеющем свойство body.

radius число

Радиус круга.

children логическое значение <необязательно>
true

Создавать ли тело на всех дочерних объектах этого объекта? Если true, то будет рекурсивно проверяться структура отображения до тех пор, пока это возможно.

Исходный код: physics/ninja/World.js (Строка 89)

enableTile(object, id, children)

Создаст физическое тело Ninja Physics типа плитка на заданном объекте игры. Существует 34 различных типа плиток, включая наклонные под 45 градусов,
выпуклые и вогнутые круги и многое другое. Параметр id управляет типом создаваемой плитки, но вы также можете изменить его во время выполнения.
Обратите внимание, что для всех плиток, основанных на углах, ширина и высота должны быть равными. Если заданный объект не имеет равной ширины и высоты, будет использоваться ширина.
Объект игры может иметь только 1 активное физическое тело в любой момент времени, и его нельзя изменить до тех пор, пока объект не будет уничтожен.

Параметры
Имя Тип Аргумент Значение по умолчанию Описание
object объект | массив | Phaser.Group

Объект игры, на котором нужно создать физическое тело. Также может быть массивом или группой объектов; тело будет создано на каждом дочернем объекте, имеющем свойство body.

id число <необязательно>
1

Тип плитки, например, Phaser.Physics.Ninja.Tile.SLOPE_45DEGpn, Phaser.Physics.Ninja.Tile.CONVEXpp и т.д.

children логическое значение <необязательно>
true

Создавать ли тело на всех дочерних объектах этого объекта? Если true, то будет рекурсивно проверяться структура отображения до тех пор, пока это возможно.

Исходный код: physics/ninja/World.js (Строка 104)

overlap(object1, object2, overlapCallback, processCallback, callbackContext) → {boolean}

Проверяет перекрытие между двумя объектами игры. Объектами могут быть Sprites, группы или излучатели.
Вы можете выполнить проверки перекрытия Sprite vs. Sprite, Sprite vs. Group и Group vs. Group.
В отличие от collide, объекты НЕ автоматически разделяются или на них не накладывается никакая физика; они просто проверяются на перекрытие.
Второй параметр может быть массивом объектов разных типов.

Параметры
Имя Тип Аргумент Значение по умолчанию Описание
object1 Phaser.Sprite | Phaser.Group | Phaser.Particles.Emitter

Первый объект для проверки. Может быть экземпляром Phaser.Sprite, Phaser.Group или Phaser.Particles.Emitter.

object2 Phaser.Sprite | Phaser.Group | Phaser.Particles.Emitter | массив

Второй объект или массив объектов для проверки. Может быть Phaser.Sprite, Phaser.Group или Phaser.Particles.Emitter.

overlapCallback функция <необязательно>
null

Необязательная функция обратного вызова, которая вызывается, если объекты перекрываются. Два объекта будут переданы в эту функцию в том же порядке, в котором вы их указали.

processCallback функция <необязательно>
null

Функция обратного вызова, которая позволяет выполнить дополнительные проверки двух объектов, если они перекрываются. Если это установлено, то overlapCallback будет вызван только в том случае, если processCallback вернёт true.

callbackContext объект <необязательно>

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

Возвращает
логическое значение -

True, если произошло перекрытие, в противном случае false.

Исходный код: physics/ninja/World.js (Строка 291)

separate(body1, body2) → {boolean}

Основная функция разделения для разделения двух физических тел.

Параметры
Имя Тип Описание
body1 Phaser.Physics.Ninja.Body

Объект Body для разделения.

body2 Phaser.Physics.Ninja.Body

Объект Body для разделения.

Возвращает
boolean -

Возвращает true, если тела столкнулись, иначе false.

Исходный код: physics/ninja/World.js (Строка 567)

setBounds(x, y, width, height)

Обновляет размер этого физического мира.

Параметры
Имя Тип Описание
x number

Точка верхнего левого угла мира.

y number

Точка верхнего левого угла мира.

width number

Новая ширина мира. Никогда не может быть меньше Game.width.

height number

Новая высота мира. Никогда не может быть меньше Game.height.

Исходный код: physics/ninja/World.js (Строка 198)

setBoundsToWorld()

Обновляет размер этого физического мира, чтобы он соответствовал размеру игрового мира.

Исходный код: physics/ninja/World.js (Строка 213)

© 2016 Richard Davey, Photon Storm Ltd.
Licensed under the MIT License.
http://phaser.io/docs/2.6.2/Phaser.Physics.Ninja.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API