Java 在LIBGDX中实现Gamepad控制器?

Java 在LIBGDX中实现Gamepad控制器?,java,libgdx,ouya,Java,Libgdx,Ouya,我不知道如何实现LIBGDX控制器支持。下面是细节 假设我在这里遵循教程: 第4部分教程的Git(我正在尝试实现gamepad)如下所示: 我已经完成了最后一步,现在它正在运行,我可以使用键盘与角色交互。我现在想让这个角色可以通过一个控制器控制,或者是通过OUYA,或者是通过USB 我读了以下内容: 我已将jar文件添加到主项目中,并已订购和导出。 我现在修改了GameScreen类,如下所示: import com.badlogic.gdx.Application.ApplicationTyp

我不知道如何实现LIBGDX控制器支持。下面是细节

假设我在这里遵循教程:

第4部分教程的Git(我正在尝试实现gamepad)如下所示:

我已经完成了最后一步,现在它正在运行,我可以使用键盘与角色交互。我现在想让这个角色可以通过一个控制器控制,或者是通过OUYA,或者是通过USB

我读了以下内容: 我已将jar文件添加到主项目中,并已订购和导出。 我现在修改了GameScreen类,如下所示:

import com.badlogic.gdx.Application.ApplicationType;
import com.badlogic.gdx.Gdx;
import com.badlogic.gdx.Input.Keys;
import com.badlogic.gdx.InputProcessor;
import com.badlogic.gdx.Screen;
import com.badlogic.gdx.controllers.Controller;
import com.badlogic.gdx.controllers.PovDirection;
import com.badlogic.gdx.controllers.mappings.Ouya;
import com.badlogic.gdx.graphics.GL10;
import com.badlogic.gdx.math.Vector3;


