2013-07-10 41 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() 

在它檢查,如果汽車與交通燈相撞的一部分,它不什麼都不做。 使用try語句Iv'e試過了,仍然無法正常工作

回答

0

看什麼Surface.get_rect()做的文檔:

返回覆蓋整個表面一個新的矩形。這個矩形將始終從0開始,寬度爲0。和高度與圖像大小相同。

所以Rects從未發生碰撞,因爲Rect爲汽車總是開始於0, 0。一個簡單的解決方法是簡單地設置汽車Rect的起始位置(topleft),同時呼叫get_rect()

變化

car_rect = player.get_rect() 

到:

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

(另一種方法是使用Sprite類,基本上結合了SurfaceRect

+0

非常感謝完美地工作!!!!!!!! – user2525477