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