2013-05-09 2 views
-1

Je tente de créer un jeu Pong en C# avec Visual C# Express 2010. Pour la plupart, j'ai l'idée principale du jeu fini, mais j'ai un problème avec la balle bouge. J'ai créé une boucle for, comme ceci:Alors que la boucle ne fonctionne pas comme prévu dans le jeu Pong

public void ballSet() 
{ 
    if (!Values.isPaused) 
    { 
     while(true) 
     { 
      if (Values.totalTime.Elapsed.Seconds > 1) 
      { 
       Values.totalTime.Restart(); 
       ballMove(50, 50); 
      } 
     } 
    } 
} 

public void ballMove(int factorX, int factorY) 
{ 
    Values.ballLastX = ball.Location.X; 
    Values.ballLastY = ball.Location.Y; 
    this.ball.Location = new Point(this.ball.Location.X + factorX, this.ball.Location.Y + factorY); 
} 

Le "ballMove (50, 50);" est juste à des fins de test pour le moment. Le problème est que lorsque ballSet() est appelé, le formulaire semble se fermer avec un code de 0, ce qui signifie qu'il n'y a pas eu d'erreur. J'appelle ballSet() ici.

public Pong() 
{ 
    InitializeComponent(); 
    ballSet(); 
    Values.totalTime.Start(); 
} 

Je l'ai déjà vérifié et le programme ne fonctionne un peu lorsque je retire la boucle while dans ballSet(), ainsi que l'instruction if vérification du chronomètre (Values.totalTime est un chronomètre). Évidemment, puisque la boucle while est mise en commentaire, ballMove() n'est appelée qu'une seule fois, et la balle se déplace une fois et s'arrête.

Est-ce que quelqu'un sait comment résoudre ce problème? Je veux que la balle bouge constamment, tout en ayant la possibilité d'effectuer d'autres tâches telles que déplacer la chauve-souris dans Pong.

C'est la sortie que je peux vous donner lorsque vous utilisez Pong.

http://pastebin.com/nj1pdg3U

+1

On dirait que vous démarrez la minuterie après avoir appelé ballset. Si vous ne le lancez pas dans la fonction initialize, elle peut être nulle. –

+0

en démarrant la minuterie avant d'appeler ballSet() ne change rien. – LeChosenOne

Répondre

2

En regardant votre code, la boucle while ne prendra jamais fin. Je sais que ce n'est pas votre comportement signalé, mais essayez d'échanger ballSet() et Values.totalTime.Start(); autour.

Comme si:

Values.totalTime.Start(); 
ballSet(); 

En effet, (en théorie) l'appel à ballSet() attendra un retour, et le compteur de totalTime ne démarrera jamais, entrant donc jamais votre bloc IF dans la boucle .

+0

Pong() lit maintenant ceci: public Pong() { InitializeComponent(); Values.totalTime.Start(); ballSet(); } Je reçois cette sortie lors du débogage, cependant: Le thread 'vshost.LoadReference' (0x1b74) est sorti avec le code 0 (0x0). – LeChosenOne

+0

Pouvez-vous mettre un point d'arrêt au début du code, et utilisez 'F10' pour le parcourir, pour voir quelle ligne provoque la sortie du code. – Rots

+0

Je ne sais pas ce que vous vouliez dire, mais j'ai ajouté une "pause"; au début de la boucle while. Le programme se charge bien, mais la boucle ne s'exécute pas. J'ai mis la pause à la fin de la boucle while, et évidemment la balle ne s'est déplacée qu'une seule fois. Sans la pause, l'étape se termine à "Application.Run (nouveau Pong())"; dans Program.cs. – LeChosenOne

Questions connexes