2010-05-02 5 views
0

Je suis un tutoriel XNA et ai le code suivant pour la détection de collision (détecter quand une balle entre en collision avec une cible). Fondamentalement, je cherche à incrémenter une variable score pour afficher le score à l'écran sans réécrire l'ensemble du programme. Peu importe où je le place dans cette méthode, il semble commencer à incrémenter du nombre de cibles, pas de zéro. Y a-t-il quelque chose de simple qui me manque ici? Toute aide serait grandement appréciée. Merci.Garder Score dans XNA Jeu

private CollisionType CheckCollision(BoundingSphere sphere) 
{ 
    if (completeCityBox.Contains(sphere) != ContainmentType.Contains) 
     return CollisionType.Boundary; 

    for (int i = 0; i < targetList.Count; i++) 
    { 
     if (targetList[i].Contains(sphere) != ContainmentType.Disjoint) 
     { 
      targetList.RemoveAt(i); 
      i--; 
      AddTargets(); 
      return CollisionType.Target; 
     } 
    } 

    return CollisionType.None; 
} 
+0

Où est votre score variable? Où/quand est-il initialisé? et incrémenté? – tzaman

+0

Il est initialisé en haut de la classe mais cherche à l'incrémenter dans cette méthode. int score = 0; (En haut de la classe) score + = 1; (Vous cherchez à ajouter à cette méthode quelque part) C'est la méthode utilisée pour détecter les collisions avec des cibles. Chaque fois qu'une collision est détectée, j'aimerais augmenter le score de 1. Cela fonctionne actuellement avec le score dans la seconde instruction if, mais le score ne commence pas à partir de 0, il part du nombre de cibles (ex: 1250) qui sont complètement aléatoires. – Seven

Répondre

0

En supposant que vous n'êtes pas incrémenter/assigner la variable score nulle part ailleurs, et il est mis à zéro lors de l'initialisation, la seule autre chose que je peux penser est que vous êtes en quelque sorte le déclenchement d'une collision avec tous vos objets - est-ce possible en quelque sorte, peut-être pendant la phase d'installation? Avez-vous essayé de définir un point d'arrêt sur votre ligne d'incrément de score pour voir quand il est frappé?

2

Vous pourriez simplement avoir une méthode séparée appelée OnCollision() qui met à jour le score (et pourrait effectuer n'importe quelle physique si vous vouliez plus tard) et dans votre méthode Update, juste une instruction if vérifiant les collisions. Quelque chose comme:

if(CheckCollision() == CollisionType.Target) 
{ 
    OnCollision(); 
} 

Hope that helps.

Ray

0

si vous le paraphe au sommet de votre classe, et seulement elle incrémenter dans la seconde instruction if il semble que la collision doit se produire avec tous les éléments de la première fois. Il peut être difficile à déterminer sans le reste du code mais par exemple dans la fonction AddTargets s'ils commencent avec le même emplacement, puis sont ajustés il pourrait être possible que lorsque cette collision est vérifiée tous qualifiés, ou quelque chose de cette nature. Comme indiqué ci-dessus, définissez un point d'arrêt lorsque vous mettez à jour la partition. Si nécessaire, mettez-la à jour via une propriété et définissez un point d'arrêt sur la propriété afin de savoir où elle est appelée. . Si elle passe de 0 à 250 avant que vous ayez réellement ce que vous attendez d'une collision, il devrait être facile de trouver où le compteur est mal mis à jour, car cela sonne avant ce que vous attendez de votre première collision et donc ajouter les 250 premiers points.