Satrling基础知识

驱动关系:
GPU —> OpenGL/ES2-DirectX —> stage3D —> starling

flash 显示层次结构:
stage video —> stage3D —> Display List。
注:原生flash显示对象会覆盖stage3D,因为dispalylist层次结构在前面

Mip映射
将一个纹理保存多个缩小版本的方式就叫做Mip映射
若要使用Mip映射,那么你的纹理尺寸必须保证为2的倍数,但形状不一定必须是矩形

Texture atlases 纹理贴图集
SpriteSheet 精灵表
SpriteSheet = texture atlases

Flat Sprites
Starling提供了一种优化方案,具体做法可以理解为将全部子对象的顶点着色器及索引缓冲区集成为一个大的并由它来接管全局的渲染工作
(包括容器及其子对象),且只需要调用一次绘制方法即可完成渲染的工作,就跟完成一个简单的纹理的渲染一样
(如果所有子对象都共享同一个纹理的话,那自然是这样)

flat sprites特性相关的API:
flatten: 如果你想尽可能地提高存在大量嵌套的Sprite对象的话,调用此方法可以让你达到满意效果。一旦调用了此方法,Starling将会把显示树
(即以一个Sprite对象为顶点,所有子对象为子节点)中的渲染工作全部统一管理,在一次绘制操作中完成全部渲染工作。
如果显示树中某个节点发生了外观改变,那么你需要再次调用此方法才能看见改变。

unflatten: 禁用flat行为.
isFlatenned: 判断是否使用了flat 。

注意:如果子对象所用纹理不一致,那么Starling会对不同的纹理进行独立地绘制工作,这样的话,flatten特性所能带来的性能提升便也不那么明显了

Starling 对象的API:
enableErrorChecking : 允许你启用或禁用错误检测功能。
isStarted :一个标记,用于指示start方法是否被调用过
juggler:juggler 是一个用于存储一系列实现了IAnimatable 接口的对象的对象,你可以通过调用juggler对象的advanceTime方法来让它调度其保存的那些实现IAnimatable
接口的对象每一帧的行为。当一个动画播放完毕后,juggler 会将其剔除。
start : 开始渲染并处理事件
stop : 停止渲染和事件处理,你可以在游戏被置于后台(如将Flash最小化时)时使用此方法来停止渲染,这样可以避免硬件开销上的浪费。

dispose : 当你想要销毁Starling中全部的渲染内容并释放其在GPU中所占用空间时你可以调用此方法。这个API将会在内部同时销毁着色器程序及事件侦听器(GPU用于绘图的东东)
Wmodel模式:使用GPU加速,需要设置一个参数,否则会报一个Context3D not availible或者wrong wmodel value;
    params.wmode = "direct";    // 可以通过这个来判断是否起用了硬件渲染 ,从而定制不同的渲染策略。
    var isHW:Boolean = Starling.context.driverInfo.toLowerCase().indexOf("software") == -1;    // software硬件渲染也就是CPU渲染模式。

Starling中DisplayObject类提供的一系列共有方法:

* removeFromParent : 从父对象中移除,如果它有父对象的话
* getTransformationMatrixToSpace : 创建一个用于表现本地坐标系和另一个坐标系转换关系的矩阵
* getBounds : 得到一个以某个坐标系为参考系的能包含该显示对象的最小矩形。
* hitTestPoint : 返回当前坐标系中某个点位置下层次最高(挡在最前面)的显示对象
* globalToLocal : 将一个点由舞台坐标转换为当前坐标系坐标
* localToGlobal : 将一个点由当前坐标系坐标转换为舞台坐标

Starling中DispObject中提供的属性:

* transformationMatrix : 当前显示对象位置相与其父容器的转换矩阵
* bounds : 当前显示对象在其父容器中的矩形(Rectangle)对象
* width、height、root、x、y、scaleX、scaleY、alpha、visible、parent、stage、root
* rotation:当前显示对象绕其注册点的旋转弧度(非角度)
* pivotX、pivotY : 当前显示对象的注册点,默认为(0,0) 如缩放、旋转时的需要
* touchable : 指定当前显示对象是否能够接受Touch事件(相当于原生DisplayObject的mouseEnable,因为在Starling中所有鼠标事件都被定义为Touch事件)

Sprite对象继承自DisplayObjectContainer类,DisplayObjectContainer类中提供的API:

