Игра понг в с ++ - PullRequest
       31

Игра понг в с ++

2 голосов
/ 19 августа 2011

Сейчас я делаю игру в понг на c ++, и к настоящему времени я создал paddle и ball, которые оба наследуются от entity, который содержит coordinates и bounding box (может бытькруг или многоугольник) объекта, также я реализовал функцию entity.isColliding(entity), которая легко сообщает, сталкиваются ли объекты для каких-либо двух объектов.

Теперь я хочу заставить шар двигаться и когда он столкнетсяс сущностью это обратит правильную координату скорости (x или y).Я думал о создании функции canMove(), которая будет перемещать и проверять столкновение, и если есть движение назад, но я понятия не имею, как проверить, нужно ли мне изменить координаты скорости х или у, все, что я знаю, это то, что былобудет столкновение.

Есть предложения?

Ответы [ 4 ]

0 голосов
/ 19 августа 2011

Если это клон Понга, вы всегда изменяете горизонтальную скорость при столкновении с веслом, а всегда изменяете вертикальную при столкновении со стеной.
Чтобы выяснить, следует ли изменить вертикальную скорость при столкновении мяча и ракетки, посмотрите, на какую половину ракетки ударяет мяч.
Вам понадобится способ выяснить точку столкновения.

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

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

0 голосов
/ 19 августа 2011

Хм, если я правильно понял вашу проблему ... Изменение правильной одной из скоростных координат заставляет ваш мяч возобновить движение так, как должно, в то время как обратная другая заставляет его просто возобновить движение в стену (но из другой угол).

Я не знаю, как быстро ваша функция canMove(), но если она достаточно быстра, возможно, вы могли бы попробовать это следующим образом:
- поменять координату х, если она работает, это одна
- если это не сработает, то измените координату y
- если оба из них не работают, то вы находитесь в особой ситуации (например, в углу) - поменяйте местами оба: D

0 голосов
/ 19 августа 2011

сначала определите скорость мяча, когда он ударяет по веслу или как бы вы ни били.Затем, используя тригонометрию, направление шара и его координаты x и y (yay trig!) Определяют угол, под которым мяч отскочит.Отрегулируйте скорость шариков в зависимости от этого угла (подсказка: серьезное количество срабатываний ... возможно).Стоит отметить всю его тригонометрию, то есть работает со скоростями, а не со скоростью.

Я предполагаю, что вы пытаетесь увеличить или уменьшить скорость мяча, как в других играх понг?Сначала сделайте все вышеописанное, а затем подумайте об изменении скорости в зависимости от угла столкновения.

Возможно, будет проще, если вы скажете мне, какую графическую библиотеку вы используете?

Также с многоугольникомбудет сложнее.Лучше всего начать с простого круга или прямоугольника, а затем рефакторинг вашего кода.При поиске обнаружения столкновений с различными формами есть много теорий и путей выхода.Вы должны быть немного более точными в том, что означает ваш «многоугольник».

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

0 голосов
/ 19 августа 2011

Что вы должны сделать, если у вас сложная форма и столкновение, вы должны найти касательную в точке столкновения. Это поможет вам рассчитать угол отражения. Например. если у вас есть прямоугольники, ваша касательная является вертикальной или горизонтальной, и угол отражения легко вычислить: вы отрицаете одну из ваших скоростных координат, как вы уже заявили. Если у вас есть круги, это становится сложным :) Т.е. тебе нужны sin и cos .. тебе это действительно нужно?

...