我正在使用LibGdx创建一个Android游戏。它是一个平台游戏,地图是基于平铺的。为了测试玩家的动作,我使用了Key输入,游戏的桌面版本运行正常。我在scene2d中创建了一些按钮,并将它们作为演员添加到场景中,以便在Android设备上播放时游戏具有移动按钮。按钮的工作方式为“ System.out.print ”。 问题是:按钮和播放器都是在不同的类中创建的。我似乎无法从持有按钮的类中修改播放器的速度(以及运动)。为此,我需要将速度和速度等更改为静态,这会在Android设备上出现奇怪的错误(播放器不显示,或在帧后消失)。我不知道如何解决这个问题以及这个错误的实际原因是什么。以下是不同类的一些代码:
主类(MyGdxGame)仅包含一个按钮作为示例。
public class MyGdxGame extends Game implements ApplicationListener {
private Skin skin;
private Stage stage;
@Override
public void create() {
setScreen(new Play());
skin = new Skin(Gdx.files.internal("ui/defaultskin.json"));
stage = new Stage();
Gdx.input.setInputProcessor(stage);
//Button Right
TextButton buttonRight = new TextButton("Right", skin, "default");
buttonRight.setWidth(50f);
buttonRight.setHeight(50f);
buttonRight.setPosition(Gdx.graphics.getWidth() /2 - 250f, Gdx.graphics.getHeight()/2 - 200f);
buttonRight.addListener(new ClickListener(){
public boolean touchDown (InputEvent event, float x, float y, int pointer, int button) {
System.out.println("Hold");
return true;
}
public void touchUp (InputEvent event, float x, float y, int pointer, int button) {
System.out.print("Released");
}
});
stage.addActor(buttonRight);
}
Play Class
public class Play implements Screen {
private TiledMap map;
private OrthogonalTiledMapRenderer renderer;
private OrthographicCamera camera;
private Player player;
@Override
public void render(float delta) {
Gdx.gl.glClearColor(0, 0, 0, 1);
Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
camera.position.set(Gdx.graphics.getWidth() / 2, Gdx.graphics.getHeight() / 2, 0);
camera.update();
renderer.setView(camera);
renderer.render();
renderer.getSpriteBatch().begin();
player.draw(renderer.getSpriteBatch());
renderer.getSpriteBatch().end();
}
@Override
public void resize(int width, int height) {
camera.viewportWidth = width;
camera.viewportHeight = height;
}
@Override
public void show() {
map = new TmxMapLoader().load("maps/map.tmx");
renderer = new OrthogonalTiledMapRenderer(map);
camera = new OrthographicCamera();
player = new Player(new Sprite(new Texture("data/jack2.png")), (TiledMapTileLayer) map.getLayers().get(0));
player.setPosition(2 * player.getCollisionLayer().getTileWidth(), 10 * player.getCollisionLayer().getTileHeight());
}
玩家等级
public class Player extends Sprite implements InputProcessor{
// the movement velocity //
public Vector2 velocity = new Vector2();
public float speed = 60 * 2, gravity = 60 * 1.8f;
private boolean canJump;
private TiledMapTileLayer collisionLayer;
private String blockedKey = "blocked";
public Player(Sprite sprite, TiledMapTileLayer collisionLayer){
super(sprite);
this.collisionLayer = collisionLayer;
}
@Override
public void draw(SpriteBatch spriteBatch) {
update(Gdx.graphics.getDeltaTime());
super.draw(spriteBatch);
}
所以按钮有一个工作的ClickListener,但我不知道它如何修改玩家的速度。欢迎任何帮助。
答案 0 :(得分:0)
您只需要有一些方法可以从包含按钮的类中访问该播放器实例。在我的游戏中,我创建了一个静态的World类,可以从程序的任何地方访问。通过世界级,我可以访问播放器实例。这就是我如何做到的,你可能会找到另一种方式。你说你的程序在使某些参数静态时在android设备上有错误吗?你的意思是它编译,但它只是没有按你期望的方式工作?如果是这种情况,那么你可能只是在修改玩家的位置或速度方面存在一个错误。