游戏开发者的 Flash 性能:本机渲染 VS BitmapData 帧缓冲区

2024-04-12

我开发了一款 2D 射击游戏很多物体 and 激进的滚动.

问题:哪种方式更好?

选择 1 - 使用原生 Flash 渲染:

  • 从 Bitmap 派生游戏对象,使用现有的 x、y、宽度、高度、bitmapData
  • 将所有对象添加为子 UI Component.add Child(...) 到屏幕
  • 使用“scrollRect”剪辑可见区域

选择 2 - 使用“位图 + copyPixels”编写自定义渲染

  • 使用自己的游戏对象与 x、y、宽度、高度、位图数据
  • 将位图添加到屏幕,从中获取位图数据
  • 重绘每个 ENTER_FRAME:bitmapData.lock(),迭代游戏对象并 copyPixels() 到 bitmapData,然后 bitmapData.unlock()
  • 自定义剪辑:不渲染屏幕对象

这里在这个question https://stackoverflow.com/questions/989471/vsync-in-flex-flash-as3有些人抱怨“bitmap + copyPixels()”很慢。

实验:我已经实现了这两种技术:

  • main_1.swf http://sites.google.com/site/oshyshko/framebuffer_vs_nativerender/main_1_more_creeps.swf?attredirects=0- 本国的
  • main_2.swf http://sites.google.com/site/oshyshko/framebuffer_vs_nativerender/main_2_more_creeps.swf?attredirects=0- 风俗

请尝试一下,看看哪一个更好(更快、更流畅、占用 CPU 更少)。

等到会有至少 250 个敌人(屏幕上方的计数器)。
UPDATE:尝试打开任务管理器(或 $top)并查看总体 CPU 使用情况

更新2:我更改了代码,现在小兵的生成速度更快了。


更新:感谢高压力版本。再说一遍,我只是跑来跑去,看不出有什么区别。但我巧妙地发现“r”会掉落炮塔,当我掉落20-30个炮塔时,原生版本比手动版本慢一些,所以也许我错了。 (我发现内存使用情况没有差异。)看起来本地处理事情应该有可能更快,但很可能需要对某些不透明的排序进行专门处理。

由于这一点已被接受,我将添加一条注释以明确我在对另一个答案的评论中所说的话:如果您的所有资产本身都是位图,那么正如 HanClinto 指出的那样,发现手动合成它们比手动合成它们更快也就不足为奇了。制作本机对象并让 Flash 完成工作,因为它消除了与显示对象(如事件结构)相关的开销。

然而,在某些情况下,手动执行操作可能会胜出,例如,如果您有需要渲染为位图的矢量内容,或大量动画精灵,或者如果您需要检测演员上的鼠标事件(您需要需要手动完成,如果您自己进行合成,可能会很痛苦)。

因此,如果您不需要做任何会减慢手动合成速度的事情,那么它似乎绝对是最好的答案,如果您这样做,那么尝试这两种方法是绝对确定的最佳方法。 (混合模型也是可能的,您可以制作一层需要鼠标事件的本机对象,并用一层手动合成的位图覆盖或底层。)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

