为 Android 编写实时 opengl-es 游戏 - 一些问题(优化)

2024-02-13

1.

游戏中的计时: 有没有办法使用其他的System.Currentmillis()-starttime>XX更新游戏中的任何内容?安全还是CPU贵?

2.

在我的游戏中,我有 20 个项目(移动方形顶点),当它达到 60-70 顶点时,FPS 从 60 FPS 下降到 30-40 FPS。 (在 Galaxy S i9000 手机上进行测试)。 有没有办法让我的游戏FPS变成30FPS?将我的游戏更新到 30 FPS 是否有好处,或者我不需要处理这个问题? (因为较低的 FPS 会出现延迟 - 速度会很慢)

我怎样才能让我的对象在任何时候都以相同的速度运行?

3.

最好的方法是什么:做 phisyx,以及 onDrawFrame 中的所有 Stupp,或者:启动一个线程 对我来说数学是什么?什么是更快更好?


游戏中的计时:是否有其他方法可以使用 System.Currentmillis()-starttime>XX 来更新游戏中的任何内容?安全还是CPU贵?

您应该使用时间增量系统。有很多关于这方面的教程。这是一个非常好的教程:deWiTTERS 游戏循环 http://www.koonsolo.com/news/dewitters-gameloop/.

在我的游戏中,我有 20 个项目(移动方形顶点),当它达到 60-70 顶点时,FPS 从 60 FPS 下降到 30-40 FPS。 (在 Galaxy S i9000 手机上进行测试)。有没有办法让我的游戏FPS变成30FPS?将我的游戏更新到 30 FPS 是否有好处,或者我不需要处理这个问题? (因为较低的 FPS 会出现延迟 - 速度会很慢)

这取决于您使用哪种方法。如果是 3D,您应该考虑使用Vertex Buffer Objects (VBO:s) (像一个Vertex Array但在您设备的 GPU 内存中)。这会产生巨大的差异,因为 CPU 不需要每次迭代都将数据从 CPU 复制到 GPU。

如果是 2D,您仍然可以使用VBO:s but if draw_texture推荐的设备支持。

但是,选项是:

  • Vertex Arrays(最慢)。
  • Vertex Buffer Objects(3D 中最快,慢于draw_texture in 2D).
  • draw_texture扩展(2D 速度最快,但不渲染 3D 内容)。

您可以支持所有这些方法来覆盖整个 Android 设备范围,但请记住检查设备的扩展名OpenGL司机。有些设备可能支持所有这些,但有些设备可能只支持Vertex Arrays and VBO:s(例如)。

I've answered a related question here https://stackoverflow.com/questions/5169338/android-deciding-between-surfaceview-and-opengl-glsurfaceview/5169425#5169425, but just to show you; here's a print from one of Chris Pruett's lectures at Google I/O: drawing stuff

我怎样才能让我的对象在任何时候都以相同的速度运行?

你不能。 Android 是一个多处理操作系统,你不知道发生了什么(也许是另一个Service应用程序正在更新?)。您可以做的是使用时间增量系统,就像我上面提到的那样。

最好的方法是什么:做 phisyx,以及 onDrawFrame 中的所有 Stupp,或者:启动一个线程 对我来说数学是什么?什么是更快更好?

建议多线程(两个Thread并行运行)。很快,在里面做你的绘画工作onDrawFrame并更新您自己创建的内容Thread/Runnable.

