문제

I am trying to make a very simple game, here is my full code:

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()

at the part where it checks if the car collided with the traffic light, it doesn't do anything. Iv'e tried using a try statement, still doesn't work

도움이 되었습니까?

해결책

Look at the documentation what Surface.get_rect() does:

Returns a new rectangle covering the entire surface. This rectangle will always start at 0, 0 with a width. and height the same size as the image.

So the Rects never collide, since the Rect for the car always starts at 0, 0. An easy fix is to simply set the starting position (top and left) of the car Rect while calling get_rect().

Change

car_rect = player.get_rect()

to:

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

(Another way is to use the Sprite class, which basically combines a Surface and a Rect.)

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top