当前位置: 首页 > 知识库问答 >
问题:

LibGDX,flappy bird克隆,创建按钮

步胜
2023-03-14

我正在开发一个flappy bird克隆,我真的被我想要创建的按钮卡住了。对不起,我知道这是一个基本问题,但我是初学者,我真的需要你的帮助。所以,游戏已经基本完成了,但是我想做一个按钮来做同样的事情,而不是触摸整个屏幕让一只鸟跳起来。这是我的InPurthandler课程:

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个答案

任伟
2023-03-14

Wolfish的想法是对的。翻译成Libgdx框架如下:

    btnBounce.addListener( new ClickListener() {             
        @Override
        public void clicked(InputEvent event, float x, float y) {
            bird.bounce();
        };
    });
呼延辰龙
2023-03-14

您几乎可以摆脱任何引用一般触摸输入的东西。完成此操作后,您需要让按钮的OnClick()方法调用“反弹”小鸟的方法。如果您给这个函数一个自己的方法,它应该相对容易。

为了摆脱“为你做”,我将向您展示一个C#示例:

boingButton_Click(Object sender, EventArgs e)
{
    bird.Bounce();
}

以及这样的反弹方法:

Bounce()
{
    bird.Height += 4;
    bird.Descend();
}

这将是假设你有一个方法的鸟的下降.与按钮的优点是,理想情况下,你不应该需要任何重载为它的方法,虽然我可能是错误的Java。

 类似资料:
  • 我开始在libgdx中开发terraria克隆,并生成了图块。图块被分成16x16的块,但是生成所有的块需要太长的时间。目前,我正在生成400个块(102400个块)。我是这样产生这些块的: 区块类内部的平铺生成代码: 生成一个如此大小的世界大约需要2分钟。我知道这是一个很大的数字,但我很好奇Terraria(或任何其他克隆)是如何设法使时间变小的。谢谢! 编辑:这是块类(http://paste

  • 所以,我正在开发一个flappy bird克隆。我设计了一个按钮,可以让鸟弹跳。我还想为这个按钮画一些东西(在这一点上完全不相关)。但不是每次按下按钮时。我已经试过了: 但这就是我现在想要的。我特别想在第一次按下按钮时画一些东西。我希望你能理解我的问题。谢谢你的帮助。

  • 问题内容: 我想知道如何创建JSON(JS)对象然后克隆它。 问题答案: 如何在javascript / jquery中创建JSON对象? 没有什么像JSON 对象 。JSON代表 JavaScript Object Notation ,基本上是一个字符串,它编码类似于JavaScript对象常识的信息。 但是,您可以使用创建这种编码(这将导致 字符串 ),请参见JavaScript中的JSON。

  • 问题内容: 我想创建一个在用户将鼠标悬停或单击时会更改的按钮。我创建了以下变量 我不知道该怎么办,如何加载图像?如何将文字写入按钮?如何实现事件/效果(悬停,单击)? 如果有人可以为按钮编写一些示例代码,那将非常有帮助。 问题答案: 按钮只是libgdx中的一个actor。要渲染一个演员,您可以使用一个包含屏幕上所有演员的舞台,渲染它们并对其进行更新。我假设您想要一个带有文本的按钮,因此您应该使用

  • Javassist的API似乎允许我们创建类中声明的类初始值设定项(即静态构造函数)的精确副本: 但是,该副本还包括(公共/私有)静态最终字段。例如,以下类的静态构造函数: 事实上是: 因此,静态构造函数的精确副本也将包括对最终字段“名称”的调用。 有没有办法创建不包含对final字段的调用的静态构造函数的副本? --谢谢

  • 本文向大家介绍kvm虚拟机的创建与克隆操作方法,包括了kvm虚拟机的创建与克隆操作方法的使用技巧和注意事项,需要的朋友参考一下 前言 这篇文章给大家介绍了kvm虚拟机的创建与克隆,下面话不多说,来看看详细的操作步骤 一、创建虚拟机: 二、克隆虚拟机: KVM虚拟机的克隆,我们可以分以下几步:      1、 使用virt-clone命令进行克隆      2、 通过virsh edit命令修改克隆