Ich möchte die Collision Detection Skripte machen.Python Collision Erkennung von Bild mit Pygame (Bildtyp: PNG)
Wenn ich meine Skripte Pygame
immer sagen, dass die Bilder kollidieren.
Es druckt "crash", wenn ich {"rect = cat1.img.get_rect()" then "rect.colliderect(another rect of other image)}
benutze und auf diese Weise beides.
Ich verwendete cat.png
in zwei Sprites.
Fragen
Ist cat.png
schlecht?
Benutze ich nicht die richtigen Skripte?
Ist mein Computer komisch?
Hier sind meine Skripte und die cat.png.
import pygame, sys, time
from pygame.locals import *
pygame.init()
Fps = 100
fpsClock = pygame.time.Clock()
Displaysurf = pygame.display.set_mode((300, 300))# full is 1900, 1000
pygame.display.set_caption('Animation')
white = (255, 255, 255)
class cat:
def __init__(self, x, y):
self.img = pygame.image.load('cat.png')
self.x = x
self.y = y
self.rect = self.img.get_rect()
def draw(self):
Displaysurf.blit(self.img, (self.x, self.y))
def colde(self, sprite1, sprite2):
col = pygame.sprite.collide_rect(sprite1, sprite2)
if col == True:
print("crash!")
cat1 = cat(10, 10)
cat2 = cat(100, 100)
while True:
Displaysurf.fill(white)
cat1.draw()
cat2.draw()
for event in pygame.event.get():
if event.type==QUIT:
pygame.quit()
sys.exit()
keys = pygame.key.get_pressed()
if keys[pygame.K_UP]:
cat1.y -= 3
if keys[pygame.K_DOWN]:
cat1.y += 3
if keys[pygame.K_LEFT]:
cat1.x -= 3
if keys[pygame.K_RIGHT]:
cat1.x += 3
cat1.colde(cat1, cat2)
pygame.display.update()
fpsClock.tick(Fps)`
'get_rect' gibt immer ein Rect an der Position (0, 0) zurück. Dokumentation ist [hier] (https://www.pygame.org/docs/ref/surface.html#pygame.Surface.get_rect) –
Sie müssen 'cat1.rect.x' und' cat1.rect.x' verwenden anstelle von 'cat1.x' und' cat1.y' um Objekt zu verschieben und Kollision zu prüfen. Und um 'blit (self.img, self_rect)' zu verwenden – furas