我正在制作游戏(小行星,船只用子弹摧毁小行星)我有一个问题:
如果我在开始时产生 50个小行星,则cpu使用率约为 2-3%。没关系。
但是如果我产生 5个小行星然后我玩游戏并且到达 50个小行星的时刻(每个级别增加,当你去掉所有之前)时,CPU使用率约为 20%
此外,如果我销毁49/50小行星并且只留下一个活着,那么CPU使用率将仍为20%,但无需计算(我的意思是移动,碰撞检测等)
我有主GameLoop TimerTask
public void startGameLoop() {
timer.schedule(gameLoopTask, 0, 17);
timer.schedule(updateScoreAndLifesTask, 2000, 300); // just update score views
}
class GameLoop extends TimerTask {
public void run() {
game.updateState();
openGLView.requestRender();
}
}
public void updateState() {
ship.move();
for(int i=0; i<asteroids.size();i++) // asteroids and ship.bullets are ArrayLists
asteroids.get(i).move();
for(int i=0; i<ship.bullets.size();i++)
ship.bullets.get(i).move();
detectCollision();
}
public void detectCollision() {
detectCollisionAsteroidsWithBullets();
if(ship.isAlive && !ship.isImmortal)
detectCollisionAsteroidsWithShip();
}
detectCollision
方法循环ship.bullets
和asteroids
ArrayLists
的副本:
public void detectCollisionAsteroidsWithBullets() {
mainloop: for(int b=0; b < ship.bullets.size(); b++) {
for(int a=0; a<asteroids.size(); a++) {
和
public void detectCollisionAsteroidsWithShip() {
mainloop: for(int a=0; a<asteroids.size(); a++) {
if(isAABBoxIntersectWithAABBox(asteroids.get(a).AABBCoords, ship.AABBCoords)) {
因此,如果只有1个小行星,就不应该使用CPU。销毁子弹和小行星= asteroids.remove(asteroid);
(我只是从ArrayList中删除它
所以,请帮助我,我不知道为什么它继续使用如此多的CPU,如果只有循环可以很好地运行50个小行星,并且肯定不应该只用1个小行星来做20%的CPU使用
答案 0 :(得分:0)
您是否应该制作已存在对象的克隆? 在你摧毁它们之后,你所摧毁的小行星仍将存在于游戏中。
您应该删除它们或再次开始使用它们。