* addChild : 不解释,和原生Flash中的一样,下同
* addChildAt : 略
* dispose : 完全销毁一个对象,释放其在GPU中所占内存,移除其全部事件侦听。
* removeFromParent : 略
* removeChild : 略
* removeChildAt : 略
* removeChildren : 移除一个容器中所有的子对象
* getChildAt : 略
* getChildByName : 根据名称搜索一个子对象
* getChildIndex : 略
* setChildIndex : 略
* swapChildren : 略
* swapChildrenAt : 略
* contains : 略

Starling对象都继承自EventDispatcher类:
addEventListener : 为指定事件添加事件侦听器.
hasEventListener : 为指定事件监测是否具备事件侦听器
removeEventListener : 移除某个事件侦听器
removeEventListeners : 移除一个对象中对某一事件或全部事件添加的侦听器。
注:Starling中的事件机制保留了事件冒泡阶段,却没有事件捕捉阶段。

Starling中用Touch实现(替代)mouseclick相关事件:
TouchPhase类中的常量(通过这个类型判别触发的是什么类型的事件):
began : 鼠标/手指开始交互(类似于mouseDown)
ended : 鼠标/手指停止交互(类似于mouseClick)
hover : 鼠标/手指悬于物体上(类似于mouseOver)
moved : 鼠标/手指在物体上移动(类似于mouseDown + mouseMove)
stationary : 鼠标/手指停止与物体的交互但仍停留在其上

TouchEvent事件对象中的API:
ctrlKey : 触发Touch事件是是否按住Ctrl键
getTouch: 得到此事件的Touch对象
getTouches : 得到一组Touch对象(用于多点交互)
shiftKey: 触发Touch事件是是否按住Shift键
timestamp : 事件触发时间
touches : 得到同一时间发生的全部Touch对象

Touch对象中的API:
clone : 复制一个副本
getLocation: 得到Touch事件触发的对应于当前坐标系的位置
getPreviousLocation: 得到之前触发的Touch事件对应于当前坐标系的位置
globalX、Y: 得到Touch事件触发的舞台位置
id: 一个Touch对象所拥有的独一无二的标示符
phase : 指示当前事件触发的类型(阶段)
previousGlobalX、Y : 得到之前触发的Touch事件舞台位置
tapCount : 手指轻拍显示对象的次数(用以识别手指双拍)
target : 触发Touch事件的对象
timestamp : 事件触发时间(此时间是从应用程序启动开始计时的)

设置属性:simulateMultiTouch=true; //表示是否是多点触控,按住ctrl模拟

Texture:纹理,用来填充显示对象。
Texture 对象API:
base : 该Texture对象所基于的Stage3D texture对象
dispose : 销毁该Texture对象的潜在纹理数据
empty : 静态方法。创建一个指定大小和颜色的空Texture对象
frame : 一个Rectangle矩形对象,用于指示一个Texture对象的范围
fromBitmap : 静态方法。从一个Bitmap对象创建一个外观与其一致的Texture纹理对象。
fromBitmapData : 静态方法。从一个BitmapData对象创建一个外观与其一致的Texture纹理对象。
fromAtfData : 静态方法。允许运用ATF (Adobe Texture Format)格式创建一个压缩过的材质。经过压缩的材质能让你节省大量空间,尤其是在像移动设备这样对存储空间异常苛刻的环境中尤为有用。
fromTexture : 静态方法。从一个Texture对象创建一个外观与其一致的Texture纹理对象。
height 、width: 我想这两个属性就不用多说了
mipmapping : 此属性用以指示该材质是否包含了mip映射
premultipliedAlpha : 此属性用以指示该texture对象的透明度是否被预乘到了RGB值中(premultiplied into the RGB values).
repeat : 用以指定当前材质是否启用重复平铺模式,就像铺壁纸那样。

Juggler:
Juggler类允许我们控制所有实现了IAnimatable接口的对象的动画播放。MovieClip类实现了该接口,你也可以自定义一个动画类在Starling中播放,你所要做的,仅仅是让你的自定义类实现IAnimatable接口,然后重载advanceTime方法即可
Juggler API:
add : 添加一个动画对象到juggler
advanceTime : 如果你需要手动调控Juggler的主循环逻辑的话,调用之.
delayCall : 延迟调用某个对象的某个方法
elapsedTime : 指示一个juggler对象的完整生命周期时间
isComplete : 指示一个Juggler的状态,默认情况下它总是返回flase.
purge : 一次性移除全部子对象
remove : 从juggler中移除一个对象
removeTweens : 移除全部类型为Tween的且存在指定目标的对象

