Инициализация bool мешает моей логике - PullRequest
0 голосов
/ 03 мая 2011

Я работаю над этим методом, который касается обнаружения столкновений.У меня возникла проблема с инициализацией bool.Иногда при стрельбе объекта угол меняется на противоположный, потому что он ожидает, что bool будет ложным.

Если объект изначально направлен влево (от 0 до 350 в моем коде), значение bool должно быть истинным.Если он направлен вправо (между 350 и 700), значение bool должно быть ложным.

Как установить начальное значение bool на соответствующее значение true / false, не мешая последующему обнаружению столкновений?

Я думаю, что проблема в том, что когда я пытаюсь проверить, какое направление следует установить, затем я случайно налагаю ограничения на объекты.Я не могу понять, как разделить их.В идеале проверка между 0 и 350 и проверка между 350 и 700 должна выполняться только один раз, но они проверяются при каждом вызове метода, и это вызывает проблему.

//Move bubble
    public void MoveBubble(Bubble bubble, Vector2 distance)
    {
        if (bubble.stop == false)
        {
            velocityX = speed * distance.X;
            velocityY = speed * distance.Y;

            bubble.X += velocityX;

            //Problem section
            if (bubble.Y > 0 && bubble.Y < 350)
                direction = true;

            if (bubble.Y > 350 && bubble.Y < 700)
                direction = false;
            //End Problem section

            if (direction == true)
                bubble.Y += velocityY;

            if (direction == false)
                bubble.Y -= velocityY;

            if (bubble.Y <= 0 || bubble.Y >= 350)
                direction = !direction;
        }
    }    

Исправлен код:

    //Move bubble and reverse it's velocity if it collides with a wall
    internal void MoveBubble(Bubble bubble, Vector2 distance)
    {
        if (bubble.stopped == false)
            if (bubble.Y < 0 || bubble.Y > 350)
                bubble.velocityY = -bubble.velocityY;

            bubble.Y += bubble.velocityY;
            bubble.X += bubble.velocityX;
    }

Ответы [ 2 ]

1 голос
/ 03 мая 2011

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

Объяснение того, что я имею в виду

Я вижу, что вы делаете здесь:

  1. Ищу направление, в котором ты собираюсь двигаться
  2. Переместить пузырь
  3. Проверьте, должен ли пузырь измениться направление

По моему мнению, что вам нужно сделать, это

  1. Проверьте направление следования
  2. Переместить пузырь

Когда вы начнете другое движение, вы проверите направление движения пузыря

1 голос
/ 03 мая 2011

Я бы сказал, что вы не должны использовать логическое значение, а перечисление:

 enum Direction
 {
     Unknown,
     Left,
     Right
 }

Таким образом, вы можете инициализировать его как неизвестное и проверить это в своем коде.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...