Я пытаюсь сделать гоночную игру в пигмейки.Он включает в себя «автомобиль», который является просто четырехугольником и трассой в форме PNG.Прямо сейчас, игра очень проста, но я хочу, чтобы машина, даже на один пиксель, отклонялась от трассы - событие, которое должно быть запущено.Я сделал очень простую версию кода, приведенную ниже, которую я хотел бы исправить, а также изображение трека, пожалуйста, кто-нибудь может мне помочь с этим?
import pygame
from pygame.math import Vector2
pygame.init()
clock = pygame.time.Clock()
WIDTH = 900
HEIGHT = 550
screen = pygame.display.set_mode((WIDTH, HEIGHT))
abc = pygame.image.load("trackimagelinkinthepost")
track = pygame.transform.scale(abc, (100,75))
thetrack = track
REDCAR_ORIGINAL = pygame.Surface((50, 30), pygame.SRCALPHA)
redangle = 180
redspeed = 3
x = 800
y = 500
pos_red = Vector2(x,y)
vel_red = Vector2(-redspeed,0)
redcar = REDCAR_ORIGINAL
pygame.draw.polygon(
REDCAR_ORIGINAL, (255, 0, 0), [(0, 30), (50, 20), (50, 10), (0, 0)])
redrect = redcar.get_rect(center=pos_red)
trackrect = thetrack.get_rect(topleft=(0,0))
mask_red = pygame.mask.from_surface(redcar)
track_mask = pygame.mask.from_surface(thetrack)
myevent = True
while myevent:
for event in pygame.event.get():
if event.type == pygame.QUIT:
run = False
keys = pygame.key.get_pressed()
if keys[pygame.K_LEFT]:
redangle += 3
vel_red.rotate_ip(-3)
redcar = pygame.transform.rotate(REDCAR_ORIGINAL, redangle)
redrect = redcar.get_rect(center=redrect.center)
# We need a new mask after the rotation.
mask_red = pygame.mask.from_surface(redcar)
elif keys[pygame.K_RIGHT]:
redangle -= 3
vel_red.rotate_ip(3)
redcar = pygame.transform.rotate(REDCAR_ORIGINAL, redangle)
redrect = redcar.get_rect(center=redrect.center)
mask_red = pygame.mask.from_surface(redcar)
pos_red += vel_red
redrect.center = pos_red
offset = redrect[0] - trackrect[0], redrect[1] - trackrect[1]
offtrack = mask_red.overlap(track_mask, offset)
if not offtrack:
print("HI")
screen.fill((100,255,100))
screen.blit(abc,(0,-50))
screen.blit(redcar, redrect)
pygame.display.flip()
clock.tick(120)
pygame.quit()