C # XNA Paddle Ball игра - PullRequest
       4

C # XNA Paddle Ball игра

2 голосов
/ 08 октября 2011

Эй, парень, я играю в мяч / понг, и я пытаюсь выяснить, как заставить мяч "отскочить" случайно от весла, как в других играх-понг.

Какой самый простой способ?чтобы сделать это?

в настоящее время мой код столкновения просто заставляет его отскок в другом направлении (вверх)

public void checkCollision()
{
    Rectangle paddlerect = new Rectangle((int)Paddle.pos.X, (int)Paddle.pos.Y, Paddle.paddle.Width, Paddle.paddle.Height);
    Rectangle ballrect = new Rectangle((int)pos.X, (int)pos.Y, ball.Width, ball.Height);

    if (ballrect.Intersects(paddlerect))
    {
        yspeed = 3;
    }
}

Не могли бы вы показать мне, как сделать его отскок случайного в стороны?Как на диаганоле.

Ответы [ 2 ]

1 голос
/ 08 октября 2011

Я собираюсь предположить, что шар имеет как минимум 4 переменные:

  • Угол
  • Магнитуда
  • XSpeed ​​
  • YSpeed ​​

Угол + Величина образуют Вектор , который я назову v1. Чтобы заставить его отскочить в «случайном» направлении (которое на самом деле никогда не бывает случайным), вам нужно использовать функции синуса и косинуса. Я не буду возвращаться к объяснению, как вещи работают в треугольнике, но вы можете использовать их, чтобы вычислить каждую длину и угол в нем. Итак, у вас есть:

XSpeed = v1.Magnitude * cos(v1.Angle);
YSpeed = v1.Magnitude * sin(v1.Angle);

Если вам нужно больше узнать, зайдите на Wiki по программированию игр . Серьезно, это действительно здорово.

0 голосов
/ 08 октября 2011

Я предполагаю, что у вас есть переменная с именем xspeed, которая управляет скоростью перемещения мяча влево или вправо.

Есть две основные вещи, которые делают игры типа понг.

  1. Просто инвертируйте скорость y, как вы делаете (в действительности).
  2. Инвертируйте скорость y, но также изменяйте скорость x в зависимости от того, куда на этой «летучей мыши» ударил мяч. то есть удар по мячу в крайнем правом положении заставил бы его отскочить вправо.

Для варианта 2 вы можете либо A) установить xspeed напрямую в зависимости от того, как далеко от середины попадет мяч, либо B) вы можете добавить / вычесть xspeed в зависимости от того, как далеко от середины находится шар.

var relativemidpoint = (ball.left + ball.width/2) -
                       (paddle.left + paddle.width/2);

// Option A
xspeed = relativemidpoint / 10; // or some other constant
// Option B
xspeed += relativemidpoint / 10; // or some other constant

Возможно, вы также захотите ограничить скорость xspeed, чтобы она не была слишком быстрой в сторону.

Если вы хотите, чтобы общая скорость была постоянной, вам придется масштабировать yspeed в зависимости от значения xspeed.

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