容器对象是一种特殊的组,其中的子项会被容器的边界剪切。
容器的目标是消除您创建自定义矩形遮罩图像来创建剪切边界的需求。
使用 Corona 的 display.newContainer() 工厂方法可以轻松创建容器。
以下示例使用水族馆背景图像创建一个 300x300 的容器。
容器会剪切水族馆图像,因此您只能看到原始完整 320x480 图像的中心。 随着高度缩小,容器最终也会剪切文本对象。
local container = display.newContainer( 300, 300 ) container:translate( 160, 240 ) -- center the container local bkgd = display.newImage( "aquariumbackgroundIPhone.jpg" ) container:insert( bkgd, true ) -- insert and center bkgd local myText = display.newText( "Hello, World!", 0, 0, native.systemFont, 40 ) myText:setFillColor( 1, 1, 0 ) container:insert( myText, true ) -- insert and center text -- dynamically resize the height of the container transition.to( container, { height=20, time=2000 } )
容器只是组的特殊版本。 主要区别在于子项不会渲染到容器边界之外。
如上例所示,可以使用 `width` 和 `height` 属性更改容器边界。
容器的锚点控制剪切边界的位置。
默认情况下,剪辑边界以容器的原点为中心。 您可以调整锚点来控制它。
与组不同,`anchorChildren` 属性默认为 `true`。 这意味着当锚点属性更改时,子项将与剪辑边界同步移动。
将 `anchorChildren` 属性默认设置为 `false` 时,您可以允许锚点独立于子项定位剪辑边界。
在下图中,我们将一个图像对象放置在一个组内。 为了说明容器的剪切区域,我们在容器下方绘制整个组并将 alpha 设置为 `0.3`。
容器的原点由下面三个图像中心的红点表示。 每个图像都显示相同的容器(具有相同的位置和原点),但 `anchorY` 属性不同。
容器对纹理内存的影响很小,因此使用容器而不是创建自己的遮罩纹理对您有利。
容器通过内部创建一个动态(矩形)遮罩来工作。 此遮罩隐式应用于组,并且与 object:setMask() 不同。
由于容器使用遮罩并且嵌套遮罩限制为 3,因此在将其他遮罩对象插入容器时必须小心。 使用遮罩的显示对象包括 display.newText、display.newEmbossedText、widget.newScrollView、widget.newTableView、其他容器以及任何其他遮罩图像、遮罩矢量对象或遮罩显示组。 例如,另一个容器(一个遮罩)内的容器(一个遮罩)内的文本对象(一个遮罩)将达到但不超过 3 个嵌套遮罩的限制。