Java 面向对象播放器实现libgdx

Java 面向对象播放器实现libgdx,java,android,oop,libgdx,Java,Android,Oop,Libgdx,我想对播放器的实现对象提出一些建议。 播放器可以有2个纹理,根据按下的按钮选择,例如,右箭头将在左侧显示一个纹理,而另一个纹理显示 我已经在player类中实现了接口inputprocessor,但我不知道为什么它看起来不是非常公平和动态的,所以我想从您那里得到一些建议 多谢各位 代码: 我以这种方式实现了player类,但我希望得到一些实现最佳效果的建议。我建议您对非常有用的类进行子类化,并使用它来包含player纹理。以下是实现的存根: public class Player extend

我想对播放器的实现对象提出一些建议。 播放器可以有2个纹理,根据按下的按钮选择,例如,右箭头将在左侧显示一个纹理,而另一个纹理显示

我已经在player类中实现了接口inputprocessor,但我不知道为什么它看起来不是非常公平和动态的,所以我想从您那里得到一些建议

多谢各位

代码:


我以这种方式实现了player类,但我希望得到一些实现最佳效果的建议。

我建议您对非常有用的类进行子类化,并使用它来包含player纹理。以下是实现的存根:

 public class Player extends Sprite {

    TextureAtlas textureAtlas;

    public Player(TextureAtlas atlas) {
        super(atlas.getRegions().get(0));
        textureAtlas = atlas;
    }

    public void setTexture(String textureName) {
        setRegion(textureAtlas.findRegion(textureName)));
    }

}
这是一个非常好的教程,介绍了如何使用
TextureAtlas

另外,不要实现整个
InputProcessor
,而是使用
InputAdapter
,它提供了此接口的空实现。这将是一个好消息。它可以是
播放器
类中的一个字段:

   private InputProcessor inputProcessor = new InputAdapter() {
   // Override only methods you need here
   };
当然,不要忘记注册此输入处理器:

Gdx.input.setInputProcessor(inputProcessor);

几小时后回到家,我会用例子更新我的答案

在player类中听键似乎不是一个好的练习。不久前,我在游戏中实现了一个玩家类,它是这样的:

  • 在游戏类的render方法中,您实现了调用player.up()或player.down()或例如player.jump()的关键侦听器
  • 在这些方法的player类中,例如在jump()中,可以设置纹理/动画
我将发布代码示例

public class Player {
float x;
float y;
float xSpeed;
float ySpeed;
private Animation playerRun;
private Animation playerJump;
private Animation playerStand;
private Animation current;
private Rectangle bounds;

public Player(){
    playerRun = new Animation(1/10f, Assets.atlas.findRegions("run"));
    playerRun.setPlayMode(Animation.PlayMode.LOOP);

    //set other animations in similar way

    current = playerStand;

    this.x = Gdx.graphics.getWidth()/2;
    this.y = Gdx.graphics.getHeight()/2;

    bounds = new Rectangle(x, y, 100, 100);
}

public Rectangle getBounds(){
    return bounds;
}

public void setPos(float x, float y){
    this.x = x;
    this.y = y;
    bounds.x = x;
    bounds.y = y;
}

public void changePos(float x, float y){
    this.x +=x;
    this.y +=y;
    bounds.x += x;
    bounds.y += y;
}

public void move(){
    changePos(xSpeed, ySpeed);
}

public Animation animate(){
    return current;
}

public void run(){
    current = playerRun;
    ySpeed = 0;
}

public void jump(){
    current = playerJump;
    ySpeed = 10;
}
我的游戏类中的render方法只是调用players方法:

if (Gdx.input.isTouched()){
                player.jump();
            }
哎呀,忘了最重要的部分:

batch.draw(player.animate().getKeyFrame(time += delta), player.x, player.y);

你能添加一些代码来说明你的问题吗?我不确定我是否理解你的要求。好的,但是如果我想在按键事件中的其他类中实现InputAdapter,我必须更改播放器的纹理。从这里我获取对象播放器。我不知道我是否解释过well@dvdfrosiii然后您必须以某种方式将Player的引用传递到此类。请尝试在Player类内设置输入处理器并重写函数。例如
Gdx.input.setInputProcessor(新的InputAdapter(){@Override public boolean keyDown(int keycode){})
在这种情况下,播放机是唯一可以捕捉输入的东西,我宁愿从屏幕上获取输入(这正是我个人所做的,并在
show()
方法中将当前屏幕设置为输入处理器),然后执行,尽管如果您有正交摄影机,则只需要使用“camera.unject”而不是拥有自己的输入转换。
batch.draw(player.animate().getKeyFrame(time += delta), player.x, player.y);