inputprocessor用法

beq87vna  于 2021-07-09  发布在  Java
关注(0)|答案(1)|浏览(315)

我是一个新的游戏开发,并试图建立一个简单的2d游戏与多个屏幕(主菜单,播放屏幕,…)。在playscreen中,我正在渲染动画,并希望检查是否触摸/单击了该动画。如何检查动画中是否发生了触摸?既然im有多个屏幕,是单独使用屏幕和inputprocessor(所有屏幕使用相同的输入处理器)还是在同一个类中(每个屏幕使用自己的处理器)更好?我当前的代码如下所示:

public class InputHandler implements InputProcessor {
private Handler h;
public boolean touch = false;

public InputHandler(Handler h) {
    this.h = h;
}

@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 touchDown(int screenX, int screenY, int pointer, int button) {
    touch = true;
    return false;
}

@Override
public boolean touchUp(int screenX, int screenY, int pointer, int button) {
    touch = false;
    return false;
}

播放屏幕类:

public class PlayScreen implements Screen {
private SpriteBatch batch;
Animation monster;
Texture background;
public TextureAtlas atlas;
TextureRegion region;
float stateTime;
private int height;
private Viewport viewport;
private Camera camera;
private int width;
private float elapsedTime = 0;
ShapeRenderer shapeRenderer;
private Handler h;
private Stage stage;
private InputProcessor processor;

public PlayScreen(Handler h){
    this.h = h;
    batch = h.batch;
    camera = h.camera;
    viewport = h.viewport;
    height = h.height;
    width = h.width;
    stage = new Stage(viewport,batch);
    stateTime = 0f;
    background = new Texture("hd/hd_background.png");
    atlas = new TextureAtlas(Gdx.files.internal("mons1.txt"));
    monster = new Animation(1/15f, atlas.getRegions());

}

@Override
public void show() {
input.setInputProcessor(processor);
}

@Override
public void render(float delta) {

    Gdx.gl.glClearColor(0, 0, 0, 1);
    Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
    batch.begin();

    batch.draw(background ,0,0,width, height);
    elapsedTime += Gdx.graphics.getDeltaTime();

    region = (TextureRegion) monster.getKeyFrame(elapsedTime, true);
    batch.draw(region, width/2-region.getRegionWidth()/2,height - region.getRegionHeight() -30);
}

@Override
public void resize(int width, int height) {
    h.viewport.update(width, height);
    camera.update();
    h.viewport.apply();

}

@Override
public void dispose() {
    background.dispose();
    atlas.dispose();
    batch.dispose();
}

我还使用单独的类处理程序,我从中获取所有游戏数据(我也不确定这是否是最佳决策)。

bpsygsoo

bpsygsoo1#

最好的使用方法 InputProcessor 是实现每个 Screen . public class PlayScreen implements Screen, InputProcessor {} 现在你有一个班级 Screen 和一个 InputProcessor . 单击事件的相关方法是 touchDown 方法。
使用 screenX 以及 screenY 值您可以使用一些基本数学来确定单击是否在动画中。
祝你好运!如果您有任何问题,请随时发表评论下面!

相关问题