我不能和我的演员一起拍摄。当我按住拍摄按钮时,我的演员面前有一颗子弹,但它没有移动。我不知道如何让它像陨石一样移动......
public class Game implements ApplicationListener {
Texture meteoriteImage;
Texture shipImage;
Texture bulletImage;
SpriteBatch batch;
OrthographicCamera camera;
Rectangle ship;
Rectangle bullet;
Array<Rectangle> meteorites;
long lastMeteoriteTime;
public void create() {
meteoriteImage = new Texture(Gdx.files.internal("meteorite.png"));
shipImage = new Texture(Gdx.files.internal("ship.png"));
bulletImage = new Texture(Gdx.files.internal("bullet.png"));
camera = new OrthographicCamera();
camera.setToOrtho(false, 800, 480);
batch = new SpriteBatch();
ship = new Rectangle();
ship.x = 800 - 48;
ship.y = 480 / 2 - 48 / 2;
ship.width = 48;
ship.height = 48;
meteorites = new Array<Rectangle>();
spawnMeteorite();
}
private void spawnMeteorite() {
Rectangle meteorite = new Rectangle();
meteorite.y = MathUtils.random(0, 480-48);
meteorite.x = 0;
meteorite.width = 48;
meteorite.height = 48;
meteorites.add(meteorite);
lastMeteoriteTime = TimeUtils.nanoTime();
}
public void render() {
Gdx.gl.glClearColor(0, 0, 0.2f, 1);
Gdx.gl.glClear(GL10.GL_COLOR_BUFFER_BIT);
camera.update();
batch.setProjectionMatrix(camera.combined);
batch.begin();
batch.draw(shipImage, ship.x, ship.y);
for(Rectangle meteorite: meteorites) {
batch.draw(meteoriteImage, meteorite.x, meteorite.y);
}
batch.end();
if(Gdx.input.isKeyPressed(Keys.DPAD_UP)) ship.y += 200 * Gdx.graphics.getDeltaTime();
if(Gdx.input.isKeyPressed(Keys.DPAD_DOWN)) ship.y -= 200 * Gdx.graphics.getDeltaTime();
if(Gdx.input.isKeyPressed(Keys.BUTTON_Y)){
bullet = new Rectangle();
bullet.x = ship.x - 48;
bullet.y = ship.y;
bullet.width = 48;
bullet.height = 48;
batch.begin();
batch.draw(bulletImage, bullet.x, bullet.y);
batch.end();
while(bullet.x > 0){
bullet.x -= 200 * Gdx.graphics.getDeltaTime();
}
}
if(ship.x < 0) ship.x = 0;
if(ship.x > 800 - 48) ship.x = 800 - 48;
if(ship.y < 0) ship.y = 0;
if(ship.y > 480 - 48) ship.y = 480 - 48;
if(TimeUtils.nanoTime() - lastMeteoriteTime > 1000000000) spawnMeteorite();
Iterator<Rectangle> iter = meteorites.iterator();
while(iter.hasNext()) {
Rectangle meteorite = iter.next();
meteorite.x += 200 * Gdx.graphics.getDeltaTime();
if(meteorite.x + 48 < 0) iter.remove();
if(meteorite.overlaps(ship)) {
iter.remove();
}
}
}
public void dispose() {
shipImage.dispose();
meteoriteImage.dispose();
bulletImage.dispose();
batch.dispose();
}
public void resize(int width, int height) {
}
public void pause() {
}
public void resume() {
}
}
答案 0 :(得分:1)
这个 - 不是你想要的。
while(bullet.x > 0){
bullet.x -= 200 * Gdx.graphics.getDeltaTime();
}
你真的希望子弹位置能够动画吗?因此,您需要将项目符号作为对象添加到世界中,然后在每次调用“Render”时更改它的x位置。否则你根本看不到它的动画......
答案 1 :(得分:0)
似乎你错过了在子弹循环中检查哪个陨石,试试这个:
while(iter2.hasNext()) {
Rectangle bullet = iter2.next();
bullet.x -= 200 * Gdx.graphics.getDeltaTime();
if(bullet.x + 48 < 0) iter2.remove();
iter = meteorites.iterator();
while(iter.hasNext()) {
if(bullet.overlaps(iter.next())) {
iter2.remove();
iter.remove();
}
}
}
要提醒的是,不要简单地将原始陨石循环放入子弹循环中,因为您在两个循环中都有翻译代码。