2013-07-10 2 views
1

Я пытаюсь сделать очень простую игру, вот мой полный код:Rect.colliderect не может обнаружить специфические столкновениям

import pygame 
from pygame.locals import * 
pygame.init() 

#define variables 
width, height = 940, 780 
screen = pygame.display.set_mode((width, height)) 
grey = 87, 87, 87 
white = 255, 255, 255 
player = pygame.image.load("Pics\goodcar.jpeg") 
keys = [False, False, False, False] 
playerpos = [0,40] 
green = 0,255,0 
red = 255,0,0 
color = red 

x1 = 0 
x2 = 40 
y1 = 940 
y2 = 100 




#main program 

while 1: 

    screen.fill(0) 
    road = pygame.draw.rect(screen, grey, (x1,x2,y1,y2), 0) 
    traffic_light = pygame.draw.circle(screen, white, (640,90), 40, 1) 


    screen.blit(player, playerpos) 


    car_rect = player.get_rect() 


    if traffic_light.colliderect(car_rect): 
    print("Its working") 



    for event in pygame.event.get(): 
     if event.type==pygame.QUIT: 
      pygame.quit() 
      exit(0) 

     if event.type == pygame.KEYDOWN: 
      if event.key==K_RIGHT: 
       keys[0]=True 
      elif event.key==K_LEFT: 
       keys[1]=True 
      elif event.key==K_DOWN: 
       keys[2]=True 
      elif event.key==K_UP: 
       keys[3]=True 


     if event.type == pygame.KEYUP: 
      if event.key==pygame.K_RIGHT: 
       keys[0]=False 
      elif event.key==pygame.K_LEFT: 
       keys[1]=False 
      elif event.key==pygame.K_DOWN: 
       keys[2]=False 
      elif event.key==pygame.K_UP: 
       keys[3]=False 




    if keys[0]==True: 
     playerpos[0]+=3 
    elif keys[1]==True: 
     playerpos[0]-=3 
    elif keys[2]==True: 
     playerpos[1]+=3 
    elif keys[3]==True: 
     playerpos[1]-=3 
    pygame.display.update() 

в той части, где он проверяет, если автомобиль столкнулся с светофором, это Безразлично ничего не делай. Iv'e попытался с помощью TRY заявление, по-прежнему не работает

ответ

0

Посмотрите на документацию, что делает Surface.get_rect():

Возвращает новый прямоугольник, покрывающий всю поверхность. Этот прямоугольник всегда будет начинаться с 0, 0 с шириной. и высота того же размера, что и изображение.

Так Rects никогда не сталкиваются, так как Rect для автомобиля всегда начинается 0, 0. Легким решением является просто установить начальное положение (top и left) автомобиля Rect при звонке get_rect().

Изменить

car_rect = player.get_rect() 

к:

car_rect = player.get_rect(left=playerpos[0], top=playerpos[1]) 

(Другой способ заключается в использовании Sprite класс, который в основном комбинирует Surface и Rect.)

+0

Большое спасибо, что работал отлично !!!!!!!! – user2525477