Ведение счета в игре XNA - PullRequest
0 голосов
/ 03 мая 2010

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

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;
}

Ответы [ 3 ]

2 голосов
/ 07 мая 2010

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

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

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

Ray

0 голосов
/ 07 мая 2010

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

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

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

0 голосов
/ 03 мая 2010

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

...