2013-10-07 4 views
3

LIBGDX 컨트롤러 지원을 구현하는 방법에 관해서는 분실했습니다. 여기에 세부 사항이 있습니다. http://obviam.net/index.php/getting-started-in-android-game-development-with-libgdx-create-a-working-prototype-in-a-day-tutorial-part-1/LIBGDX에서 게임 패드 컨트롤러 구현?

(내가 게임 패드를 구현하기 위해 노력하고있어) 제 4 부에서 튜토리얼에 대한 힘내는 여기에 있습니다 : : https://github.com/obviam/star-assault/tree/part4

나는했습니다

의 내가 여기 자습서를 다음있어 가정 해 봅시다 마지막 단계로 넘어 가면 실행되고 키보드를 사용하여 캐릭터와 상호 작용할 수 있습니다. 이제 캐릭터를 OUYA 또는 USB를 통해 컨트롤러를 통해 제어 가능하게 만들고 싶습니다.

다음을 읽었습니다 : http://www.badlogicgames.com/wordpress/?p=2724 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; 
} 

} 

를 기반으로 내 지금 "O"버튼을 때 나는 캐릭터가 이동해야 OUYA에로드 할 때,이 작동하는 방법의 이해 눌렀다. 그러나 아무 일도 일어나지 않습니다. 나는 뭔가를 놓친 것 같아. 눈부신 실수가 있습니까?

나는 자바와 함께 몇 년 동안 웹을 개발 해왔다. 최근에는 마이크로 콘솔에서 게임과 인터랙티브 물건을 가지고 놀기 위해 다시 자바로 돌아왔다. 나는 간단한 튜토리얼을 시작으로 그 건물을 실험하는 것이 좋은 생각 일 것이라고 생각한다. 맞습니까?

대단한 도움을 기대하십시오!

감사합니다,

+0

연결된/연결이 끊긴 메서드와 buttonDown 메서드에 일부 로깅을 추가하여 호출 여부를 확인하십시오. (나는 buttonCodes가 일부 플랫폼에서는 다소 위태 로울 수 있다고 생각한다.) –

+0

할 것이다! 내 OUYA 컨트롤러를 내 안드로이드 타블렛과 페어링하고 로깅을 통해 테스팅을 시도했지만 버튼을 누르면 언제든지 앱을 완전히 떠날 수있었습니다. 나는 몇 시간 후에 집에 올 때 OUYA 자체에서 테스트해야 할 것입니다. –

+0

@ P.T. 연결된 mothod와 buttonup/buttondown 메서드 모두에 System.out.println을 추가했는데 아무 일도 일어나지 않습니다. 다른 아이디어? 내 gameScreen 클래스에 컨트롤러 리스너 또는 기타 항목을 만들어야합니까? –

답변

5

시도는 추가 :

Controllers.addListener(this); 

직전 :

Gdx.input.setInputProcessor(this); 

setInputProcessor는 내장 된 입력 이벤트 (키 리스너를 등록 터치 이벤트 등). 컨트롤러는 외부 라이브러리이므로 별도로 초기화하고로드해야합니다.

com.badlogic.gdx.controllers.Controllers도 가져와야합니다.

+0

그것은 매력처럼 작동했습니다! 고맙습니다! 나는 내가 전에 이것을 놓쳤던 것을 볼 수있을 정도로 나의 자바를 아직도 깨끗하게하고있다! 당신은 살아있는 보호기입니다! –