如何在java(libgdx)中使用键盘移动精灵

如何在java(libgdx)中使用键盘移动精灵,java,keyboard,libgdx,sprite,2d-games,Java,Keyboard,Libgdx,Sprite,2d Games,我正在为学校的动机制作一个游戏,我已经制作了精灵和背景(平铺地图)。我的问题是如何使用键盘使精灵左、右、后和下移动,请大家尽快帮助我这是我的代码: public class LEVEL1 implements ApplicationListener, Screen { private Music music; private SpriteBatch batch; private Texture Sprite; private Vector2 position; private TiledMap

我正在为学校的动机制作一个游戏,我已经制作了精灵和背景(平铺地图)。我的问题是如何使用键盘使精灵左、右、后和下移动,请大家尽快帮助我这是我的代码:

public class LEVEL1 implements ApplicationListener, Screen {
private Music music;
private SpriteBatch batch;
private Texture Sprite;
private Vector2 position;
private TiledMap map;
private OrthogonalTiledMapRenderer renderer;
private OrthographicCamera camera;

@Override
public void render(float delta) {       
    Gdx.gl.glClearColor(1, 0, 0, 0);
    Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
    position.y = position.y - 5;

    // player Controls
    if(position.y < 0){
        position.y = 0;
    }

    //..................................................

    // renderer camera and map
    camera.update();
    renderer.setView(camera);
    renderer.render();
    //...................................................

//tells the computer when to start drawing textures
    batch.begin();
    batch.draw(Sprite, position.x, position.y, 50, 50);
    batch.end();
    //...................................................

    camera = new OrthographicCamera();
    camera.setToOrtho(true, 2920,950);

}

@Override
public void show() {    
    Sprite = new Texture("Sprite.png");
    batch = new SpriteBatch();
    position = new Vector2(650, Gdx.graphics.getHeight());

    map = new TmxMapLoader().load("map1.tmx");

    renderer = new OrthogonalTiledMapRenderer(map);

    camera = new OrthographicCamera();

      music = Gdx.audio.newMusic((Gdx.files.internal("GameSound.mp3")));

        music.setLooping(false);
        music.setVolume(0.5f);
        music.play();
}

@Override
public void create() {

}

@Override
public void resize(int width, int height) {
    camera.viewportWidth = width;
    camera.viewportHeight = height;
    camera.position.set(width/2f, height/3f, 0); //by default camera position on (0,0,0)
    camera.update();


}

@Override
public void render() {
    if(Gdx.input.justTouched())
        music.play();


}

@Override
public void dispose() {
    map.dispose();
    renderer.dispose();
    music.dispose();        
}

@Override
public void hide() {
    // TODO Auto-generated method stub

}

@Override
public void pause() {
    // TODO Auto-generated method stub

}

@Override
public void resume() {
    // TODO Auto-generated method stub

}
public类LEVEL1实现了ApplicationListener,Screen{
私人音乐;
专用SpriteBatch批次;
私人纹理精灵;
私有向量2位置;
私人平铺地图;
私有正交瓦片渲染器;
私人正交摄影机;
@凌驾
公共无效渲染(浮动增量){
glClearColor(1,0,0,0);
Gdx.gl.glClear(GL20.gl\u颜色\u缓冲\u位);
位置y=位置y-5;
//玩家控制
如果(位置y<0){
位置y=0;
}
//..................................................
//渲染器摄影机和贴图
camera.update();
渲染器.setView(摄像机);
render.render();
//...................................................
//告诉计算机何时开始绘制纹理
batch.begin();
批量绘制(精灵,位置x,位置y,50,50);
batch.end();
//...................................................
摄影机=新的正交摄影机();
摄影机。设置为Toortho(正确,2920950);
}
@凌驾
public void show(){
雪碧=新纹理(“Sprite.png”);
批次=新的SpriteBatch();
position=newvector2(650,Gdx.graphics.getHeight());
map=newtmxmaploader().load(“map1.tmx”);
渲染器=新的正交平铺贴图渲染器(贴图);
摄影机=新的正交摄影机();
music=Gdx.audio.newMusic((Gdx.files.internal(“GameSound.mp3”));
音乐。设置循环(错误);
音乐。设置音量(0.5f);
音乐。播放();
}
@凌驾
公共void create(){
}
@凌驾
公共空心调整大小(整型宽度、整型高度){
camera.viewportWidth=宽度;
camera.viewportHeight=高度;
camera.position.set(宽度/2f,高度/3f,0);//默认情况下相机位置在(0,0,0)上
camera.update();
}
@凌驾
公共无效呈现(){
if(Gdx.input.justTouched())
音乐。播放();
}
@凌驾
公共空间处置(){
map.dispose();
renderer.dispose();
音乐;
}
@凌驾
公共空间隐藏(){
//TODO自动生成的方法存根
}
@凌驾
公共空间暂停(){
//TODO自动生成的方法存根
}
@凌驾
公众简历(){
//TODO自动生成的方法存根
}

}对需要实施的输入事件作出反应。它具有方法
keyDown
(按键时调用)和
keydup
(按键释放时调用)。
这些方法有一个参数
keyCode
,用于定义按下/释放键的int代码。 所以你需要重写这两个方法,根据你得到的键码,你应该做些什么或者不做。 例如,要移动播放机,您可以保留一个成员
速度
,这取决于按下/释放的键。在
渲染
方法中,您需要根据经过的时间(
增量
)和
速度更新位置

要获取输入事件,您需要告诉libgdx,
InputProcessor
应该是活动的。这是通过调用
Gdx.input.setInputProcessor(您的InputProcessor)
完成的

另外,请务必阅读,您的许多问题都会在这里得到回答

编辑
一些代码:

public class Level implements ApplicationListener, InputProcessor {

    private int speedX;  // Speed in x direction
    private Vector2 position;  // Position

    private boolean keyDown(int keyCode) {
        boolean result = false;
        if (keyCode == Keys.D) {
           result = true;
           speed += 5;
        }
        else if (keyCode == Keys.A) {
            result = true;
            speed -= 5;
        }
        return result;
    }

    private boolean keyUp(int keyCode) {
        boolean result = false;
        if (keyCode == Keys.D) {
           result = true;
           speed -= 5;
        }
        else if (keyCode == Keys.A) {
            result = true;
            speed += 5;
        }
        return result;
    }

    public void render(float delta) {
         position.x += speed*delta;

         // Render here
    }
}

在这里,我举了一个使用键(上、下、左、右)移动精灵的小例子

您应该在libgdxwiki中找到更多详细信息

public class Level1 implements ApplicationListener {


    Sprite sprite;
    SpriteBatch batch;

    float spriteXposition;
    float spriteYposition;

    @Override
    public void render() { 

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

        //tells the computer when to start drawing textures
        batch.begin();
        sprite.setPosition(spriteXposition, spriteYposition);
        sprite.draw(batch);
        batch.end();

        spriteControl();

    }

    public void spriteControl() {

        if(Gdx.input.isKeyPressed(Keys.UP)) {
            spriteYposition++;
        }
        if(Gdx.input.isKeyPressed(Keys.DOWN)) {
            spriteYposition--;
        }

        if(Gdx.input.isKeyPressed(Keys.LEFT)) {
            spriteXposition--;
        }

        if(Gdx.input.isKeyPressed(Keys.RIGHT)) {
            spriteXposition++;
        }
    }


    @Override
    public void create() {

        sprite = new Sprite(new Texture(Gdx.files.internal("sprite.png")));
        batch = new SpriteBatch();
    }
}

你绝对应该用谷歌搜索这个,这是libGDX中最基本的东西之一,所以网上有很多资源。例如,看看维基上的示例项目:嗨:)我已经搜索了所有地方,但我无法让我的精灵随着键盘移动,我也不擅长编程,如果你能帮助我,请帮助:)我在链接你的页面上一步一步地解释。非常感谢你男人:),你能告诉我在添加了所有这些东西之后我的代码会是什么样子吗,我是新制作的:)plsI编辑了我的答案。请不要只是复制粘贴代码,而是考虑一下。理解代码是很重要的,否则你将一事无成。