2015-10-11 2 views
1

Я - относительно новый разработчик python, и я наткнулся на проблему. Я не мог заставить pygame.sprite.collide_rect() работать, и я не мог найти никаких решений в Интернете. вот мой код:Pygame Collision без класса

import sys 
import pygame 

pygame.init() 

gameDisplay = pygame.display.set_mode((600,600)) 

pygame.display.set_caption('Doge Adventures') 

gameexit = False 

white = (255,255,255) 
black = (0,0,0) 

move_x = 300 
move_y = 300 

def checkCollision(sprite1, sprite2): 
    col = pygame.sprite.collide_rect(sprite1,sprite2) 
    if col == True: 
     sys.exit() 

while not gameexit: 
    for event in pygame.event.get(): 
     if event.type == pygame.QUIT: 
      gameexit = True 
     if event.type == pygame.KEYDOWN: 
      if event.key == pygame.K_LEFT: 
      move_x -= 15 
     elif event.key == pygame.K_RIGHT: 
      move_x += 15 
     elif event.key == pygame.K_UP: 
      move_y -= 15 
     elif event.key == pygame.K_DOWN: 
      move_y += 15 

gameDisplay.fill(white) 

b1 = pygame.draw.rect(gameDisplay, black, [move_x, move_y, 40, 40]) 
b2 = pygame.draw.rect(gameDisplay, black, [450 , 450, 50, 50]) 

b1,b2 

checkCollision(b1,b2) 

pygame.QUIT() 
quit() 

и ошибка, я получаю:

Traceback (most recent call last): 
    File "C:\Users\DEREK\My Documents\LiClipse Workspace\Doge   Adventures\Game.py", line 45, in <module> 
    checkCollision(b1,b2) 
    File "C:\Users\DEREK\My Documents\LiClipse Workspace\Doge  Adventures\Game.py", line 19, in checkCollision 
    col = pygame.sprite.collide_rect(sprite1,sprite2) 
    File "C:\Python26\lib\site-packages\pygame\sprite.py", line 1147, in  collide_rect 
    return left.rect.colliderect(right.rect) 
AttributeError: 'pygame.Rect' object has no attribute 'rect' 

Btw, я использую Python 2.7

+0

Также обратите внимание, что я имею ограниченное знание классов/объектов python, поэтому, если вы можете, не включайте классы в решение. Спасибо :) –

ответ

1

pygame.sprite.colliderect метод для проверки столкновений между спрайтов, не прямоугольники, которые вы используете. Спрайты - это экземпляры класса pygame.sprite.Sprite. То, что вы пытаетесь обнаружить столкновения между собой, - это прямоугольники, которые имеют собственный метод обнаружения столкновений: b1.colliderect(b2). Прямоугольники - это не спрайты, а спрайты - не прямоугольники.

+0

Спасибо, это очень помогло. Теперь я попытаюсь научиться использовать классы. –

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