2016-02-05 2 views
2

Я никогда раньше не писал на python, но я пытаюсь выполнить обнаружение столкновений, когда сталкиваются два овала, один из овалов (пузырь/мина) будет удален.Python: Столкновения с овалами

def delete_bubble(k): 
    bubble_id[k].remove 
    bubble_r[k].remove 

def get_dist(mine,sub): 
    x = c.coords(mine) 
    a = c.coords(sub) 
    #compare coordinates and if same, return 0 

def collide(): 
    for k in range(len(bubble_id)): 
     x = get_dist(bubble_id[k],ship_c) 
     if x == 0: 
      delete_bubble(k) 

Как рассчитать расстояние между двумя овалами, мое и под? если x == a, то верните 0? Или мне нужно написать формулу расстояния для вычисления, или мне нужно найти центр каждого овала и сравнить? У меня есть радиус каждого овала, но я смущен тем, как писать это. Поскольку это является частью интерактивной игры, мне нужно постоянно проверять столкновения, как бы я реализую, что в основном:

#main game loop 
for x in range(10): 
    create_mines(c) 
window.after(40, move_mines, c) 
window.after(10, collide) #does this work? 
window.mainloop() 
+0

Вам нужно расстояние: Pythagoras 'a^2 + b^2 = c^2' где' c' - расстояние и 'a = x1-x2',' b = y1-y2'. И тогда вы можете сравнить 'c <= r1 + r2' или' c^2 <= (r1 + r2)^2', и вам не нужно использовать 'square root' – furas

+0

И он должен быть в move_mines, как вы хотите вы проверяете каждый раз, когда что-то движется. –

+0

Возможный дубликат [Как создать обнаружение конфликтов для моих прыгающих шаров?] (Http://stackoverflow.com/questions/780169/how-do-create-collision-detections-for-my-bouncing-balls) – Tersosauros

ответ

0

Я сделал программу, которая может чувствовать обнаружение столкновений в питоне, вот оно:

if oval 1 x < oval 2 x + oval 1 width and oval 1 x + oval 2 width > oval 2 x and oval 1 y < oval 2 y + oval 1 height and oval 2 height + oval 1 y > oval 2 y: 
    #put the code that deletes the oval here 

это работает, поставив овалы в «воображаемом поле» и чувствах, если какой-либо из ребер первой «воображаемой коробки» находится в контакте любого из ребер второго «воображаемой коробки». Надеюсь, это помогло.