跳转至

【说明】

这是根据Phaser3 API文档中各类之页面右侧的目录整理的,略作说明,或增加代码示例。可做便览之用。

Phaser 3 API Documentation - Class: Container#

Container的属性、方法与Sprite重合的部分,不再注释。

一个游戏对象加入容器后,即从显示列表中删除,而加入容器内部的显示列表,由容器负责它的渲染;位置也是相对于容器位置而言的。

容器可以嵌套。

容器可以添加遮罩或作为遮罩,但是子项不能添加遮罩,即遮罩不能叠加。

容器可以添加输入,但是因为它没有纹理,所以你必须提供一个shape作为点击区域。容器的子项也能添加输入,并独立于容器。

容器可以赋予物理体。不过,如果子项也有物理属性,并且容器或任何前辈对象不是位于0x0位置的话,那么你可能碰到意外的结果,比如物理体偏置。不把带物理属性的子项考虑进来,是因为需要过多的运算。

要注意容器带来的额外问题。嵌套越深,消耗越会升级,尤其是在输入事件上。尽可能避免使用。

参考Group

Phaser.GameObjects. Container#

new Container(scene [, x] [, y] [, children]) Extends

Members#

active :boolean#

alpha :number#

alphaBottomLeft :number#

alphaBottomRight :number#

alphaTopLeft :number#

alphaTopRight :number#

angle :integer#

blendMode :Phaser.BlendModes|string#

body :object|Phaser.Physics.Arcade.Body|Phaser.Physics.Impact.Body#

cameraFilter :number#

data :Phaser.Data.DataManager#

depth :number#

displayHeight :number#

参考getBounds

displayOriginX :number#

displayOriginY :number#

displayWidth :number#

参考getBounds

exclusive :boolean#

first :Phaser.GameObjects.GameObject#

height :number#

参考getBounds

ignoreDestroy :boolean#

input :Phaser.Input.InteractiveObject#

last :Phaser.GameObjects.GameObject#

length :integer#

list :Array.#

localTransform :Phaser.GameObjects.Components.TransformMatrix#

mask :Phaser.Display.Masks.BitmapMask|Phaser.Display.Masks.GeometryMask#

maxSize :integer#

name :string#

next :Phaser.GameObjects.GameObject#

originX :number#

originY :number#

parentContainer :Phaser.GameObjects.Container#

position :integer#

previous :Phaser.GameObjects.GameObject#

renderFlags :integer#

rotation :number#

scaleX :number#

scaleY :number#

scene :Phaser.Scene#

scrollFactorX :number#

scrollFactorY :number#

tabIndex :integer#

type :string#

visible :boolean#

w :number#

width :number#

参考getBounds

x :number#

y :number#

z :number#

Methods#

add(child)#

addAt(child [, index])#

addListener(event, fn [, context])#

bringToTop(child)#

clearAlpha()#

clearMask( [destroyMask])#

count(property, value [, startIndex] [, endIndex])#

createBitmapMask( [renderable])#

createGeometryMask( [graphics])#

destroy( [fromScene])#

disableInteractive()#

each(callback [, context] [, args])#

emit(event [, args])#

eventNames()#

exists(child)#

getAll( [property] [, value] [, startIndex] [, endIndex])#

getAt(index)#

getBounds( [output])#

取得容器边界。 目前(2018-11-22),可能出于性能的考虑,Container的width、height、displayWidth、displayHeight没有暴露,需要通过getBounds方法自行处理。当子项比较多时,getBounds很耗费算力,所以不宜频繁计算,不宜在tween中变动容器的长宽。 请参考。(TODO: scale也有这样的禁忌吗?

1
2
3
const bounds: Phaser.Geom.Rectangle = this.getBounds();
this.width = bounds.width;
this.height = bounds.height;

getBoundsTransformMatrix()#

getByName(name)#

getData(key)#

getFirst( [property] [, value] [, startIndex] [, endIndex])#

getIndex(child)#

getIndexList()#

getLocalTransformMatrix( [tempMatrix])#

getRandom( [startIndex] [, length])#

getWorldTransformMatrix( [tempMatrix] [, parentMatrix])#

iterate(callback [, context] [, args])#

listenerCount(event)#

listeners(event)#

moveDown(child)#

moveTo(child, index)#

moveUp(child)#

off(event, fn, context, once)#

on(event, fn [, context])#

once(event, fn [, context])#

pointToContainer(source [, output])#

preDestroy()#

remove(child [, destroyChild])#

removeAll( [destroyChild])#

removeAllListeners( [event])#

removeAt(index [, destroyChild])#

removeBetween( [startIndex] [, endIndex] [, destroyChild])#

removeInteractive()#

removeListener(event, fn, context, once)#

replace(oldChild, newChild [, destroyChild])#

reverse()#

sendToBack(child)#

setActive(value)#

setAll(property, value [, startIndex] [, endIndex])#

setAlpha( [topLeft] [, topRight] [, bottomLeft] [, bottomRight])#

setAngle( [degrees])#

setBlendMode(value)#

setData(key, data)#

setDataEnabled()#

setDepth(value)#

setDisplaySize(width, height)#

setExclusive( [value])#

设置排他状态。 value类型为boolean,,默认为true。
如果设为false,那么容器对子项的管理不是排他的,因此可以快速复制游戏对象;但是这些子项的输入事件、物理体将不再有效。

@GameObjects/Container/Non Exclusive Containers

1
2
3
4
5
6
7
8
var image = this.add.image(0, 0, 'lemming');
var text = this.add.text(60, 0, 'Oh No!', { font: '16px Courier', fill: '#00ff00' });
var container1 = this.add.container(200, 300).setExclusive(true);
container1.add([ image, text ]);
var container2 = this.add.container(400, 300).setExclusive(false);
container2.add([ image, text ]);
var container3 = this.add.container(600, 300).setExclusive(false);
container3.add([ image, text ]);

setInteractive( [shape] [, callback] [, dropZone])#

setMask(mask)#

setName(value)#

setPosition( [x] [, y] [, z] [, w])#

setRandomPosition( [x] [, y] [, width] [, height])#

setRotation( [radians])#

setScale(x [, y])#

setScrollFactor(x [, y])#

setSize(width, height)#

setVisible(value)#

setW( [value])#

setX( [value])#

setY( [value])#

setZ( [value])#

shuffle()#

shutdown()#

sort(property)#

swap(child1, child2)#

toJSON()#

update( [args])#

willRender(camera)#

published from :Phaser 3 API Documentation - Class: Container