2016-10-18 13 views
1

Game.javaKeyInput.javaという2つのクラスがあります。 int xとint yにはどのようにしてGame.javaからアクセスし、KeyInput.javaにするのですか?別のクラスの変数にアクセスする方法

Game.java

public class Game extends JFrame { 

    int x, y; 

    //Constructor 
    public Game(){ 
    setTitle("Game"); 
    setSize(300, 300); 
    setResizable(false); 
    setVisible(true); 
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    this.addKeyListener(new KeyInput()); 

    x = 150; 
    y = 150; 
    } 

    public void paint(Graphics g){ 
    g.fillRect(x, y, 15, 15); 
    } 

    public static void main(String [] args){ 
    new Game(); 
    } 
} 

KeyInput.java

public class KeyInput extends KeyAdapter { 

    public void keyPressed(KeyEvent e) { 
    int keyCode = e.getKeyCode(); 

    if(keyCode == e.VK_W) 
     y--; //Error here saying "y cannot be resolved to a variable" 
    } 
} 

答えて

2

あなたが持っている問題は、スコープです。静的変数を使用するか、アクセスする変数を含むオブジェクトへのポインタを渡すなど、これを修正する方法はたくさんあります。私はちょうど2つを与えるでしょう。

スタティック:推奨しませんが、小さなプログラムではうまくいきます。 xとyのセットは1つしか設定できません。 Gameのインスタンシエーションが2つある場合、同じ値が共有されます。

public class Game extends JFrame { 
    //make this static and public so it can be accessed anywhere. 
    public static int x, y; 
    ... 
    } 
    ... 
    public void keyPressed(KeyEvent e){ 
    int keyCode = e.getKeyCode(); 

    if(keyCode == e.VK_W) 
     Game.y--; //Static access 
    } 

パスイン方法:

public class KeyInput extends KeyAdapter { 
    Game game; //need a pointer to the original class object that holds x and y. Save it here 
    public KeyInput(Game g){ //get the object pointer when this class is created. 
    this.game = g; 
    } 

    public void keyPressed(KeyEvent e){ 
    int keyCode = e.getKeyCode(); 

    if(keyCode == e.VK_W) 
     game.y--; //now a local variable we can access 
    } 
} 


public class Game extends JFrame { 
    //make these public 
    public int x, y; 

    //Constructor 
    public Game(){ 
    setTitle("Game"); 
    setSize(300, 300); 
    setResizable(false); 
    setVisible(true); 
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    this.addKeyListener(new KeyInput(this)); //pass the pointer in here 
... 
+0

どうもありがとうございました! – Sean

+0

ねえ、問題ありません! :) – ldmtwo

関連する問題