Tweens:补间

Tween对象中可用的API:
animate : 缓动一个对象的某个属性至指定目标值. 你可以在一个Tween对象中多次调用此方法
currentTime : 补间动画当前播放到的时间
delay : 补间动画开始前需要等待的延迟时间
fadeTo : 缓动一个对象的透明度至指定目标值. 你可以在一个Tween对象中多次调用此方法
isComplete : 此标记用以判断一个补间动画是否播放完毕
moveTo : 同时缓动一个对象的x、y属性至指定目标值
onComplete : 补间动画播放完毕回调函数
onCompleteArgs : 补间动画播放完毕回调函数参数
onStart : 补间动画开始播放回调函数
onStartArgs : 补间动画开始播放回调函数参数
onUpdate : 补间动画每帧更新时都会调用此方法
onUpdateArgs : 需要传入补间动画每帧更新时都会调用的方法的参数
roundToInt :若该标记为true,则所有带小数的属性值都会去掉小数变为整数
scaleTo : 同时将scaleX及scaleY属性值缓动至指定目标值.
target : 缓动目标对象
totalTime : 补间动画所要消耗的总时间(单位为秒).
transition : 指定补间动画所用缓动方程

注意项
1.避免重复调用width和height
获取宽度和高度属性是一个昂贵的性能开销,特别是对于Sprite容器
在某些情况下,使用一个恒定的值来代替它们更有意义
2.使用BlendMode.NONE
如果您有完全不透明的矩形纹理,可以帮助GPU禁用那些纹理混合。这对于大背景图像特别有用。
backgroundImage.blendMode = BlendMode.NONE;
3.让容器不可点击
当您在屏幕上移动您的光标/手指的时候,Starling就会寻找哪一个对象被点击了。这可能是一项昂贵的操作,
因为它需要遍历所有的显示对象,并调用hitTest方法。
如果您不需要一个对象被触碰,将它设置为“untouchable”是非常有帮助的。最好是在容器上进行禁用:这样,
Starling就不会遍历它的子元件。
for (var i:int=0; i<XX;i)
containter.getChildAt(i).touchable = false; // 好方案
container.touchable = false; // 更好的方案
4.使用新的事件模型
object.dispatchEvent(new Event(“type”, bubbles)); // 传统方式
object.dispatchEventWith(“type”, bubbles); // 新方式
第二种方法也会派发一个事件对象,但是在屏幕背后,它会用对象池来缓存事件对象。这就意味着,如果您使用第二种方式,
将会节省一些垃圾回收器工作的时间。由于它书写简练并且速度更快—因此,它是现在派发事件的首选方式。
如果您已经创建了Event类的子类,就不能用这个方法来派发事件
5.避免创建对象
for (var i:int=0; i<10; 
i)
{
var point:Point = new Point(i, 2*i);
doSomethingWith(point);
} // 坏的
var point:Point = new Point();
for (var i:int=0; i<10; ++i)
{
point.setTo(i, 2*i);
doSomethingWith(point);
} // 好的

6.访问数组或向量数组元素
var element:Object = array[10*x]; // 坏的
var element:Object = array[int(10*x)]; // 好的

时间: 2024-10-22 01:52:02

Satrling基础知识的相关文章

MySQL数据库基础知识

day02 MySQL数据库基础知识 一.基础知识概述: 基础决定你这门课程的学习成败!只有学习好这些基础知识以后,你才能真正的运用自如.才能够对数据库有更深入的了解,道路才会越走越远. 二.基础知识: 1.数据库(database):数据库就好比是一个物理的文档柜,一个容器,把我们整理好的数据表等等归纳起来. 创建数据库命令:        create database 数据库名; 2.查看数据库         show databases; 3.打开指定的数据库         use 

linux入门基础知识及简单命令介绍

linux入门基础知识介绍 1.计算机硬件组成介绍 计算机主要由cpu(运算器.控制器),内存,I/O,外部存储等构成. cpu主要是用来对二进制数据进行运算操作,它从内存中取出数据,然后进行相应的运算操作.不能从硬盘中直接取数据. 内存从外部存储中取出数据供cpu运存.内存的最小单位是字节(byte) 备注:由于32的cpu逻辑寻址能力最大为32内存单元.因此32位cpu可以访问的最大内存空间为:4GB,算法如下: 2^32=2^10*2^10*2^10*2^2 =1024*1024*1024

