Starling优化技巧二

前面介绍了Starling中三种(着色处理、画家算法、纹理图集)图片优化的技巧,下面介绍几种其他方法来优化你的Starling项、项目性能:

强大的Sprites

    Sprite容器中有一个Flatten方法,它可以帮你减少GPU对帧的处理。如果您的游戏中有一些内容是静态的,并且不会发生(或很少)改变,就可以调用这个Sprite容器的 Flatten方法。Starling将会预处理它的子元件,并上传它们的数据到GPU。在后续的帧中,它们就可以马上被呈现,而且不需要任何额外的GPU处理,也无需向GPU上传新的数据。Sprites非常强大,Sprites能够极大的减少cpu的负载极大的提高你Flash游戏的性能!

QuadBatch

    Sprites虽然强大也能非常快速的使用,但是它同样会带来一些其他的负担。主要有两方面:一 当您在Sprite上添加了一个对象,它们将派发”ADDED”和”ADDED_TO_STAGE”事件,如果有很多子元件需要添加,这可能也是不小的开销。二 对于任何的显示对象容器来说,一个特定的子元件只能添加一次。QuadBatch是解决这些限制的最好的办法,它是Starling的一个底层类。下面把它的工作原理写下来:

var quadBatch:QuadBatch = new QuadBatch(); 
var image:Image = new Image(texture); 
quadBatch.addImage(image);    
For (var i:int=0; i<100; ++i) 
{ 
    image.x += 10; 
    quadBatch.addImage(image); 
}

    通过使用这样的处理,您可以重复添加相同的图像!此外,它不会引发任何事件调度。然而事务都有两面性,这样做也有一些缺点:您添加的所有的对象必须具备相同的状态(比如:使用同一个纹理图集)。您添加到 QuadBatch 的第一个图像决定了它的状态。您不能再改变状态,除非完全重置这个 QuadBatch 。您只能添加 Image Quad, 或  QuadBatch 类的实例。由于这些原因,它仅适用于一些特定的场景(比如位图字体类,就直接使用了四边形批次)。在这些情况下,它肯定是最快的选择。您将找不到一个更有效的方式来呈现 Starling 对象。

位图字体

    使用位图字体不会占用任何额外的纹理内存,除了它们所需的原始纹理;同时使用位图字体的文本框,创建和更新都是非常快速的。文本框支持两种不同的字体:True Type字体和位图字体。TrueType字体最容易使用:只需嵌入所需的“ttF”文件,您就大功告成了。为静态文本框包含数百个字符,这是一个很好的和快速的选 择。Starling会将文本渲染成位图,显示文本的时候就像一个纹理一样。对于重复改变的短文本(比如分行显示),这样处理还是挺慢的。如果您的游戏需要显示的文本中包含许多非ASCII字符(如中文或阿拉伯文),TrueType字体可能是您唯一的选择。位图文本只是受限于它们的纹理大小。

容器点击处理

    当年你移动光标时,Starling会自动寻找哪一个容器对象可以被点击。这项操作是一项昂贵的操作,因为它需要遍历所有的显示对象,并调用hitTest方法。因此,如果您不需要一个对象被触碰,将它设置为“untouchable”是非常有帮助的。最好是在容器上进行禁用:这样,Starling就不会遍历它的子元件。

你可以通过一下方法处理容器点击:

// 方案一: 
For (var i:int=0; i<container.numChildren; ++i) 
    containter.getChildAt(i).touchable = False; 
   
// 方案二: 
container.touchable = False;
// 很明显,第二种方案较第一种要好。

创建对象处理

    大量的临时对象不仅占用内存并且需要由垃圾收集器进行清理,这会使你的游戏在应用过程中经常出现你不想要看到的情况“卡壳”。下面给大家推荐一个好的处理临时对象的方法:

var point:Point = new Point(); 
For (var i:int=0; i<10; ++i) 
{ 
    point.setTo(i, 2*i); 
    doSomethingWith(point); 
}

  大家可以去试用一下。

  上面这些方法旨在提高你Flash项目的性能,让你的项目不管是Flash网站还是Flash游戏都能给用户带来一个非常高的用户感觉——这是我们做项目的重要目标。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值