游戏开发者的 Flash 性能:本机渲染 VS BitmapData 帧缓冲区 的相关文章

  • Java中的马尔可夫模型决策过程

    我正在用 Java 编写辅助学习算法 我遇到了一个我可能可以解决的数学问题 但由于处理量很大 我需要一个最佳解决方案 话虽这么说 如果有人知道一个优化的库 那就太棒了 但语言是 Java 所以需要考虑到这一点 这个想法相当简单 对象将存储变
  • 在 Flex 选项卡式视图导航器之间切换

    我正在开发 FlexTabbedViewNavigatorApplication具有三个选项卡 ViewNavigator 元素 我想根据用户操作 通过 ActionScript 代码 从一个 ViewNavigator 切换到另一个 Vi
  • 如何提高 MongoDB 中 update() 和 save() 的性能?

    我正在寻找有关如何在以下情况下提高数据库性能的提示 作为示例应用程序 我今天编写了一个相当简单的应用程序 它使用 Twitter 流 API 来搜索某些关键字 然后将结果存储在 MongoDB 中 该应用程序是用 Node js 编写的 我
  • 将应用程序状态保存在磁盘或其他位置,以便用户稍后访问它

    In 弹性构建器 4 5我正在做一个像这样的项目cacoo http www cacoo com 我想保存diagrams display object ui components text 在将应用程序关闭到应用程序之后我无法访问的某个地
  • 构建可扩展 Web 应用程序的书籍? (数据库性能/调优、网络、一般性能等)[关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 从计算机科学专业毕业并作为一名从事 Web 应用程序的软件工程师进入 现实世界 后 我对如何正确扩展 W
  • 是否可以使用 S3 进行 Flash 伪流?

    我一直在使用 S3 来存储和提供 FLV 和 MP4 视频 它效果很好 但内容是渐进下载的 我想知道是否有可能让所谓的 伪流 与 S3 一起使用 伪流允许观看者在下载完整视频之前在视频中向前搜索 并仅将必要的位发送到 Flash 播放器 我
  • 流媒体视频文件?

    我需要流式传输 flv 文件 流媒体应该看起来像直播 我应该有一种方法可以更改目标文件 抱歉我的英语不好 如果 流式传输 的意思是 显示 Flash 视频剪辑 则 flv streaming 并不是真正的流式传输 而是正常的文件传输 即使文
  • LockBits 性能关键代码

    我有一个方法需要尽可能快 它使用不安全的内存指针 这是我第一次尝试这种类型的编码 所以我知道它可能会更快
  • 如何使用 VBA 将符号/图标格式化为单元格而不使用条件格式

    我使用 VBA 代码放置条件格式以覆盖大型表格中的值 每个单元格使用 2 个公式来确定使用 3 个符号中的哪一个 我需要根据列使用不同的单元格检查每个单元格的值 因此据我了解 我必须将条件格式规则单独放置在每个单元格上 以确保每个单元格中的
  • 如何利用磁盘 IO 队列

    我需要从 3 7 GB 文件中读取小数据序列 我需要阅读的职位是不相邻 但我可以命令 IO 以便从头到尾读取文件 该文件存储在 iSCSI SAN 上 该 SAN 应该能够处理 优化排队 IO 问题是 如何一次性请求我需要的所有数据 位置
  • Flex 字典字面量

    在 Flex 中工作 我需要用相当复杂的结构填充字典 基于本文档页面 http livedocs adobe com flex 3 html help html content 10 Lists of data 4 html我尝试通过以下语
  • 如何有效地计算 Perl 中覆盖给定范围的范围?

    我有一个大约 30k 范围的数据库 每个范围都作为一对起点和终点给出 12 80 34 60 34 9000 76 743 我想编写一个 Perl 子例程来表示一个范围 不是来自数据库 并返回数据库中完全 包含 给定范围的范围数 例如 如果
  • 在未排序的整数列表中最优搜索 k 个最小值

    我刚刚接受采访时提出了一个问题 我很好奇答案应该是什么 问题本质上是 假设您有一个包含 n 个整数的未排序列表 您如何找到此列表中的 k 个最小值 也就是说 如果您有一个 10 11 24 12 13 列表并且正在寻找 2 个最小值 您将得
  • MSMQ 慢速队列读取

    我正在使用一个开源 Net 库 它在底层使用 MSMQ 大约一两周后 服务速度变慢 时间不准确 但一般猜测 看来发生的情况是来自 MSMQ 的消息每 10 秒才被读取一次 通常 它们会立即被读取 因此 它们将在 T 10 秒 T 20 秒
  • 使用多个模块时优化 Flex

    我有一个 Flex 应用程序 加载时间非常重要 消费者网站 我希望能够在屏幕上显示一些内容 然后允许根据需要加载其他模块 我面临的问题是所有模块的总和比我将所有组件包含在单个 swf 文件中要大得多 原因很明显 例如 访问 Web 服务所需
  • 给定两个(大)点集,我如何有效地找到彼此最接近的点对?

    我需要解决一个计算问题 该问题归结为搜索两个集合之间最接近的点对 问题是这样的 给定欧几里德空间中的一组点 A 和一组点 B 找到所有对 a b 使得 b 是 B 中与 a 最近的点 a 是 A 中与 b 最近的点 集合 A 和 B 的大小
  • JMeter:tearDown Thread Group的目的是什么

    我想了解JMeter中tearDown Thread Group的实际用法 在什么场景下可以使用tearDown Thread Group 根据提供的帮助JMeter 拆解线程组 http jmeter apache org userman
  • 为什么 Chrome 审核建议我最小化 Cookie 大小?

    如何最小化请求的 cookie 大小 Chrome 似乎 警告我 我的 cookie 大小为 41B 这根本不是很多 但是它警告我有什么原因吗 这是一个 PHPSESSID cookie 我真的不知道如何最小化它 有任何想法吗 我的请求响应
  • Python:多重分配与单独分配速度

    我一直在寻求从我的代码中挤出更多的性能 最近 在浏览时这个 Python 维基页面 https wiki python org moin PythonSpeed 我发现了这个说法 多重分配比单独分配慢 例如 x y a b 比 x a y
  • Flash 未在调试播放器中显示错误/堆栈跟踪(firefox/chrome/whatnot)

    我正在尝试调试在线默默地失败的应用程序 我 100 确定我正在运行 Flash 调试播放器 为了确保我不会丢失它 我故意抛出一个错误 但 Flash 在浏览器中没有显示任何 stracktrace 我快要失去它了 有什么线索吗 我正在 ch

随机推荐

  • Fortran 中指数函数的 DEXP 或 EXP?

    我有两个非常简短的问题 1 我刚刚读到DEXP is the archaic的形式EXP 这是否意味着不应再使用它 我一直以为DEXP 双精度等于EXP 2 指数函数的范围是多少 它依赖于编译器吗 问题 1 在现代 Fortran 中 最好
  • 如何在magento中添加自定义模块

    您好 我想为页脚创建一个自定义模块 用于显示新闻标题 还没有使用自定义模块 我该怎么做 谁能告诉我创建自定义模块的简单步骤 Thanks 您会发现的最佳资源是 模块创建器扩展 http www magentocommerce com ext
  • 如何在android xml布局中将9个按钮放在3行中?

    我正在尝试制作一个井字游戏 android 版本 我想让所有 9 个按钮根据设备的宽度和高度自动调整大小 并将它们均匀地放在 3 3 网格中 但我现在只能设置它们的尺寸的数字 谁能告诉我如何让他们使用父母的高度和宽度并计算他们的尺寸 另外
  • 静态库 (.a) 和共享库 (.so) 之间的文件格式差异?

    我知道关于共享库和静态库的用例有很多问题 这个问题与此无关 我问的是磁盘上存储的文件格式的差异 为什么问题是 两者之间有什么区别 或者它们完全相同 只是用途不同 我相信它们是不一样的 因为在共享库上运行 nm 需要 D 标志 显然它需要做一
  • 尝试检索 Google 日历活动时 WEB_HOOK 通道不可用

    我正在尝试使用Google 日历的推送通知 https developers google com calendar v3 push 回调端点托管在 Heroku 上 应用程序名称 herokuapp com已在 Search Consol
  • 如何过滤上传对话框中可以看到哪些文件?

    在没有 ActiveXes Flash 或 Java Applet JavaScript 也可以 等客户端对象的 ASP NET MVC 应用程序中 是否可以想象当弹出上传文件对话框时 它只会显示我指定的文件 例如 在用于选择要上传的文件的
  • 如何在 django 中创建新的数据库连接

    我需要创建一个新的数据库连接 会话 以避免 django 事务中的 MySql 过程意外提交 如何在django中设置它 我尝试在设置文件中复制数据库配置 它对我有用 但似乎不是一个好的解决方案 有关更多详细信息 请参阅我的代码 class
  • javascript - 捕获语法错误并运行备用函数

    我正在尝试在 javascript 上构建一些东西 我可以有一个可以是一切的输入 像字符串 xml javascript 和 不带引号的非 JavaScript 字符串 如下 strings eval hello I am a string
  • 如何使用 LINQ 从没有主键的表中插入/更新/删除记录

    我正在使用 LINQ 连接到第三者数据库 现在我必须将一些记录插入到没有设置主键的表中 并且出现以下异常 System InvalidOperationException 无法对 表 the table 执行创建 更新或删除操作 因为它没有
  • 如何在不使用 Next() 的情况下获取 sql.Rows 的计数?

    我需要得到的长度 sql Rows before我开始 Next 循环来获取值 一种方法是通过循环 Next 两次来创建行切片 获取计数 然后循环该新切片以提取值 但这似乎效率很低 所以我希望有一种更好的方法做这个 查看文档 我没有看到任何
  • mclapply 遇到取决于核心 id 的错误?

    我有一组基因 我需要并行计算一些系数 系数在里面计算GeneTo GeneCoeffs filtered它将基因名称作为输入并返回 2 个数据框的列表 长度为 100gene array我使用不同数量的核心运行此命令 5 6 和 7 Coe
  • 从字符串中获取“$#”的所有正则表达式匹配项

    我有一个字符串 其中包含多个美元符号实例 后跟一个正数 我需要使用正则表达式获取每个实例 这是一个字符串的示例 This that 1 who 2 到目前为止 我使用 vb net 得到的结果如下 Dim wordSplitMatches
  • npm ci 命令失败并显示“无法读取未定义的属性‘@angular/animations’”

    在为我的 Angular 项目执行 docker build 时 在npm ci步骤 我收到以下错误 Cannot read property angular animations of undefined 由于没有正确的错误 我们无法找到
  • 重复AlarmManager如何启动AsyncTask?

    我通常编写这段代码来启动服务AlarmManager intent new Intent getActivity someservice class pendingNotificationIntent PendingIntent getSe
  • 在位图上绘制长字符串会导致绘图问题

    我正在将一个长字符串绘制到位图 超过一百万个字符 包括多行字符 r n 由一个写StringBuilder 我的文本转位图代码如下 public static Bitmap GetBitmap string input Font input
  • 是否可以以编程方式抛出 NullPointerException? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 当有后置条件 方法的返回值不能为null时 怎么办 我可以 assert returnValue null Not acceptable nul
  • 防病毒软件将 python.exe 检测为 idp.generic?

    我开始学习Python 安装了 python 2 7 和 Pycharm 当我在 Pycharm 中打开 python 控制台时 我的防病毒软件警告我路径中的 python exevenv Scripts被感染IDP Generic 以前有
  • SDL 2.0源码中有1.3吗?

    我正在研究 SDL 2 0 源代码 注意到其中有另一个声称是 1 3 版本的 SDL 文件夹 我对它很感兴趣 因为它有 android iphone 和其他一些的源代码 稳定版本 1 2 似乎有很大不同 我的问题是这样的 SDL 维基链接
  • 基于原型的 OO 与基于类的 OO 相比有哪些优点?

    为什么基于类的 OO 如此受欢迎 而不是基于原型的 OO 他们在学校教授后者吗 尽管 Javascript 是基于原型的 但大多数人主要是在功能上使用它 或者通过尝试模拟基于类的系统的框架 我知道Sun已经做了一些研究Self http r
  • 游戏开发者的 Flash 性能:本机渲染 VS BitmapData 帧缓冲区

    我开发了一款 2D 射击游戏很多物体 and 激进的滚动 问题 哪种方式更好 选择 1 使用原生 Flash 渲染 从 Bitmap 派生游戏对象 使用现有的 x y 宽度 高度 bitmapData 将所有对象添加为子 UI Compon