2016-12-16 3 views
-1

Bon, alors je fais un jeu dans lequel il pleut des chiens. J'ai créé les chiens avec une rangée et les ai ajoutés à ma classe principale avec un nouveau fil et tous mais les chiens ne bougent pas et je ne peux pas comprendre pourquoi. Quelqu'un peut-il m'aider à repérer mon erreur? (NOTE: Ce n'est pas devoirs, que je fais avec mon temps libre)Java - Array d'objets ne bougera pas

est ici un peu de mon code: Classe principale:

// instance variables 
private double width, height; 
Dogs[] doggo = new Dogs[4]; // an array of dogs 
int count = 3; // counts the amount of lives remaining 
int counter = 0; // counts how many dogs are saved 

public void drawGraphics(){ 
    // draw the dogs 
    for (int i = 0; i < 5; i++) { 
     double x = rand.nextDouble(SIZE, (getWidth()-10)-SIZE); 

     doggo[i] = new Dogs(SIZE, speed, this); 
     // add dog to top of the window 
     add(doggo[i], x, 0); 
     new Thread(doggo[i]).start(); // animate the dogs 
     //System.out.println("try"); 
    } 

    for (int i = 0; i < 5; i++) { 
     double x = rand.nextDouble(10, (getWidth()-10)-SIZE); 

     doggo[i] = new Dogs(SIZE, speed*2, this); 
     // add dog to top of the window 
     add(doggo[i], x, 0); 
     new Thread(doggo[i]).start(); // animate the dogs 
     //System.out.println("try"); 
    } 

} 

classe Chiens:

// constants 
private static final double DELAY = 50; 

// instance variables 
private double size, speed; 
DoggoRescue game; // to recognize use of dogs in DoggoRescue game 
GImage dog;  

public Dogs(double size, double speed, DoggoRescue game){ 
    // save the parameters to the instance variables 
    this.game = game; 
    this.size = size; 
    this.speed = speed; 

    // draw an image of the dog 
    dog = new GImage("Doggo.png"); 
    dog.setSize(size, size); 
    add(dog, -size/2, -size/2); 
} 

// animate the dog 
public void run(){ 
    oneTimeStep(); 
    pause(DELAY); 
} 

// called by run(), move the dog 
private void oneTimeStep(){ 
    // move dog 
    move(0, speed); 
    //System.out.println("try"); 
    pause(DELAY); 
    // call checkCollision of the main class 
    game.checkCollision(this); 
} 
+0

a juste pris un rapide coup d'oeil, pas d'analyse réelle ... mais '-size/2' semble que cela pourrait être un problème . Voulez-vous dire '--size/2' ou' (-1 * size)/2'? Et lol @ 'doggo' –

+0

Je pense que le problème est que vous exécutez le code de l'interface utilisateur sur un thread non UI, n'êtes-vous pas? – Sweeper

+0

Ce n'est pas le problème que vous recherchez, mais je ne comprends pas comment vous n'avez pas obtenu une exception IndexOutOfBoundsException pour accéder à 'doggo [4]' quand 'doggo' n'a que 4 éléments. –

Répondre

0

EDIT:

Votre classe Dogs doit implémenter Runnable afin que votre méthode run() puisse être appelée lorsque vous démarrez le thread.

Vous pouvez jeter un oeil à la documentation d'Oracle ici pour un exemple: https://docs.oracle.com/javase/tutorial/essential/concurrency/runthread.html

+0

Il devrait implémenter 'Runnable' Je pense, pas étendre' Thread' –

+0

Vous avez raison, j'ai édité ma réponse. –