我正在尝试构建一个简单的平台游戏。我最初在主类中拥有所有敌对方法,但在我完成基本游戏后按我想要的方式移动了它们。但是,一旦我开始使用此类包含敌人的方法和变量,我的游戏就会变慢很多,FPS也会下降。 这是我的主要游戏循环代码:
public void run() {
initialize();
while (true) {
move();
ArrayList tempEnemies = getEnemies();
for (int i = 0; i < tempEnemies.size(); i++) {
enemy e = (enemy) tempEnemies.get(i);
if (e.isVisible())
e.enemyUpdate();
else
tempEnemies.remove(i);
}
animation();
animation(0);
keepInBound();
for (int i = 0; i < 3; i++)
checkCollision(platforms[i]);
ArrayList attacks = getAttacks();
for (int i = 0; i < attacks.size(); i++) {
Attacks p = (Attacks) attacks.get(i);
if (p.isVisible() == true) {
p.update();
for (int j = 0; j < enemies.size(); j++)
checkCollisionAttacks(p, enemies.get(i));
} else {
attacks.remove(i);
}
}
//levelFinished();
this.repaint();
try {
Thread.sleep(1000 / FPS);
} catch (Exception e) {
e.printStackTrace();
}
}
}
这是我的敌人阶级(rect是主要阶级的玩家):
public class enemy extends test{
boolean enemyAlive = true, visible;
int enemyHealth = 4, enemyMaxHealth = 4;
int[][] spawnPositions = {{180, 420}, {130, 270}, {280, 120}, {500, 30}};
private int x, y, speedX, height = 30, width = 30;
public enemy() {
int rand = (int)Math.random()*4;
x = spawnPositions[rand][0];
y = spawnPositions[rand][1];
}
public void enemyUpdate() {
if (rect.x > x) {
x+=speedX;
enemyRight = true;
enemyLeft = false;
} else {
x-=speedX;
enemyRight = false;
enemyLeft = true;
}
}
有人知道为什么会这样吗?