アクターで撮影できません。射撃ボタンを押したままにすると、アクターの前に弾丸がありますが、動きません。どうすれば隕石のように動くのかわからない...
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() {
}
}
私はこのチュートリアルで作業しました: https://code.google.com/p/libgdx/wiki/SimpleApp