Pygame wall collision
Verfasst: Montag 31. August 2015, 10:17
Hey Leute,
Ich bin ein Einsteiger was die Spiele Programmierung in Pygame angeht. Ich habe folgendes test-script geschrieben, mit dem ich herausfinden wollte, wie man denn die collsion detection richtig in Verbindung mit Gegenständen, Steinen, Bäumen etc.. verwendet.
Die Kollision funktioniert
, aber leider geht es dann auch nicht mehr weiter nach dem man kollidiert ist. Ich denke mal das liegt einfach daran, dass ich mich die ganze Zeit bewege, irgendwann kollidiere und dann, weil ich nach einer Kollision frage und es wahr ist, dass ich schon längst in dem Stein stecke, ich nicht mehr raus komme. Wie kann ich mir jetzt nun aber colliderect zu Nutzen machen oder ist das eine schlechte Vorangehensweise? Hat jemand von euch Tipps für mich? 
Ich bin ein Einsteiger was die Spiele Programmierung in Pygame angeht. Ich habe folgendes test-script geschrieben, mit dem ich herausfinden wollte, wie man denn die collsion detection richtig in Verbindung mit Gegenständen, Steinen, Bäumen etc.. verwendet.
Code: Alles auswählen
import pygame
import sys
white = (255, 255, 255)
black = ( 0, 0, 0)
# Player class
class Player(pygame.sprite.Sprite):
def __init__(self):
super().__init__()
self.image = pygame.image.load('../foo.png')
self.rect = self.image.get_rect()
class Rock(pygame.sprite.Sprite):
def __init__(self):
super().__init__()
self.image = pygame.image.load('../rock.png')
self.rect = self.image.get_rect()
self.rect.x = 50
self.rect.y = 50
# essential pygame init
pygame.init()
# screen
screen_width = 400
screen_height = 400
screen_size = (screen_width, screen_height)
screen = pygame.display.set_mode(screen_size)
# List for all sprites
sprites = pygame.sprite.Group()
# Rock
rock = Rock()
sprites.add(rock)
# Create player
player = Player()
sprites.add(player)
done = False
clock = pygame.time.Clock()
while not done:
for event in pygame.event.get():
if event.type == pygame.QUIT:
sys.exit()
sys.exit()
sprites.update()
pressed = pygame.key.get_pressed()
if pressed[pygame.K_LEFT] and not player.rect.colliderect(rock.rect):
#if not player.rect.colliderect(rock.rect):
move = (-1, 0)
player.rect = player.rect.move(move)
if pressed[pygame.K_RIGHT] and not player.rect.colliderect(rock.rect):
move = (1, 0)
player.rect = player.rect.move(move)
if pressed[pygame.K_UP] and not player.rect.colliderect(rock.rect):
move = (0, -1)
player.rect = player.rect.move(move)
if pressed[pygame.K_DOWN] and not player.rect.colliderect(rock.rect):
move = (0, 1)
player.rect = player.rect.move(move)
screen.fill(white)
sprites.draw(screen)
pygame.display.flip()
clock.tick(30)

