LibGDX, клон летучей птицы, создающий КНОПКУ
Я занимаюсь разработкой клона с дряблой птицей, и я действительно застрял с этой кнопкой, которую хочу создать. Извините, я знаю, что это основной вопрос, но я новичок, и мне очень нужна ваша помощь. Итак, игра в значительной степени закончена, но вместо того, чтобы касаться экрана по всей птице, я хочу сделать кнопку, которая будет делать то же самое. Вот мой класс InputHandler:
public class InputHandler implements InputProcessor {
private Bird myBird;
private GameWorld myWorld;
// Ask for a reference to the Bird when InputHandler is created.
public InputHandler(GameWorld myWorld) {
// myBird now represents the gameWorld's bird.
this.myWorld = myWorld;
myBird = myWorld.getBird();
}
@Override
public boolean touchDown(int screenX, int screenY, int pointer, int button) {
if (myWorld.isReady()) {
myWorld.start();
}
myBird.onClick();
if (myWorld.isGameOver() || myWorld.isHighScore()) {
// Reset all variables, go to GameState.READ
myWorld.restart();
}
return true;
}
@Override
public boolean keyDown(int keycode) {
return false;
}
@Override
public boolean keyUp(int keycode) {
return false;
}
@Override
public boolean keyTyped(char character) {
return false;
}
@Override
public boolean touchUp(int screenX, int screenY, int pointer, int button) {
return false;
}
@Override
public boolean touchDragged(int screenX, int screenY, int pointer) {
return false;
}
@Override
public boolean mouseMoved(int screenX, int screenY) {
return false;
}
@Override
public boolean scrolled(int amount) {
return false;
}
}
Я создал сцену и актера (кнопку) в классе GameScreen (он не работает), и он отображается на экране, но я не знаю, что делать дальше. Опять же, я прошу прощения за такой основной вопрос, но мне действительно нужна ваша помощь, чтобы закончить эту игру.
public class GameScreen implements Screen {
private OrthographicCamera cam;
private int gameHeight;
Stage stage;
TextureAtlas buttonAtlas;
TextButtonStyle buttonStyle;
TextButton button;
Skin skin;
BitmapFont font;
SpriteBatch batch;
private GameWorld world;
private GameRenderer renderer;
private float runTime;
// This is the constructor, not the class declaration
public GameScreen() {
float screenWidth = Gdx.graphics.getWidth();
float screenHeight = Gdx.graphics.getHeight();
float gameWidth = 544;
float gameHeight = screenHeight / (screenWidth / gameWidth);
world = new GameWorld();
renderer = new GameRenderer(world, (int) gameHeight, (int) gameWidth);
Gdx.input.setInputProcessor(new InputHandler(world));
}
@Override
public void render(float delta) {
runTime += delta;
world.update(delta);
renderer.render(runTime);
cam = new OrthographicCamera();
cam.setToOrtho(false, 544, gameHeight);
batch = new SpriteBatch();
batch.setProjectionMatrix(cam.combined);
stage.act();
batch.begin();
stage.draw();
batch.end();
}
@Override
public void resize(int width, int height) {
System.out.println("GameScreen - resizing");
}
@Override
public void show() {
System.out.println("GameScreen - show called");
stage = new Stage (Gdx.graphics.getWidth(), Gdx.graphics.getHeight(), true);
font = new BitmapFont(Gdx.files.internal("data/font.fnt"), false);
skin = new Skin();
buttonAtlas = new TextureAtlas ("data/button.pack");
skin.addRegions(buttonAtlas);
buttonStyle = new TextButtonStyle();
buttonStyle.up = skin.getDrawable("button");
buttonStyle.over = skin.getDrawable("button - Copy");
buttonStyle.down = skin.getDrawable("button - Copy");
buttonStyle.font = font;
button = new TextButton("" ,buttonStyle);
stage.addActor(button);
}
@Override
public void hide() {
System.out.println("GameScreen - hide called");
}
@Override
public void pause() {
System.out.println("GameScreen - pause called");
}
@Override
public void resume() {
System.out.println("GameScreen - resume called");
}
@Override
public void dispose() {
// Leave blank
}
}
2 ответа
Вы можете в значительной степени избавиться от всего, что касается общего сенсорного ввода. После того, как вы это сделали, вам нужно сделать свои кнопки OnClick()
вызов метода, который "подпрыгивает" птичке. Если вы дали этой функции собственный метод, это должно быть относительно просто.
Чтобы отойти от "сделать это для вас", я покажу вам пример на C#:
boingButton_Click(Object sender, EventArgs e)
{
bird.Bounce();
}
И метод отказов как таковой:
Bounce()
{
bird.Height += 4;
bird.Descend();
}
Это предполагает, что у вас есть метод спуска птицы. Преимущество кнопки в том, что в идеале вам не нужно перегружать ее метод, хотя я могу ошибаться в Java.
Идея Волфиша верна. Переведенный в среду Libgdx будет выглядеть следующим образом:
btnBounce.addListener( new ClickListener() {
@Override
public void clicked(InputEvent event, float x, float y) {
bird.bounce();
};
});