2010-09-06 2 views
0

Quand j'ai fait simples jeux de fil simple, je mis en œuvre la logique du jeu de la même manière que le Space Invaders tutorial de plus en plus célèbre fait comme indiqué ci-dessous:thread séparé pour Java logique de jeu

public static void main(String[] args) { //This is the COMPLETE main method 
    Game game = new Game(); // Creates a new game. 
    game.gameLogic(); // Starts running game logic. 
} 

Maintenant, je veux essayer de exécuter ma logique sur un fil séparé mais j'ai des problèmes. Ma logique de jeu est dans un fichier de classe distinct qui ressemble à ceci:

public class AddLogic implements Runnable { 

    public void logic(){ 
     //game logic goes here and repaint() is called at end 
    } 

    public void paintComponent(Graphics g){ 
     //paints stuff 
    } 

    public void run(){ 
     game.logic(); //I know this isn't right, but I cannot figure out what to put here. Since run() must contain no arguments I don't know how to pass the instance of my game to it neatly. 
    } 

}

... Et ma principale méthode ressemble à ceci:

public static void main(String[] args) { //This is the COMPLETE main method 
    Game game = new Game(); // Creates a new game. 
    Thread logic = new Thread(new AddLogic(), "logic"); //I don't think this is right either 
    logic.start(); 

} 

Comment appeler correctement la méthode logique() sur l'instance de mon jeu?

Répondre

4

vous pouvez simplement passer votre instance de jeu en utilisant un constructeur ou un poseur comme dans

public GameThread extends Thread { 
    private Game game; 

    GameThread(Game game) { 
    this.game = game; 
    } 

    public void run() { 
    game.logic(); 
    } 
} 

public static void main(String[] args) { 
    GameThread thread = new GameThread(new Game()); 
    thread.start(); 
} 
+0

Voilà! J'étais si proche de ça il y a un petit moment, mais j'avais un '=' entre 'Game' et' game' où vous avez écrit 'Private Game '; DOH! – ubiquibacon

1

y Java est vraiment rouillé, donc en remettre aux autres utilisateurs s'il y a une différence.

Ce que vous avez m'a l'air bien. Lorsque vous appelez start(), un nouveau contexte de thread est créé et appelle run(). Dans run(), vous appelez la fonction souhaitée.

Ce qui vous manque, c'est que le thread n'a aucune connaissance du jeu. Ma préférence personnelle serait d'implémenter un thread à l'intérieur du jeu qui met la logique sur son propre thread qui est un membre du jeu de classe.

Questions connexes