BroadcastReceive基础知识总结

BroadcastReceive基础知识总结 1.BroadcastReceive简介 BroadcastReceive也就是"广播接收者"的意思,顾名思义,就是用来接收来自系统和应用中的广播 在Android系统中,广播体现在方方面面,例如当开机完成后系统会产生一条广播,接收到这条广播就能实现开机启动服务的功能,当网络状态改变时,系统会产生一条广播,接收到这条广播,就能及时的做出提示和保存数据等操作,当电池的电量改变的时候,系统会产生一条广播,接收到这条广播就能在电量低的时候告知用户

基础知识--:before伪元素和:after伪元素

http://book.51cto.com/art/201108/285688.htm 3.7  替换指定位置 大家都知道before和after是前.后的意思.但是奇怪的是,CSS中的:before伪元素和:after伪元素是为源文档中不存在的内容设置样式的. 没有内容怎么设置样式呢?别急!它们有一个content属性,一起使用就可以为某个选择器前.后的内容设置样式了. 下面就来了解一下:before伪元素和:after伪元素的用法. 视频教学:光盘/视频/3/3.7  替换指定位置.avi 

20_Shell语言———VIM编辑器基础知识三之窗口属性定制、配置文件及查找替换功能

Vim编辑器可以让用户按照需求来定制一些使用属性. 一.窗口属性定义 1)显示行号 行号不是内容,只是用来帮助用户确认文本所在的行.在vim编辑器中,如果要显示行号,可以在末行模式下输入: set number 如果想关闭,则可以在功能名称前面加上no,即: set nonumber 命令可以被简写,如set number 可以简写为 set nu:set nonumber 可以简写为 set nonu. 注意,上述设定仅对当前vim的进程有效,一旦当前进程关闭,这些设定就会失效,如果要使设定永

web基础知识(一)关于ajax传值最基础东西

HTTP方法之 GET对比POST GET:从指定的资源请求数据, POST:向指定的资源提交要被处理的数据 GET方法: 请注意,查询字符串(名称/值对)是在 GET 请求的 URL 中发送的: /test/demo_form.asp?name1=value1&name2=value2 有关 GET 请求的其他一些注释: GET 请求可被缓存 GET 请求保留在浏览器历史记录中 GET 请求可被收藏为书签 GET 请求不应在处理敏感数据时使用 GET 请求有长度限制 GET 请求只应当用于取回

线程基础知识

什么是线程: 在一个程序里的一个执行路线就叫做线程(thread).更准确的定义是:线程是"一个进程内部的控制序列" 一切进程至少都有一个执行线程 进程与线程 进程是资源竞争的基本单位 线程是程序执行的最小单位 线程共享进程数据,但也拥有自己的一部分数据 线程ID 一组寄存器 栈 errno 信号状态 优先级 fork和创建新线程的区别 当一个进程执行一个fork调用的时候,会创建出进程的一个新拷贝,新进程将拥有它自己的变量和它自己的PID.这个新进程的运行时间是独立的,它在执行时几乎

Keepalived基础知识

大纲: 一.什么是Keepalived? 二.VRRP协议简介. 三.Keepalived原理. 四.Keepalived配置文件详解. 五.Keepalived配置示例. 一.什么是Keepalived? 什么是Keepalived呢,keepalived观其名可知,保持存活,在网络里面就是保持在线了,也就是所谓的高可用或热备,用来防止单点故障(单点故障是指一旦某一点出现故障就会导致整个系统架构的不可用)的发生,那说到keepalived时不得不说的一个协议就是VRRP协议,可以说这个协议就是

【Python数据挖掘课程】六.Numpy、Pandas和Matplotlib包基础知识

前面几篇文章采用的案例的方法进行介绍的,这篇文章主要介绍Python常用的扩展包,同时结合数据挖掘相关知识介绍该包具体的用法,主要介绍Numpy.Pandas和Matplotlib三个包.目录:        一.Python常用扩展包        二.Numpy科学计算包        三.Pandas数据分析包        四.Matplotlib绘图包 前文推荐:       [Python数据挖掘课程]一.安装Python及爬虫入门介绍       [Python数据挖掘课程]二.K