2010-05-02 2 views
0

Я следую учебнику XNA и имею следующий код для обнаружения столкновения (обнаружение, когда пуля сталкивается с целью). В основном я ищу, чтобы увеличить значение переменной, чтобы отобразить счет на экране без повторной записи всей программы. Независимо от того, где я помещаю его в этот метод, он, кажется, начинает увеличиваться от числа целей, а не от нуля. Есть что-то простое, что я здесь отсутствует? Любая помощь будет принята с благодарностью. Благодарю.Ведение счета в XNA Game

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

Где моя оценка? Где/когда оно инициализируется? и увеличилось? – tzaman

+0

Он инициализирован в верхней части класса, но хочет увеличить его внутри этого метода. int score = 0; (Начало класса) оценка + = 1; (Глядя на добавление к этому методу где-нибудь) Это метод, используемый для обнаружения столкновений с целями, поэтому каждый раз, когда обнаруживается столкновение, я хотел бы увеличить счет на 1. Это работает в настоящее время со счетом внутри второго оператора if оценка не начинается с 0, она начинается с количества целей (например: 1250), которые являются полностью случайными. – Seven

ответ

0

Предполагая, что вы не увеличивающиеся/присвоения переменной оценка в другом месте, и он установлен в ноль во время инициализации, единственное, что я могу думать о том, что каким-то образом вы спровоцировав столкновение со всеми своими объекты - возможно ли это как-то, возможно, на этапе настройки? Пробовали ли вы установить контрольную точку на вашей линии увеличения счета, чтобы увидеть, когда она попадает?

2

Вы можете просто иметь отдельный метод, называемый OnCollision(), который обновляет оценку (и может выполнять любую физику для вас, если вы захотите позже) и в вашем методе обновления, просто проверите проверку if для коллизий. Что-то вроде:

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

Надеюсь, что это поможет.

Ray

0

если вы парафирование его в верхней части вашего класса, и только увеличивающийся его во втором, если заявление это звучит как столкновение должно происходить со всеми элементами в первый раз.

без остальной части кода это может быть трудно определить, но, например, в функции AddTargets, если они начинаются с одного и того же местоположения, а затем корректируются, возможно, при проверке этого столкновения все они квалифицированы или что-то в этом роде.

Как указано выше, либо установите точку останова при обновлении оценки - при необходимости обновите ее с помощью свойства и установите точку останова на свойстве, чтобы вы могли видеть, где его вызывали и отследили, почему он вызван , Если он перейдет от 0 до 250, прежде чем вы на самом деле получите то, что вы ожидаете от столкновения, вам должно быть легко отслеживать, где счетчик обновляется некорректно, поскольку это звучит так, как прежде, чем вы ожидаете своего первого столкновения и, следовательно, добавив первые 250 баллов.

Смежные вопросы