public class GameScreen implements Screen, InputProcessor, ControllerListener {

private World           world;
private WorldRenderer   renderer;
private CharacterController charactercontroller;

private int width, height;

@Override
public void show() {
    world = new World();
    renderer = new WorldRenderer(world, false);
    charactercontroller = new CharacterController(world);
    Gdx.input.setInputProcessor(this);
}

@Override
public void render(float delta) {
    Gdx.gl.glClearColor(0.1f, 0.1f, 0.1f, 1);
    Gdx.gl.glClear(GL10.GL_COLOR_BUFFER_BIT);

    charactercontroller.update(delta);
    renderer.render();
}

@Override
public void resize(int width, int height) {
    renderer.setSize(width, height);
    this.width = width;
    this.height = height;
}

@Override
public void hide() {
    Gdx.input.setInputProcessor(null);
}

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

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

@Override
public void dispose() {
    Gdx.input.setInputProcessor(null);
}

// * InputProcessor methods ***************************//

@Override
public boolean keyDown(int keycode) {
    if (keycode == Keys.LEFT)
        charactercontroller.leftPressed();
    if (keycode == Keys.RIGHT)
        charactercntroller.rightPressed();
    if (keycode == Keys.UP)
        charactercontroller.jumpPressed();
    return true;
}

@Override
public boolean keyUp(int keycode) {
    if (keycode == Keys.LEFT)
        charactercontroller.leftReleased();
    if (keycode == Keys.RIGHT)
        charactercontroller.rightReleased();
    if (keycode == Keys.UP)
        charactercontroller.jumpReleased();
    return true;
}

@Override
public boolean keyTyped(char character) {
    // TODO Auto-generated method stub
    return false;
}

@Override
public boolean touchDown(int x, int y, int pointer, int button) {
    if (!Gdx.app.getType().equals(ApplicationType.Android))
        return false;
    if (x < width / 2 && y > height / 2) {
        charactercontroller.leftPressed();
    }
    if (x > width / 2 && y > height / 2) {
        charactercontroller.rightPressed();
    }
    return true;
}

@Override
public boolean touchUp(int x, int y, int pointer, int button) {
    if (!Gdx.app.getType().equals(ApplicationType.Android))
        return false;
    if (x < width / 2 && y > height / 2) {
        charactercontroller.leftReleased();
    }
    if (x > width / 2 && y > height / 2) {
        charactercontroller.rightReleased();
    }
    return true;
}

@Override
public boolean touchDragged(int x, int y, int pointer) {
    // TODO Auto-generated method stub
    return false;
}

@Override
public boolean mouseMoved(int screenX, int screenY) {
    // TODO Auto-generated method stub
    return false;
}

@Override
public boolean scrolled(int amount) {
    // TODO Auto-generated method stub
    return false;
}

@Override
public void connected(Controller controller) {
    // TODO Auto-generated method stub

}

@Override
public void disconnected(Controller controller) {
    // TODO Auto-generated method stub

}

@Override
public boolean buttonDown(Controller controller, int buttonCode) {
    if (buttonCode == Ouya.BUTTON_O) {
                charactercontroller.jumpPressed();
            }
    return false;
}

@Override
public boolean buttonUp(Controller controller, int buttonCode) {
    if (buttonCode == Ouya.BUTTON_O) {
                charactercontroller.jumpReleased();
            }
    return false;
}

@Override
public boolean axisMoved(Controller controller, int axisCode, float value) {
    // TODO Auto-generated method stub
    return false;
}

@Override
public boolean povMoved(Controller controller, int povCode,
        PovDirection value) {
    // TODO Auto-generated method stub
    return false;
}

@Override
public boolean xSliderMoved(Controller controller, int sliderCode,
        boolean value) {
    // TODO Auto-generated method stub
    return false;
}

@Override
public boolean ySliderMoved(Controller controller, int sliderCode,
        boolean value) {
    // TODO Auto-generated method stub
    return false;
}

@Override
public boolean accelerometerMoved(Controller controller,
        int accelerometerCode, Vector3 value) {
    // TODO Auto-generated method stub
    return false;
}

}
导入com.badlogic.gdx.Application.ApplicationType;
导入com.badlogic.gdx.gdx;
导入com.badlogic.gdx.Input.Keys;
导入com.badlogic.gdx.InputProcessor;
导入com.badlogic.gdx.Screen;
导入com.badlogic.gdx.controllers.Controller;
导入com.badlogic.gdx.controllers.PovDirection;
导入com.badlogic.gdx.controllers.mappings.Ouya;
导入com.badlogic.gdx.graphics.GL10;
导入com.badlogic.gdx.math.Vector3;
公共类GameScreen实现Screen、InputProcessor、ControllerListener{
私人世界;
私人世界银行;
专用字符控制器字符控制器;
私人int宽度、高度;
@凌驾
公开展览({
世界=新世界();
渲染器=新世界渲染器(世界,false);
charactercontroller=新的charactercontroller(世界);
Gdx.input.setInputProcessor(此);
}
@凌驾
公共无效渲染(浮动增量){
Gdx.gl.glClearColor(0.1f、0.1f、0.1f、1);
Gdx.gl.glClear(GL10.gl\u颜色\u缓冲\u位);
charactercontroller.update(增量);
render.render();
}
@凌驾
公共空心调整大小(整型宽度、整型高度){
设置大小(宽度、高度);
这个。宽度=宽度;
高度=高度;
}
@凌驾
公共空间隐藏(){
Gdx.input.setInputProcessor(null);
}
@凌驾
公共空间暂停(){
//TODO自动生成的方法存根
}
@凌驾
公众简历(){
//TODO自动生成的方法存根
}
@凌驾
公共空间处置(){
Gdx.input.setInputProcessor(null);
}
//*输入处理器方法***************************//
@凌驾
公共布尔键关闭(int-keycode){
if(keycode==Keys.LEFT)
charactercontroller.leftPressed();
if(keycode==Keys.RIGHT)
charactercntroller.rightPressed();
if(keycode==Keys.UP)
charactercontroller.jumpPressed();
返回true;
}
@凌驾
公共布尔键控(int-keycode){
if(keycode==Keys.LEFT)
charactercontroller.leftReleased();
if(keycode==Keys.RIGHT)
charactercontroller.rightReleased();
if(keycode==Keys.UP)
charactercontroller.jumpReleased();
返回true;
}
@凌驾
公共布尔键类型(字符字符){
//TODO自动生成的方法存根
返回false;
}
@凌驾
公共布尔接地(整数x、整数y、整数指针、整数按钮){
如果(!Gdx.app.getType().equals(ApplicationType.Android))
返回false;
如果(xheight/2){
charactercontroller.leftPressed();
}
如果(x>宽度/2&&y>高度/2){
charactercontroller.rightPressed();
}
返回true;
}
@凌驾
公共布尔补色(整数x、整数y、整数指针、整数按钮){
如果(!Gdx.app.getType().equals(ApplicationType.Android))
返回false;
如果(xheight/2){
charactercontroller.leftReleased();
}
如果(x>宽度/2&&y>高度/2){
charactercontroller.rightReleased();
}
返回true;
}
@凌驾
公共布尔值(整数x,整数y,整数指针){
//TODO自动生成的方法存根
返回false;
}
@凌驾
公共布尔mouseMoved(int-screenX,int-screenY){
//TODO自动生成的方法存根
返回false;
}
@凌驾
公共布尔滚动(整数金额){
//TODO自动生成的方法存根
返回false;
}
@凌驾
已连接的公用网络(控制器){
//TODO自动生成的方法存根
}
@凌驾
公共无效已断开(控制器){
//TODO自动生成的方法存根
}
@凌驾
公共布尔buttonDown(控制器,int buttonCode){
if(buttonCode==Ouya.BUTTON\u O){
charactercontroller.jumpPressed();
}
返回false;
}
@凌驾
公共布尔buttonUp(控制器,int buttonCode){
if(buttonCode==Ouya.BUTTON\u O){
charactercontroller.jumpReleased();
}
返回false;
}
@凌驾
公共布尔axisMoved(控制器、int axisCode、浮点值){
//TODO自动生成的方法存根
返回false;
}
@凌驾
公共布尔povMoved(控制器、int povCode、,
POV方向值){
//TODO自动生成的方法存根
返回false;
}
@凌驾
公共布尔xSliderMoved(控制器控制器、int幻灯片代码、,
布尔值){
//TODO自动生成的方法存根
返回false;
}
@凌驾
公共布尔ySliderMoved(控制器控制器、int滑码、,
布尔值){
//TODO自动生成的方法存根
返回false;
}
@凌驾
公共布尔加速度计已移动(控制器,
内部加速计代码,矢量3值){
//TODO自动生成的方法存根
返回false;
}
}
因此,根据我对其工作原理的理解,现在当我将其加载到OUYA上时,当按下“O”按钮时,角色应该会跳转。但什么也没发生。我想我错过了什么。在执行过程中有任何明显的错误吗

我使用Java的地方是,我从事web开发已有多年,最近又回到了Java,在微型控制台上玩游戏和交互式东西。我想从一个简单的教程开始,并在它的基础上进行实验将是一个好主意,对吗

期待得到一些很棒的帮助

<
Controllers.addListener(this);
Gdx.input.setInputProcessor(this);