gpt4 book ai didi

java - 平稳移动物体,性能差

转载 作者:行者123 更新时间:2023-11-30 02:59:19 24 4
gpt4 key购买 nike


我刚刚在 Android 上开发完我的迷你游戏,我遇到了一些关于性能和一般“如何做”的问题:

如果我在屏幕上有 25 个以上的对象(只是一个有 7-8 个角的多边形) 它开始严重滞后并且 CPU 使用率非常高(15-20% 没有碰撞检测,高达 50% 有碰撞检测三星 Note 10.1 平板电脑)。
所以我有 ~25 个多边形(小行星),它们总是在“飞行”。所以为了移动它们,我制作了一个计时器,对吗?在 TimerTask 上,我得到了这样的东西

public void move() {
translate[1] += speed[1];
translate[0] += speed[0];

updateTranslateMatrix(); // updating translate matrix and then send it into vertex shader
updateAABBCoords(); // update coordinates of Axis-aligned bounding box
updateCoordsByTranslate(); // update coordinates of verticles (to be able to define exact collision (with bullets and starship))
}

这个方法有没有多余的东西
另外我想问一下,每 17 毫秒运行一次这个定时器是否可以?还是 17 毫秒太频繁了? 我只在 17 毫秒时感觉运动流畅,可能是我做错了吗?和我在星际飞船/子弹运动和碰撞检测上获得的相同计时器间隔。
请帮帮我。我觉得错过了一些重要而基本的东西,因为在那个简单的 Asteroids 游戏中,note 10.1 占用 50% 的 CPU 是不正常的。

最佳答案

我认为,一个关键问题是您要为每个对象分配一个单独的 Timer,而不是使用通用游戏循环。绝大多数游戏都使用连续运行的游戏循环,并且通常可以分为两个部分:更新和渲染。

An article on basic game loop design for Java/Android

An answer to a relevant question on game loop design on gamedev.stackexchange.com

当使用游戏循环时,您不能保证能够准确地每 17 毫秒或其他任意持续时间更新一次。相反,Update 和 Render 方法接收一个 DeltaTime 参数,该参数是自上一帧以来的时间。

例如,当通过将它与对象的速度相乘来获得新的对象位置时,就会使用它。这样做可以实现平滑的位置插值,并确保对象速度不受 CPU 速度的影响。

关于java - 平稳移动物体,性能差,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22787286/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com