Давайте начнем с базовых c объектов здесь:
- Левый манипулятор (left: top: height: width = x1, y1, h, w)
- Правый манипулятор (left: top: height: width = x2, y2, h, w)
- Ball (centreXpos: centreYpos: radius = bx, by, r)
- Доска (слева: top: height : width = boardX, boardY, boardH, boardW)
Примечание: - ширина здесь относится к короткой стороне - высота относится к длине длинной стороны прямоугольника
Теперь, когда у нас есть объекты, давайте определим края, с которыми вы хотите обнаружить столкновение:
1. Left Paddle - поверхность столкновения будет длинной правой стороной (т.е. все пиксели от x = (слева + ширина) y = сверху до x = (слева + ширина) y = (сверху + высота))
2. Правая ракетка - поверхность столкновения будет длинной левой стороной (т.е. все пиксели от x = (слева) y = сверху до x = (слева) y = (сверху + высота))
3. Ball - поверхность столкновения - это все пиксели на краю круга, поэтому bx +/- радиус и +/- радиус
4. Доска - Поверхность столкновения - это края доски - Длинные края должны заставлять вас отскакивать - короткие края должны завершать ралли
Обнаружение столкновений - если поверхность столкновения шара > = поверхность столкновения правой ракетки или - если поверхность столкновения шара <= поверхность столкновения левой ракетки </p>
Что делать при обнаружении столкновения? - если столкновение обнаружено с левым рычагом измените направление, чтобы двигаться вправо (измените шаг на bx и by, чтобы он принял другое направление) - если обнаружено столкновение с левым концом, но не с анимацией остановки весла - если обнаружено столкновение с правым рычагом, измените направление для движения налево - если обнаружено столкновение с правым концом, но не с анимацией остановки лопасти
Предложение вокруг объектов
Было бы полезно, если бы вы смоделировали свои объекты, а затем в своей анимации l oop называется детектором столкновений с каждой интересующей вас поверхностью Столкновение d Затем etector может ответить перечислением. У вас может быть другая функция, основанная на перечислении
Из того, что я вижу до сих пор, вам понадобится
GameObjects
|-- Ball
|-- Paddle
|-- Left
|-- Right
|-- Board
, вы можете выбрать использование наследования.
CollisionDetector
- перебирать все игровые объекты и определять, столкнулся ли мяч с любыми интересующими вас поверхностями
- Здесь вы можете получить оба объекта, скажем, Ball и Left-Paddle и иметь определенные c подпрограммы столкновения, написанные для каждого
( BTW .... с этим вы даже можете написать тестовые примеры для обнаружения столкновений и движения мяча, а не пытаться воспроизводить его каждый раз, чтобы посмотреть, работает ли он должным образом )
Я считаю, что это упростит задачу. Если у вас есть работающая копия где-то на github, я буду рад помочь вам с этим.
Повторное чтение вышесказанного кажется длинным объяснением того, что вы искали, и кое-чего еще.
Вышесказанное не зависит от Java .. вы можете сделать это практически на любом языке.
Надеюсь, это поможет :)