2015-02-03 2 views
0

Вот мой коллизия код для шара со стенками - Созданный в питона (Codeskulptor)Pong Game - Ball Collision with Paddles?

Мяч отскакивает нижние и верхние стенки, и исчезает с левой и правой стороны, если он не попал под лопаткой и вновь появляется в центре повторить

Однако, я не могу получить мяч попал в лопатку и отбой - лопасть является объект Circle расположен на левой части экрана (высота/2)

Любая помощь следует принимать во внимание

#Bottom and top walls 
if Ballpos[1] >= (Height - Ballradius): 
    Ballvel[1] = - Ballvel[1] 
if Ballpos[1] <= (Ballradius): 
    Ballvel[1] = - Ballvel[1] 

if(Ballpos[0] <= 0): 
    Score2 += 1 
    Ball_Spawn(True) 
elif(Ballpos[0] >= Width): 
    Score1 += 1 
    Ball_Spawn(False) 


#Update Position of Ball 
Ballpos[0] += Ballvel[0] 
Ballpos[1] += Ballvel[1] 

ответ

0

Давайте сделаем вид, что ваше весло имеет координаты Padpos и радиус Padradius. Из вашего кода похоже, что координаты представляют центр круга, но вы можете внести необходимые корректировки, если я ошибаюсь.

if (Ballpos[0] - Padpos[0])**2 + (Ballpos[1] - Padpos[1])**2 <= (Ballradius + Padradius)**2: 
    # code for rebounding 

В принципе, просто применить теорему Пифагора, чтобы увидеть, если расстояние между их центрами ближе, чем сумма их радиусов.

+0

FWIW, модуль 'math' имеет функцию' 'hypot()'] (https://docs.python.org/2/library/math.html#math.hypot), которая вычисляет евклидово расстояние - другое имя для пифагорейской метрики - очень быстро и может быть использовано как для ускорения, так и для упрощения вашего ответа, так как вам нужно сравнить результат с «Ballradius + Padradius». – martineau

Смежные вопросы