2016-10-16 11 views
0

저는 Squarey 게임을 파이 게임으로 바꾸기로 결정했습니다. 이제는 벽을 뛰어 넘고 이동할 수있는 2 개의 직사각형이 있습니다. 그러나 직사각형은 서로를 통해 오른쪽으로 이동할 수 있습니다. 어떻게 내가 서로 부딪 히고 멈출 수 있겠습니까? 내 코드 :파이 게임에서 직사각형 충돌이 발생 했습니까? (서로 부딪히는 직사각형)

import pygame 

pygame.init() 
screen = pygame.display.set_mode((1000, 800)) 
pygame.display.set_caption("Squarey") 
done = False 
is_red = True 
x = 30 
y = 30 
x2 = 100 
y2 = 30 
clock = pygame.time.Clock() 

while not done: 
    for event in pygame.event.get(): 
     if event.type == pygame.QUIT: 
      done = True 
     if event.type == pygame.KEYDOWN and event.key == pygame.K_SPACE: 
      is_red = not is_red 

    pressed = pygame.key.get_pressed() 
    if pressed[pygame.K_UP]: y -= 3 
    if pressed[pygame.K_DOWN]: y += 3 
    if pressed[pygame.K_LEFT]: x -= 3 
    if pressed[pygame.K_RIGHT]: x += 3 
    if pressed[pygame.K_w]: y2 -= 3 
    if pressed[pygame.K_s]: y2 += 3 
    if pressed[pygame.K_a]: x2 -= 3 
    if pressed[pygame.K_d]: x2 += 3 

    if y < 0: 
     y += 3 
    if x > 943: 
     x -= 3 
    if y > 743: 
     y -= 3 
    if x < 0: 
     x += 3 

    if y2 < 0: 
     y2 += 3 
    if x2 > 943: 
     x2 -= 3 
    if y2 > 743: 
     y2 -= 3 
    if x2 < 0: 
     x2 += 3 

    screen.fill((0, 0, 0)) 
    if is_red: color = (252, 117, 80) 
    else: color = (168, 3, 253) 
    if is_red: color2 = (0, 175, 0) 
    else: color2 = (255, 255, 0) 
    rect1 = pygame.draw.rect(screen, color, pygame.Rect(x, y, 60, 60)) 
    rect2 = pygame.draw.rect(screen, color2, pygame.Rect(x2, y2, 60, 60)) 
    pygame.display.flip() 
    clock.tick(60) 

pygame.quit() 
+0

가능한 복제 (http://stackoverflow.com/questions/13060170/python-rectangle-collision-handling-with-pygame) –

답변

0

이 충돌 확인 같은 것을 시도하려면 :

다음
def doRectsOverlap(rect1, rect2): 
     for a, b in [(rect1, rect2), (rect2, rect1)]: 
      # Check if a's corners are inside b 
      if ((isPointInsideRect(a.left, a.top, b)) or 
       (isPointInsideRect(a.left, a.bottom, b)) or 
       (isPointInsideRect(a.right, a.top, b)) or 
       (isPointInsideRect(a.right, a.bottom, b))): 
       return True 

     return False 

    def isPointInsideRect(x, y, rect): 
     if (x > rect.left) and (x < rect.right) and (y > rect.top) and (y < rect.bottom): 
      return True 
     else: 
      return False 

, 그들을 이동하는 동안, 당신이 호출 할 수 있습니다

if doRectsOverlap(rect1, rect2): 
    x -= 3 
    y -= 3 
    rect1 = pygame.draw.rect(screen, color, pygame.Rect(x, y, 60, 60)) 

또는 그런 일

.

0

사용 pygame.Rect.colliderect

if rect1.colliderect(rect2): 
    print("Collision !!") 

은 BTW : - 메인 루프 전에 - 당신은 한 번만 rect1 (및 rect2)를 만들 수 있습니다 그리고 당신은 rect1.xrect1.y 대신 x, y를 사용할 수 있습니다. 그리고 항상 새로운 Rect를 만들지 않고 pygame.draw.rect(screen, color, rect1)을 사용할 수 있습니다.

사각형은 유용하다

# create 

rect1 = pygame.Rect(30, 30, 60, 60) 

# move 

rect1.x += 3 

# check colision with bottom of the screen 

if rect1.bottom > screen.get_rect().bottom: 

# center on the screen 

rect1.center = screen.get_rect().center 
[파이 게임 처리 파이썬 사각형 충돌]의