java - Implementing a Gamepad Controller in LIBGDX? -
i'm @ loss how implement libgdx controller support. here details.
let's i'm following tutorial here: http://obviam.net/index.php/getting-started-in-android-game-development-with-libgdx-create-a-working-prototype-in-a-day-tutorial-part-1/
the git tutorial @ part 4 (where i'm trying implement gamepad) here: https://github.com/obviam/star-assault/tree/part4
i've made final step , it's running , can interact character using keyboard. want make character controllable via controller either ouya or through usb.
i have read following: http://www.badlogicgames.com/wordpress/?p=2724 have added jar files main project , have ordered , exported. have modified gamescreen class follows:
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; } } so based on understand of how works, right when load on ouya character should jump when "o" button pressed. nothing happens. think i'm missing something. glaring mistakes in implementation?
where i'm @ java i've been web developing number of years , have returned java again play around games , interactive stuff on micro consoles. figure starting off simple tutorial , experimenting building on idea, right?
look forward getting awesome help!
thanks,
phil
try adding:
controllers.addlistener(this); right before:
gdx.input.setinputprocessor(this); setinputprocessor registers listeners built-in input events (keys, touch events, etc). controllers external library, , needs initialized , loaded separately.
you need import com.badlogic.gdx.controllers.controllers, too.
Comments
Post a Comment