推荐资源:

  • 2009 年谷歌 I/O 大会 http://www.youtube.com/watch?v=U4Bk5rmIpic and 谷歌 I/O 2010 http://www.youtube.com/watch?v=7-62tRHLcHk
  • Android 游戏开发:快速入门 http://android-developers.blogspot.com/2010/06/game-development-for-android-quick.html
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为 Android 编写实时 opengl-es 游戏 - 一些问题(优化) 的相关文章

  • 保存用户可以访问的 Flutter Android 应用程序中的文本文件

    我在 Flutter 中开发的 Android 应用程序的用户应该能够将一些数据保存 导出 到文本文件中 用户应该能够使用其他应用程序 包括文件管理器 在其 Android 设备上找到并访问此文件 我想 final directory aw
  • ACTION_VIEW 的 Intent.createChooser 仅显示默认浏览器

    我正在尝试使用 Intent createChooser 显示应用程序选择器对话框 该对话框将列出用户手机中所有可用的网络浏览器 我正在使用下面的代码 Intent browserIntent new Intent Intent ACTIO
  • 任务“:app:dexDebug”执行失败

    我目前正在处理我的项目 我决定将我的 Android Studio 更新到新版本 但在我导入项目后 它显示如下错误 Information Gradle tasks app assembleDebug app preBuild UP TO
  • doInBackground 运行时是否可以停止 asynctask?

    我正在 ActivityB Oncreate 中创建异步任务 在该任务中 我正在运行无限 while 循环doInBackground 当我转到上一个活动并再次回到该活动时 创建了另一个异步任务 我的问题现在是两个无限 while 循环正在
  • 在 Android 中的活动、服务和应用程序之间传递变量

    有人可以给我提供以下活动 服务 应用程序组合的示例吗 我拥有这三个 但我已经把我的应用程序弄得一团糟 试图在这个地方传递一堆变量 现在我不知道发生了什么 请注意 我是 Android 新手 最近我一直在努力解决这个问题 因为有很多方法可以实
  • 更改工具栏中汉堡图标的大小?

    我有两个问题 可能很奇怪 但无论如何 我有带有应用程序标题的工具栏 如何将其更改为非徽标的图片 下一个问题 是否可以设置 更改工具栏中汉堡图标的大小 我在下面的下一个代码的帮助下制作了经典的导航抽屉 我也使用了 ActionBarDrawe
  • Android - 除了普通 SSL 证书之外还验证自签名证书

    我有一个通过 SSL 调用 Web 服务的 Android 应用程序 在生产中 我们将拥有由受信任的 CA 签名的普通 SSL 证书 但是 我们需要能够支持自签名证书 由我们自己的 CA 签名 我已经成功实施了接受自签名证书的建议解决方案
  • 如何在照片删除后刷新 Android 的 MediaStore

    问题 如何使媒体存储刷新其已删除文件的条目 从外部存储中删除代码中的照片后 我仍然在图库中看到已删除照片的插槽 空白照片 画廊似乎反映了媒体存储 并且在媒体存储中找到了已删除的照片 直到手机重新启动或通常 直到重新扫描媒体为止 尝试扫描已删
  • 如何将单选按钮状态保存到已保存/共享首选项?

    我可以在保存的首选项中保存字符串 但很难保存单选按钮 public class PersonalDetailsf extends Activity private SharedPreferences sharedPreferences pr
  • 如何检测 Google Play 上是否有我的应用程序的更新? [复制]

    这个问题在这里已经有答案了 有没有办法以编程方式检查 Google Play 上我的应用程序是否有更新 以便通知用户 我知道 android google play 有自动通知 但我想使用我自己的通知 弹出消息来更新可用性 有点像 Vibe
  • Cordova 地理定位不适用于 Android

    我想在 Android 上使用地理定位 我用 Apache Cordova 编写应用程序 地理定位在 android 电脑模拟器和 android 手机上均不起作用 I try http cordova apache org docs en
  • invalidateOptionsMenu 在片段中不起作用

    显示或隐藏项目ActionBar根据文本中是否有文本EditText or not 所以 我做了以下事情 public class NounSearch extends android app Fragment EditText seach
  • 手动启用时 Firebase Crashlytics 不报告崩溃

    Crashlytics 在没有选择加入报告的情况下也能正常工作 但一旦我根据规定设置了选择加入报告 它就会停止报告任何内容tutorial https firebase google com docs crashlytics customi
  • 有没有办法在Android上创建一个三角形按钮?

    有没有办法创建一个三角形的按钮 我知道我可以将三角形图像作为背景 但这将使三角形之外的区域可单击 有没有办法固定按钮角 X 和 Y 以便我可以将其变成三角形 您可以覆盖OnTouch http developer android com r
  • 点击监听器的公共类

    我的所有 6 项活动中有 7 个按钮 所有 6 个按钮在所有活动中都具有相同的功能 如何为这 6 个按钮执行通用的单击事件侦听器 您可以创建一个实现 View OnClickListener 的新类 如下所示 public class My
  • Android:如何使视图增长以填充可用空间?

    这看起来很简单 但我不知道该怎么做 我有一个带有 EditText 和两个 ImageButtons 的水平布局 我希望 ImageButtons 具有固定大小 并且 EditText 占据布局中的剩余空间 如何才能做到这一点
  • 如何在新标签 android webview 中打开链接? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我已经使用 webview 创建了一个 android 应用程序来显示我的网站 我什至想添加在新选项卡中打开链接的功能 但我找不到任何
  • 如何在android sdk上使用PowerMock

    我想为我的 android 项目编写一些单元测试和仪器测试 然而 我遇到了一个困扰我一段时间的问题 我需要模拟静态方法并伪造返回值来测试项目 经过一些论坛的调查 唯一的方法是使用PowerMock来模拟静态方法 这是我的 gradle 的一
  • 修改 ADW Android 启动器?

    我想更改和修改开源 ADW 启动器 启动器可在此处获取 https github com AnderWeb android packages apps Launcher https github com AnderWeb android p
  • 尝试使用带有有效购买令牌的 Java Google Play Developer API v3 检索应用内购买信息时出现错误请求(无效值)

    当使用 Java Google Play Developer API 版本 3 并请求有效购买令牌的购买信息时 我收到以下异常 API 调用返回 400 Bad Request 响应以及以下消息 code 400 errors domain

