- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
在 Android 上的游戏循环中渲染的最佳方式是什么?
当我在 java 中渲染时,我知道该怎么做。我创建缓冲区策略,而不是图形,我绘制,而不是处理和翻转缓冲区。 Andorid 有类似的吗?
我查看了 View ,但当我尝试大量绘制时它无法正常工作。我查看了 SurfaceView,但我不明白如何刷新它的绘图。 invalidate 打破循环,postInvalidate 不起作用。我锁定 Canvas 并在其上绘制,然后解锁并从表面 View 以“创建”方法发布(在循环中锁定 Canvas 不起作用,应用程序中只出现白屏)。所以我不明白。
在 Android 中进行大量渲染的最有效方法是什么?
最佳答案
在 SurfaceView 中渲染的常用方法是通过其 SurfaceHolder .
通常你会得到一个 Canvas通过支架并在其上绘制:
SurfaceHolder surfaceHolder = surfaceView.getHolder();
Canvas canvas = surfaceHolder.getSurface().lockCanvas();
//draw in the canvas
canvas.drawPoint(...);
surfaceHolder.unlockCanvasAndPost(canvas);
正确的做法是将lockCanvas()
和unlockCanvasAndPost()
(含)之间的所有代码在单独的线程(渲染线程)中循环,并控制在循环内使用 Thread.sleep()
的帧速率。
编辑:
有很多方法可以控制渲染线程的 FPS,这是一个基本的方法,只需将想要的 FPS 设置为常量即可:
public class RenderThread extends Thread {
private boolean running;
private final static int MAX_FPS = 30;
private final static int FRAME_PERIOD = 1000 / MAX_FPS;
@Override
public void run() {
long beginTime;
long timeDiff;
int sleepTime;
sleepTime = 0;
while (running) {
beginTime = System.currentTimeMillis();
//RENDER
// How long did the render take
timeDiff = System.currentTimeMillis() - beginTime;
// calculate sleep time
sleepTime = (int)(FRAME_PERIOD - timeDiff);
if (sleepTime > 0) {
try {
Thread.sleep(sleepTime);
} catch (InterruptedException e) {}
}
}
}
}
有很多 references如果您搜索游戏循环。
关于java - Android - 游戏循环中的主动渲染?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30945653/
我有一个数组列表。 ArrayList arrayList = new ArrayList<>(); arrayList.add("timestamp"); arrayList.add("Code")
我想知道如何控制 Navlink 的类名,如果实际路径是 X,则 NavLink 的类是事件的。我在使用 Laravel 和简单的 bootstrap 之前做过它,但我不知道如何用 React 和 R
我的单页网站目前使用箭头键平滑滚动到 anchor 。问题是当您滚动到每个部分时,悬停的链接不会跟随每个部分。它仅遵循您的箭头键命令。我怎样才能改变这个?这是当前网站 ( http://www.jon
我们有一个主动/被动拓扑,其中有两个具有共享原始存储的 x86 复合体,其中在给定时刻只有一个节点可以访问共享存储(也称为主动节点)。如果主动节点发生故障转移,被动节点将启动接管并成为可以访问共享存储
有源 GPS 会消耗多少电量?没有 gps 导航器软件的开销。秒我想每 2 分钟对 gps 进行一次采样并将其保存到文件中。这将花费我多少电池电量? 我的生命周期会缩短 10% 吗? 20%? ..?
AWS今年针对主动-被动设置(全局数据存储)引入了跨区域复制。这意味着有一个用于读取/写入的主Redis群集和一个用于读取的辅助群集。 就我而言,我们想在不同区域中使用 Active-Active R
我正在使用斯坦福标记器来确定词性。但是,我想从文本中获取更多信息。是否有可能获得更多信息,例如句子的时态或是否处于主动/被动状态? 到目前为止,我使用的是非常基本的 PoS 标记方法: List> t
我尝试将 SSL 与 Active MQ 创建的 JMX 连接器一起使用,但没有成功。我能够让 SSL 与 JVM 平台 JMX 连接器一起工作,但这需要存储 keystore 和信任库密码明文,这对
RFC 1006 TCP 连接中主动连接和被动连接有何区别? 最佳答案 这里有解释:https://www.rfc-editor.org/rfc/rfc793 A passive OPEN reque
在 MarkLogic 7 中,副本是主动-主动还是主动-被动? 最佳答案 您是在询问本地磁盘故障转移(又名林复制)、数据库复制还是灵活复制? 事实上,这三个都是为主动-被动使用而设计的:换句话说,单
我正在使用 Windows Azure 网站和 Web 作业。 我有一个控制台应用程序,用于每晚下载 FTP 文件。他们最近从被动 FTP 切换为主动 FTP。我对此没有任何控制权。 所附代码在我的计
我是 JNDI 和 JMS 技术的初学者。 我的 JNDI 文件为: java.naming.factory.initial = org.apache.activemq.jndi.ActiveMQIn
我使用 Active Android在我的项目中。试图了解更多关于它的信息,特别是关于表项属性的信息 - 类似于 ForeignKeyAction。 如果发生删除操作,我希望我的模型只删除它自己,而不
主-主双活mysql复制如何处理唯一键值。对于主键值,我们可以设置 auto_increment_increment 和 auro_increment_offset 参数以避免主键 auto_incr
我是 Linux 新手,我的应用程序在 Windows 上运行了一段时间,对于文件传输,我们使用第三方 sftp,它在主动和被动模式下都运行良好。 现在我正在迁移我的应用程序以支持 Linux 操作系
我在使用 SymmetricDS(开源版本)在 2 个 Postgres 服务器之间复制数据时遇到问题。以下是了解我的问题的相关信息: 我已经用 Vagrant 部署了 3 个服务器: symmetr
我们可以对 Azure SQL 数据库进行被动只读异步实时同步,以实现灾难恢复。 但我们的要求是在两个事件读写数据库之间实现实时同步,以便为世界不同地点的客户提供低延迟。 例如: I'm provid
我们可以对 Azure SQL 数据库进行被动只读异步实时同步,以实现灾难恢复。 但我们的要求是在两个事件读写数据库之间实现实时同步,以便为世界不同地点的客户提供低延迟。 例如: I'm provid
在我的 TCP 服务器上,我希望有: 非阻塞被动套接字具有非阻塞accept(); 接受连接后,我想执行一些身份验证,例如验证客户端提供的 ID 和密码。所以我有明确定义的协议(protocol),我
我的应用中有 anchor 链接。如果 anchor 链接处于事件状态,如何使事件样式发挥作用。 AnchorLink 最佳答案 对于当前事件链接的样式,您可以为参数 activeClassName
我是一名优秀的程序员,十分优秀!