gpt4 book ai didi

java - LibGDX - 如何减慢 update() 方法?

转载 作者:行者123 更新时间:2023-12-01 22:18:30 25 4
gpt4 key购买 nike

我正在尝试在 LibGDX 中重新创建太空入侵者以掌控游戏开发,但是当我尝试设置每个敌人(现在它们只是方 block )按顺序移动时,update() 方法会使它们改变位置太快了。有什么方法可以减慢整个项目的渲染速度或任何其他正确的方法来解决这个问题?我还尝试处理 Timer 类中的移动并安排它,但它导致内存过载,并且每个对象的线程不会同时触发。

  package regularmikey.objects;

import java.util.Timer;
import java.util.TimerTask;

import com.badlogic.gdx.graphics.glutils.ShapeRenderer;
import com.badlogic.gdx.graphics.glutils.ShapeRenderer.ShapeType;

public class Aliens {

public float x;
public float y;
public float fx;
public float fy;
public int step_count = 0;

public Aliens(float x, float y) {
this.fx = this.x = x;
this.fy = this.y = y;


};


public void update(float dt){

if(step_count == 10) {
step_count = 0;
y = y - 1;
x = fx;

}
x = x + 3;
step_count++;
};

PlayState类

package regularmikey.gamestates;

import java.util.ArrayList;

import com.badlogic.gdx.graphics.glutils.ShapeRenderer;

import regularmikey.managers.GameStateManager;
import regularmikey.objects.Aliens;
import regularmikey.objects.Bullet;
import regularmikey.objects.Player;

public class PlayState extends GameState {

private Player player;
private ArrayList<Bullet> bullets;
private ArrayList<Aliens> aliens;
private ShapeRenderer sr;

public PlayState(GameStateManager gsm) {

super(gsm);

}

@Override
public void init() {
sr = new ShapeRenderer();
bullets = new ArrayList<Bullet>();
aliens = new ArrayList<Aliens>();
player = new Player(bullets);
spawnAliens();




}

@Override
public void update(float dt) {
player.update(dt);

for(int i = 0; i < aliens.size(); i++) {
aliens.get(i).update(dt);
}



}

public void spawnAliens() {
aliens.clear();



float i, j;



for(j = 100; j <= 510; j = j + 45) {
for(i = 250; i <= 445; i = i + 45) {

aliens.add(new Aliens(j, i));
}

}




}

@Override
public void draw() {
player.draw(sr);



for(int i = 0; i < aliens.size(); i++) {
aliens.get(i).draw(sr);

}



}

@Override
public void handleinput() {
// TODO Auto-generated method stub

}

@Override
public void dispose() {
// TODO Auto-generated method stub

}
}


public void draw(ShapeRenderer sr) {
sr.setColor(1, 1, 1, 1);
sr.begin(ShapeType.Line);
sr.rect(x, y, 30, 30);
sr.end();


};


}

最佳答案

这里的关键是与 update() 方法一起传递的 dt 变量,它是 Delta Time 的缩写。

增量时间是游戏开发中常用的因素,表示自上一帧以来耗时。

我无法确切地弄清楚你让外星人移动的方式,但让游戏中的实体平滑移动的常用方法(无论帧速率如何):

void update(float deltaTime){
this.position = currentPosition + (this.movementSpeed × deltaTime);
}

这没有考虑实体移动的方向等。但这不是这个例子的重点。

因此,就您而言,您可以这样:

package regularmikey.objects;

import java.util.Timer;
import java.util.TimerTask;

import com.badlogic.gdx.graphics.glutils.ShapeRenderer;
import com.badlogic.gdx.graphics.glutils.ShapeRenderer.ShapeType;

public class Aliens {

public float x;
public float y;
public float fx;
public float fy;
public int step_count = 0;

private float moveTimer;
private float moveTreshold;

public Aliens(float x, float y) {
this.fx = this.x = x;
this.fy = this.y = y;

moveTimer = 0; // This will act as a stopwatch
moveTreshold = 3000; // Alien will move once it passes this treshold
};


public void update(float dt){
// check whether we passed the treshold for moving or not
if(moveTimer += dt; > moveTreshold){
if(step_count == 10) {
step_count = 0;
y = y - 1;
x = fx;

}
x = x + 3;
step_count++;

moveTimer = 0; // reset the timer
}
};

关于java - LibGDX - 如何减慢 update() 方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30445485/

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