1

我正在尝试制作一个非常简单的游戏,这是我的完整代码:

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 语句,仍然不起作用

4

1 回答 1

0

查看文档是做什么Surface.get_rect()的:

返回一个覆盖整个表面的新矩形。这个矩形总是从 0 开始,宽度为 0。和高度与图像大小相同。

所以Rects永远不会发生碰撞,因为Rect汽车的 总是从 开始0, 0。一个简单的解决方法是在呼叫时简单地设置汽车的起始位置(topleft)。Rectget_rect()

改变

car_rect = player.get_rect()

到:

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

(另一种方法是使用Sprite类,它基本上结合了 aSurface和 a Rect。)

于 2013-07-11T07:20:55.310 回答