파이 게임에서 레이싱 게임을 만들려고합니다. 차가 트랙을 벗어나면 속도가 느려지 길 바랍니다. 나는 트랙의 윤곽선 인 또 다른 스프라이트를 가지고 이것을하려고했는데, 자동차가 스프라이트에 닿으면 속도가 느려진다. 이것은 작동하지 않으며 이유를 모르겠습니다. 이 작업을 수행하는 더 좋은 방법이 있습니까?파이 게임에서 스프라이트 마스크 충돌 문제가 발생했습니다.
Traceback (most recent call last): File "C:\Users\Daniella\Desktop\Python\Games\game.py", line 75, in if pygame.sprite.collide_mask(Img, BackHit): File "C:\Users\Daniella\AppData\Roaming\Python\Python36\site-packages\pygame\sprite.py", line 1470, in collide_mask xoffset = right.rect[0] - left.rect[0] AttributeError: 'pygame.Surface' object has no attribute 'rect'
이 코드입니다 :
Img
내가이 오류 코드가 윤곽 경마장
BackHit
차 이미지
Back
임
import pygame
Width = 800
Height = 600
Black = (0, 0, 0)
White = (255, 255, 255)
Red = (255, 0, 0)
Green = (0, 255, 0)
Blue = (0, 0, 255)
Yellow = (255, 255, 0)
BackColour = (198, 151, 107)
pygame.init()
GameDisplay = pygame.display.set_mode((Width, Height))
pygame.display.set_caption("A bit Racey")
Clock = pygame.time.Clock()
Img = pygame.image.load("download.png")
ImgWidth = 46
ImgHeight = 68
Img = pygame.transform.scale(Img, (ImgWidth, ImgHeight))
Back = pygame.image.load("back1.png")
BackWidth = Width*4
BackHeight = Height*4
Back = pygame.transform.scale(Back, (BackWidth, BackHeight))
BackHit = pygame.image.load("back1 hit1.png")
BackHitWidth = Width*4
BackHitHeight = Height*4
BackHit = pygame.transform.scale(BackHit, (BackHitWidth, BackHitHeight))
def Car():
GameDisplay.blit(Img, (400-ImgWidth/2, 300-ImgHeight/2))
def Background(X, Y):
GameDisplay.blit(Back, (X, Y))
def BackgroundHit(X, Y):
GameDisplay.blit(BackHit, (X, Y))
X = (Width*0.45)
Y = (Height*0.5)
XChange = 0
YChange = 0
Changer = 1
Crashed = False
while not Crashed:
for Event in pygame.event.get():
if Event.type == pygame.QUIT:
Crashed = True
elif Event.type == pygame.KEYDOWN:
if Event.key == pygame.K_LEFT:
Img = pygame.transform.rotate(Img, -90)
XChange = 5/Changer
elif Event.key == pygame.K_RIGHT:
Img = pygame.transform.rotate(Img, 90)
XChange = -5/Changer
elif Event.key == pygame.K_UP:
Img = pygame.transform.rotate(Img, 0)
YChange = 5/Changer
elif Event.key == pygame.K_DOWN:
Img = pygame.transform.rotate(Img, 180)
YChange = -5/Changer
if Event.type == pygame.KEYUP:
if Event.key == pygame.K_LEFT or Event.key == pygame.K_RIGHT:
XChange = 0
elif Event.key == pygame.K_UP or Event.key == pygame.K_DOWN:
YChange = 0
if pygame.sprite.collide_mask(Img, BackHit):
Changer = 2
Y += YChange
X += XChange
GameDisplay.fill(White)
BackgroundHit(X, Y)
Background(X, Y)
Car()
pygame.display.update()
Clock.tick(200)
pygame.quit()
quit()
'pygame.sprite.collide_mask'는'pygame.Surface's가 아닌'pygame.Sprite'와 함께 작동합니다. 'pygame.Sprite' 클래스 사용법을 알고 있습니까? 그렇지 않다면 [튜토리얼] (http://programarcadegames.com/index.php?chapter=introduction_to_sprites&lang=en#section_13)을 확인하십시오. 또는 [서페이스에서 마스크 만들기] (http://renesd.blogspot.com/2017/03/pixel-perfect-collision-detection-in.html) 만 만들면됩니다. – skrx
나는'pygame.sprite.Sprite'가 아니라'pygame.sprite.Sprite'를 의미했습니다. – skrx