【发布时间】:2014-04-24 02:30:48
【问题描述】:
我正在使用 LibGdx 创建一个 Android 游戏。这是一个平台游戏,地图是基于平铺的。为了测试玩家的动作,我使用了按键输入,游戏的桌面版本运行良好。我在scene2d 中创建了一些按钮并将它们作为演员添加到场景中,以便在Android 设备上玩游戏时具有移动按钮。这些按钮的工作方式如“System.out.print”所示。 问题是:按钮和播放器分别在不同的类中创建。我似乎无法从持有按钮的类中修改 Player 的速度(以及运动)。为此,我需要将速度和速度等更改为静态,这会给我在 Android 设备上带来奇怪的错误(播放器不会显示,或在一帧后消失)。我不确定如何解决此问题以及此错误的实际原因是什么。下面是一些不同类的代码:
Main Class (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);
}
游戏课
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,但我不知道它如何修改玩家的速度。欢迎任何帮助。
【问题讨论】:
标签: java android libgdx sprite