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에로드 할 때,이 작동하는 방법의 이해 눌렀다. 그러나 아무 일도 일어나지 않습니다. 나는 뭔가를 놓친 것 같아. 눈부신 실수가 있습니까?
나는 자바와 함께 몇 년 동안 웹을 개발 해왔다. 최근에는 마이크로 콘솔에서 게임과 인터랙티브 물건을 가지고 놀기 위해 다시 자바로 돌아왔다. 나는 간단한 튜토리얼을 시작으로 그 건물을 실험하는 것이 좋은 생각 일 것이라고 생각한다. 맞습니까?
대단한 도움을 기대하십시오!
감사합니다,
필
연결된/연결이 끊긴 메서드와 buttonDown 메서드에 일부 로깅을 추가하여 호출 여부를 확인하십시오. (나는 buttonCodes가 일부 플랫폼에서는 다소 위태 로울 수 있다고 생각한다.) –
할 것이다! 내 OUYA 컨트롤러를 내 안드로이드 타블렛과 페어링하고 로깅을 통해 테스팅을 시도했지만 버튼을 누르면 언제든지 앱을 완전히 떠날 수있었습니다. 나는 몇 시간 후에 집에 올 때 OUYA 자체에서 테스트해야 할 것입니다. –
@ P.T. 연결된 mothod와 buttonup/buttondown 메서드 모두에 System.out.println을 추가했는데 아무 일도 일어나지 않습니다. 다른 아이디어? 내 gameScreen 클래스에 컨트롤러 리스너 또는 기타 항목을 만들어야합니까? –