显示列表
可以说,Starling 遵循了和原生 Flash 显示列表一样的规则。Starling 中的显示对象将会无法
访问其 stage属性,直到其被添加到显示列表中。在以往的编程中,我们为了更加安全地访
问 stage 对象,我们需要用到一些重要的事件(如 Event.ADDED_TO_STAGE),幸运的是,在
Starling中我们也可以使用这一些事件(但这些事件所在的包与以往不同):
* Event.ADDED : 当显示对象被添加到一个容器中抛出
* Event.ADDED_TO_STAGE : 当显示对象被添加到一个已存在于舞台上的容器中时,也就是
其变得可见时抛出
* Event.REMOVED : 当显示对象被从一个容器中移除时抛出
* Event.REMOVED_FROM_STAGE : 当显示对象被从一个已存在于舞台上的容器中移除时,
也就是其变得不可见时抛出
在之后的实验中我们将会用到这一些事件来帮助我们在合适的时候初始化一些东西或让一
些东西失效,这样可以让代码执行效率更佳。
下面是 Starling中 DisplayObject 类提供的一系列共有方法:
* removeFromParent : 从父对象中移除,如果它有父对象的话
* getTransformationMatrixToSpace : 创建一个用于表现本地坐标系和另一个坐标系转换关
系的矩阵
* getBounds : 得到一个以某个坐标系为参考系的能包含该显示对象的最小矩形。
* hitTestPoint : 返回当前坐标系中某个点位置下层次最高(挡在最前面)的显示对象
* globalToLocal : 将一个点由舞台坐标转换为当前坐标系坐标
* localToGlobal : 将一个点由当前坐标系坐标转换为舞台坐标
下面列出 DispObject 中提供的属性, 作为一个 Flash 开发人员,你会很开心地看见在 Starling
中的 DisplayObject 保留了大多数和原生 Flash 中的 DisplayObject一样名字的属性(功能也一
样),且还提供了一些额外的功能,如 pivotX 和pivotY属性,允许开发者在运行时动态改变
DisplayObject的注册点 :
* transformationMatrix : 当前显示对象位置相与其父容器的转换矩阵
* bounds : 当前显示对象在其父容器中的矩形(Rectangle)对象
* width、height、root、x、y、scaleX、scaleY、alpha、visible、parent、stage、root:不
解释了,和原生 DisplayObject 一样的功能
* rotation:当前显示对象绕其注册点的旋转弧度(非角度)
* pivotX、pivotY : 当前显示对象的注册点,默认为(0,0)
* touchable : 指定当前显示对象是否能够接受 Touch 事件(相当于原生 DisplayObject 的
mouseEnable,因为在 Starling中所有鼠标事件都被定义为 Touch 事件)
跟原生 Flash API 一样,在 Starling中,Sprite类也是你能使用的最轻量级的容器。当然,其
作为 DisplayObject 的子类,自然就继承了之前提到过的那些 DisplayObject中拥有的 API,这
就提供了 Sprite对象之间可以互相嵌套的能力
作为一个容器,Sprite 对象继承自 DisplayObjectContainer 类,下面是 DisplayObjectContainer
类中提供的 API:
* addChild : 不解释,和原生Flash 中的一样,下同
* addChildAt : 略
* dispose : 完全销毁一个对象,释放其在 GPU 中所占内存,移除其全部事件侦听。
* removeFromParent : 略
* removeChild : 略
* removeChildAt : 略
* removeChildren : 移除一个容器中所有的子对象
* getChildAt : 略
* getChildByName : 根据名称搜索一个子对象
* getChildIndex : 略
* setChildIndex : 略
* swapChildren : 略
* swapChildrenAt : 略
* contains : 略
一旦你可以访问一个显示对象的 stage 属性,你就可以通过此属性来对舞台进行一系列的设
置,舞台对象继承于 DisplayObjectContainer ,因此你可以对它调用大多数
DisplayObjectContainer 的 API,不仅如此,你还可以通过 stage对象的 color属性来直接改变
Starling 舞台的颜色。默认情况下,Starling 舞台的颜色会和原生 Flash 舞台颜色一致,这意
味着你可以直接通过[SWF]元标签设置原生舞台颜色来间接地设置 Starling舞台颜色:
[SWF(width="1280", height="752", frameRate="60", backgroundColor="#")]
若你想重载此行为(即我在[SWF]元标签中设置了原生 Flash 舞台颜色为某一颜色,现在我想
把 Starling 舞台颜色改成另一种颜色),你只需要简单地在任何一个被添加到舞台上的
DisplayObject中访问 stage属性并设置其 color 属性即可:
package { import starling.display.Quad; import starling.display.Sprite; import starling.events.Event; public class Game extends Sprite { private var q:Quad; public function Game() { addEventListener(Event.ADDED_TO_STAGE, onAdded); } private function onAdded ( e:Event ):void { // set the background color to blue stage.color = 0x002143; q = new Quad(200, 200); q.setVertexColor(0, 0x000000); q.setVertexColor(1, 0xAA0000); q.setVertexColor(2, 0x00FF00); q.setVertexColor(3, 0x0000FF); addChild ( q ); } } }
讯享网
我们之前只是简单地用了一对三角形来形成了一个方块,此方块并没有使用任何的纹理,而
只是为它各个顶点设置了不同的颜色,这样会让 GPU 自动为其内部填充上渐变色。当然,
如果你想要创建一个实色的方块,只需要设置 Quad 对象的color 属性即可:
讯享网package { import starling.display.Quad; import starling.display.Sprite; import starling.events.Event; public class Game extends Sprite { private var q:Quad; public function Game() { addEventListener(Event.ADDED_TO_STAGE, onAdded); } private function onAdded ( e:Event ):void { q = new Quad(200, 200); q.color = 0x00FF00; q.x = stage.stageWidth - q.width >> 1; q.y = stage.stageHeight - q.height >> 1; addChild ( q ); } } }
之后你会得到如下结果:

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/116979.html