随机推荐

  • 单击日历时使用 fullcalendar 创建事件(rails)

    当用户单击日历的任何部分时 如何创建事件 然后将其作为新事件存储在数据库中 我知道你必须使用 select function start end allDay 来获取 开始 和 结束 时间 但是当我得到这些数据后 如何将其传递到数据库呢 T
  • Rails 控制台添加 nil 而不是值

    目前 当尝试通过 Rails 控制台或种子数据将新用户添加到我的用户表时 一切都为零 在我的种子文件中 我正在运行 u1 User create from email gt email protected cdn cgi l email p
  • 捕获正则表达式匹配以从查找表中进行替换

    我正在 PowerShell 中编写一个语言解释器 该语言是 PILOT 对于那些可能感兴趣的人 并且我已经达到了实现变量替换的地步 变量名由以下任一组成 or a 后跟该集中最多十个字符 A Za z0 9 但是 如果变量名带有前缀 它应
  • Codeigniter 中的注销功能

    我开始在我的项目中使用 codeigniter 我的网站有用户身份验证系统 我看过 nettuts 的视频以获取登录信息 我很困惑为什么注销不能正常工作 我的登录控制器中有以下注销功能 function logout this gt ses
  • Python 在 Windows 8.1 64 位上错误地检测到 32 位系统

    PS C Users gt C Python27 python exe Python 2 7 15 v2 7 15 ca079a3ea3 Apr 30 2018 16 30 26 MSC v 1500 64 bit AMD64 on win
  • 单表内SQL时间差

    我有一个包含用户登录数据的 MySQL 表 user date type 1 2011 01 05 08 00 00 login 1 2011 01 06 09 00 00 login 1 2011 01 06 10 00 00 logou
  • RankNTypes 与类型别名混淆[重复]

    这个问题在这里已经有答案了 我试图了解类型约束如何与类型别名一起使用 首先 假设我有下一个类型别名 type NumList a Num a gt a 我有下一个功能 addFirst a gt NumList a gt NumList a
  • 从浏览器捕获系统声音

    我正在尝试构建一个 Web 应用程序 从 webrtc 调用捕获本地和远程音频 但我无法录制远程音频 使用 recordRTC 我想知道是否可以以某种方式捕获系统声音 有没有办法从浏览器捕获系统声音 不仅仅是麦克风 也许是一个扩展 在 Ch
  • PHP中如何计算对角线差?

    我有一个N N矩阵 现在我想知道这个矩阵的对角线差异 这个解决方案的最佳方法是什么 我正在尝试使用给定的方法 就这样3 3矩阵说它是 11 15 85 66 72 21 14 21 47 对角线简单公式为 firstD 11 72 47 1
  • VC++ 2010 include/lib 路径

    VC2010 Express 中是否有地方可以为所有项目设置头文件和库路径 当我设置它们时 它们似乎只适用于单个项目 例如 我每次启动新项目时都必须设置它们 我认为你可以为此设置环境变量 INCLUDE 和 LIBPATH 不知道如何从 G
  • 使用 cordova for android 构建会创建错误的版本代码

    运行命令cordova build release android生成版本代码为 70 的 apk 在 config xml 文件中 对于小部件我将其设置为
  • 如何检测 Firefox 中的浏览器关闭事件?

    如何在 Firefox 浏览器中检测浏览器关闭事件 我想在服务器端进行一些清理过程 并维护上次注销时间 为了实现这一点 需要在用户单击注销或关闭浏览器时触发 ajax 调用 对于 IE 以下代码有效 if window event clie
  • 带有 的多行

    代码笔 https codesandbox io s 94lw648lmo fontsize 14 https codesandbox io s 94lw648lmo fontsize 14 我一直在使用 Material ui 和 Rea
  • 如何删除目录中X个文件

    要获取目录中的 X 个文件 我可以这样做 ls U head 40000 那么我该如何删除这 40 000 个文件呢 例如 类似 rm rf ls U head 40000 您需要的工具是xargs 它将标准输入转换为您指定的命令的参数 输
  • 如何为 EF5 导航属性指定列名称

    我首先使用 EF5 代码来生成数据库架构 但我的新导航属性在表中以不合需要的方式命名 这是我正在使用的模型 public class User Key public long UserId get set public virtual IC
  • CSS - 使用滤镜为黑白 PNG 图像添加颜色

    CSS 中是否可以使用滤镜为黑白图像添加颜色 我说的是像 Photoshop 中那样使用过滤器 更好的例子是 Microsoft PowerPoint 中的过滤器 我想做的是 我有一个黑色图标的图像文件 我想为其添加一个过滤器 以便图像中的
  • 具有实体框架的 WCF DataService:TimeSpan 支持

    我正在尝试在公开许多 System TimeSpan 属性的实体框架对象上下文上创建 WCF 数据服务 但是 当我尝试访问该服务时 出现以下错误 DepotRoute 类型上的属性 ScheduledDepartureTime 属于 Tim
  • 如何用科学记数法格式化数字

    所以基本上我有这个返回的函数 3 00000000000E000 function lang extended begin wynik 0 counter 1 temp 1 input 2 for i 1 to 4 do begin for
  • XSLT 1.0 杂乱清理

    我正在以反向字体 黑色背景 白色文本 打印一行 分布在收据带的宽度上 41 个字符 我有功能代码 但我想知道是否有更好的方法来做到这一点 这是我现有的代码
  • 为 Android 编写实时 opengl-es 游戏 - 一些问题(优化)

    1 游戏中的计时 有没有办法使用其他的System Currentmillis starttime gt XX更新游戏中的任何内容 安全还是CPU贵 2 在我的游戏中 我有 20 个项目 移动方形顶点 当它达到 60 70 顶点时 FPS