【问题标题】:Flash/Flex render cullingFlash/Flex 渲染剔除
【发布时间】:2010-10-27 10:31:28
【问题描述】:

是否有人知道(最好有官方链接)关于如何/如果 Flash/Flex 剔除不在视图中的对象,以阻止它们在不需要时被绘制?

具体案例:

我有一个 800x600 的面板(CanvasSprite 或其他容器),其中包含表示单个游戏对象(如小行星、宇宙飞船、导弹或地图图块)的 Sprite 负载。游戏世界可能是 5000x5000,所以我可以天真地将 Sprite 放置在这个范围内的任何位置并让 Flash 有效地剔除它们吗?还是我需要以某种方式在更高级别管理可见性(例如从父级手动删除它们)以避免性能问题?

【问题讨论】:

  • 您可能需要稍微澄清一下。剔除是什么意思?垃圾收集?
  • 我的意思更像是剪辑,即从渲染列表中删除它们
  • +1 好问题,我自己也想知道。我可以根据经验告诉您,“视口”内的项目,但完全被其他项目遮挡,使它们实际上不可见,仍然被绘制。但是,我不能谈论项目在“视口”之外的情况。

标签: apache-flex flash actionscript-3


【解决方案1】:

游戏世界可能是 5000x5000 所以 我可以天真地定位精灵吗 在这个范围内的任何地方,让 Flash 有效地扑杀它们?

我猜,没有。 Flash 对舞台大小有限制(如果我没记错的话,10.1 为 4050x4050),超过该大小就无法保证(渲染伪影和崩溃是可能的)。此外,显示列表过多并不能帮助 Flash 快速渲染。您应该考虑自己进行至少粗粒度的“屏幕剔除”。

【讨论】:

  • 这是舞台大小的限制,不是 DisplayObjects 的限制。它们可以更大。在 FP10 及更高版本中,位图最大为 16,777,215 像素 (4096*4096),我猜基于矢量的类型可能会更大,尽管我找不到任何数字。
  • 但是约翰想把他所有的精灵都放在舞台上,至少我是这么理解的。如果你不能显示它,那么在内存中保存大精灵有什么意义?您可以将子精灵存储在更方便的结构中。
猜你喜欢
  • 2017-01-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-08-05
  • 1970-01-01
  • 2013-04-06
  • 1970-01-01
相关资源
最近更新 更多