我正在开发一款 spaceship 游戏。
我有一个 EnemyFactory 类来使用此方法创建敌人:
public void createPattern(String patternJson, final String enemyJson, final Vector2 position) {
System.out.println(TAG + "- Entering pattern creation..");
Json json = new Json();
final ObjectMap objectMap = json.fromJson(ObjectMap.class, Gdx.files.internal(patternJson));
new Thread(new Runnable() {
@Override
public void run() {
float count = Float.parseFloat(objectMap.get("count").toString());
float interval = Float.parseFloat(objectMap.get("interval").toString());
float intervalDelta = 0;
System.out.println(TAG + "- Running thread..");
for(int i = 0; i < count; i++) {
do{
intervalDelta += Gdx.graphics.getDeltaTime();
System.out.println(TAG + "- interval => " + intervalDelta);
}while(intervalDelta < interval);
Gdx.app.postRunnable(new Runnable() {
@Override
public void run() {
System.out.println(TAG + "- creating enemy ship..");
createEnemy(enemyJson, position);
}
});
intervalDelta = 0;
}
}
}).start();
}
这个想法是在一定时间间隔(0.5秒)内创建 5 个敌人,但是当我运行该应用程序时,它运行 for 循环 5 次,然后创建 5 个敌人,但没有时间间隔。
有什么建议吗?
编辑:
我制作了该函数的另一个版本:
public void createPattern(String patternJson, final String enemyJson, final Vector2 position) {
System.out.println(TAG + "- Entering pattern creation..");
Json json = new Json();
final ObjectMap objectMap = json.fromJson(ObjectMap.class, Gdx.files.internal(patternJson));
float count = Float.parseFloat(objectMap.get("count").toString());
float interval = Float.parseFloat(objectMap.get("interval").toString());
float intervalDelta = 0;
Timer timer = Timer.instance();
timer.scheduleTask(new Timer.Task() {
@Override
public void run() {
createEnemy(enemyJson, position);
}
},0,interval,(int) count);
}
这就是发生的情况,但仍然不是理想的行为:
最佳答案
这是您任务的代码。
关注TimeUnit 类,对于有延迟的任务非常有用。
<小时/>public class ScheduledExecution {
public void createEnemyByPattern() {
EnemyActivator factory = new EnemyActivator(5, 500);
new Thread(factory).start();
}
}
class EnemyActivator implements Runnable {
private final int enemyCount;
private final long creationDelay;
EnemyActivator(int enemyCount, long creationDelay) {
this.enemyCount = enemyCount;
this.creationDelay = creationDelay;
}
@Override
public void run() {
for(int i=0; i<enemyCount; ++i) {
activateEnemy();
try {
TimeUnit.MILLISECONDS.sleep(creationDelay);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
private void activateEnemy() {
// create and send enemy code here
}
}
关于java - 无法在 Libgdx 中创建带有间隔的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23325193/