2015-07-03 2 views
-1

Я только что познакомился с Python, и у меня возникли проблемы с обнаружением столкновения между двумя прямоугольниками. Я хочу один прямоугольник отскакивать от другой, когда они сталкиваютсяPygame Collision Detection (прямоугольники)

Вот мой код до сих пор:

import pygame 
import sys 
from pygame.locals import * 
pygame.init() 
ww = 400 
wh = 300 
w = pygame.display.set_mode((ww,wh)) 
pygame.display.set_caption('OFK') 
s = pygame.display.get_surface() 
green = pygame.Color(152,251,152) 
blue = pygame.Color(135,206,250) 
white = pygame.Color(255,255,240) 
clock = pygame.time.Clock() 
background_file = 'ice-in-water.jpg' 
background_image = pygame.image.load(background_file).convert() 
rx = ww/2 
ry = wh/2 
rw = 30 
rh = 20 
px = ww/2 
py = wh - 40 
pw = 60 
ph = 10 
vdirection = -1 
hdirection = 1 
while True: 
    clock.tick(60) 
    for event in pygame.event.get(): 
    if event.type == QUIT: 
     pygame.quit() 
     quit() 
    if event.type == KEYDOWN: 
     #print (event.key,event.unicode) 
     if event.key == 275: 
     px = px + 30 
     if px > ww - pw: 
      px = ww - pw 
     if event.key == 276: 
     px = px - 30 
     if px < 0: 
      px = 0 
    s.fill(green) 
    pygame.draw.rect(s,blue,(rx,ry,rw,rh),0) 
    pygame.draw.rect(s,white,(px,py,pw,ph),0) 
    #w.blit(background_image,(-80,0)) 
    pygame.display.update() 
    #mx,my = pygame.mouse.get_pos() 
    #print ("x: ", mx, "y: ", my) 
    #print ("ry: ", ry, "wh: ", wh) 

    rx = rx + 1.5 * hdirection 
    if rx > ww - rw: 
    hdirection = -hdirection 
    if rx < 0: 
    hdirection = -hdirection 

    ry = ry + 1.5 * vdirection 
    if ry > ww: 
    rx = ww/2 
    ry = wh/2 
    vdirection = -vdirection 
    if ry < 0: 
    vdirection = -vdirection 

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

+1

Каков точный вопрос, который у вас есть, или что не работает в вашем коде? – Endareth

+0

Извините. Как я могу заставить прямоугольник отскакивать от другого, когда он его ударяет. – acornjelly

+0

Да, понял. Похоже, вы пытались реализовать это в коде выше, какой бит он не работает? – SiHa

ответ

0

В классе Rectpygame существует метод под названием colliderect.

Вы также можете обратиться к this за предыдущий ответ за некоторые подсказки.