1

この簡単なコードで使ってみたところ、JInput はコントローラーを自動的に上下させます。IT は、input.isControllerUp(Input.ANY_CONTROLLER) が true として開始されるようです! どうすればこれを修正できますか?

import org.newdawn.slick.AppGameContainer;
import org.newdawn.slick.BasicGame;
import org.newdawn.slick.Color;
import org.newdawn.slick.GameContainer;
import org.newdawn.slick.Graphics;
import org.newdawn.slick.Input;
import org.newdawn.slick.SlickException;


public class Test1 extends BasicGame{
    float x = 300;
    float y = 300;

    public Test1()
    {
        super("Controller Test 1");
    }

    @Override
    public void init(GameContainer gc) 
            throws SlickException {
    }

    public void updateControler(GameContainer gc){
        Input input = gc.getInput();


            System.out.println("input.isControllerUp(Input.ANY_CONTROLLER)" + input.isControllerUp(Input.ANY_CONTROLLER));

            if(input.isKeyDown(Input.KEY_UP) || input.isControllerUp(Input.ANY_CONTROLLER)) {
                y--;
            }

            else if(input.isKeyDown(Input.KEY_DOWN) || input.isControllerDown(Input.ANY_CONTROLLER)) {
                y++;
            }

            else if(input.isKeyDown(Input.KEY_LEFT) || input.isControllerLeft(Input.ANY_CONTROLLER)) {
                x--;
            }

            else if(input.isKeyDown(Input.KEY_RIGHT) || input.isControllerRight(Input.ANY_CONTROLLER)) {
                x++;
            }
    }

    @Override
    public void update(GameContainer gc, int delta) 
            throws SlickException     
    {;
        updateControler(gc);
    }


    public void render(GameContainer gc, Graphics g) 
            throws SlickException 
    {   
        g.setColor(Color.red);
        g.fillRect(x,y,50,50);
    }

    public static void main(String[] args) 
            throws SlickException
    {
         AppGameContainer app = 
            new AppGameContainer(new Test1());

         app.setDisplayMode(800, 600, false);
         app.start();
    }
}
4

2 に答える 2

0

同じ問題を抱えていたのでこれを少し調べた後、問題が何であるかを説明する次のリンクを見つけました: http ://www.java-gaming.org/topics/jinput-is-awsome-i-want-it- s-babies-but-a-slight-issue / 21594 / msg / 176751 / view.html

基本的に、一部のコントローラーは、ゼロ以外の軸の一部から開始します。上記の回避策は、ゲームの開始時にフラグを設定し、軸の値を確認することです。いずれかの軸が移動されるか、ボタンが押されるまで、すべてのコントローラー入力を無視します。軸またはボタンの状態が元の値から変更されたら、フラグをクリアして入力の受け入れを開始します。

于 2012-01-30T19:08:10.863 に答える
0

入力はJInputのクラスではなく、slickライブラリから取得されます。JInputを直接使用していますが、同様の問題はありません。

于 2010-06-30T16:17:00.350 に答える