Python Pygame Kollision einbauen

Hier werden alle anderen GUI-Toolkits sowie Spezial-Toolkits wie Spiele-Engines behandelt.
Antworten
asaga
User
Beiträge: 2
Registriert: Freitag 16. August 2019, 15:44

Guten Tag miteinander

Ich komme mit der Kollision nicht so draus. Ich weiss nicht wie man was anordnen muss, dass es in Klassen auch funktioniert.

import pygame, sys, time
from pygame.locals import *


pygame.init()

FPS=30
fpsClock=pygame.time.Clock()

width=1650

height=825
DISPLAYSURF=pygame.display.set_mode((width,height),0,32)
pygame.display.set_caption('Animation')
background=pygame.image.load('bg.png')



UP='up'
LEFT='left'
RIGHT='right'
DOWN='down'


sprite=pygame.image.load('down.png')
spritex=831
spritey=150

# Regale
regal=pygame.image.load('regal.png')
regalx=831
regaly=100

regal1=pygame.image.load('regal.png')
regal1x=831
regal1y=200
regal2=pygame.image.load('regal.png')
regal2x=831
regal2y=235

regal3=pygame.image.load('regal.png')
regal3x=831
regal3y=335
regal4=pygame.image.load('regal.png')
regal4x=831
regal4y=370

regal5=pygame.image.load('regal.png')
regal5x=831
regal5y=470
regal6=pygame.image.load('regal.png')
regal6x=831
regal6y=505

regal7=pygame.image.load('regal.png')
regal7x=831
regal7y=605
regal8=pygame.image.load('regal.png')
regal8x=831
regal8y=640

regal9=pygame.image.load('regal.png')
regal9x=831
regal9y=765


palette=pygame.image.load('palettelang.png')
palettex=397
palettey=104

paket=pygame.image.load('paket.png')
paketx=890
pakety=106

lkw=pygame.image.load('lkw.png')
lkwx=25
lkwy=115


run = True
while run:
DISPLAYSURF.blit(background,(0,0))
DISPLAYSURF.blit(sprite,(spritex,spritey))
DISPLAYSURF.blit(regal,(regalx,regaly))
DISPLAYSURF.blit(regal1,(regal1x,regal1y))
DISPLAYSURF.blit(regal2,(regal2x,regal2y))
DISPLAYSURF.blit(regal3,(regal3x,regal3y))
DISPLAYSURF.blit(regal4,(regal4x,regal4y))
DISPLAYSURF.blit(regal5,(regal5x,regal5y))
DISPLAYSURF.blit(regal6,(regal6x,regal6y))
DISPLAYSURF.blit(regal7,(regal7x,regal7y))
DISPLAYSURF.blit(regal8,(regal8x,regal8y))
DISPLAYSURF.blit(regal9,(regal9x,regal9y))
DISPLAYSURF.blit(palette,(palettex,palettey))
DISPLAYSURF.blit(paket,(paketx,pakety))
DISPLAYSURF.blit(lkw,(lkwx,lkwy))

for event in pygame.event.get():
if event.type==QUIT:
pygame.quit()
sys.exit()



keys_pressed = pygame.key.get_pressed()

if keys_pressed[pygame.K_LEFT]:
spritex -= 3
sprite=pygame.image.load('left.png')

elif keys_pressed[pygame.K_RIGHT]:
spritex += 3
sprite=pygame.image.load('right.png')


elif keys_pressed[pygame.K_UP]:
spritey -= 3
sprite=pygame.image.load('up.png')

elif keys_pressed[pygame.K_DOWN]:
spritey += 3
sprite=pygame.image.load('down.png')


pygame.display.update()

fpsClock.tick(FPS)




Ich habe es irgendwie so versucht, aber da kommt nur ein screen fenster heraus

import pygame, sys, time
from pygame.locals import *
import pygame
import random


BEIGE = pygame.Color('beige')

WIDTH = 480
HEIGHT = 600
FPS = 60

pygame.init()
pygame.mixer.init()
screen = pygame.display.set_mode((WIDTH, HEIGHT))
clock = pygame.time.Clock()

class Player(pygame.sprite.Sprite):

def __init__(self):
pygame.sprite.Sprite.__init__(self)
self.image = player_img
self.rect = self.image.get_rect()
self.x=0
self.y=0


def update(self):
self.x_speed = self.y_speed = 0
keystate = pygame.key.get_pressed()
if keystate[pygame.K_LEFT]:
self.speedx = -3
if keystate[pygame.K_RIGHT]:
self.speedx = 3
if keystate[pygame.K_UP]:
self.speedx = -3
if keystate[pygame.K_DOWN]:
self.speedx = 3

class rock(pygame.sprite.Sprite):

def __init__(self):
pygame.sprite.Sprite.__init__(self)
self.image = rock_img
self.rect = self.image.get_rect()
self.rect.centerx = WIDTH / 2
self.rect.bottom = HEIGHT - 10
self.x=0
self.y=0


class bock(pygame.sprite.Sprite):

def __init__(self):
pygame.sprite.Sprite.__init__(self)
self.image = bock_img
self.rect = self.image.get_rect()
self.rect.centerx = WIDTH / 2
self.rect.bottom = HEIGHT - 10
self.x=0
self.y=0



player_img = pygame.image.load('standing.png')
rock_img = pygame.image.load('standing.png')
bock_img = pygame.image.load('standing.png')
all_sprites = pygame.sprite.Group()

bock = pygame.sprite.Group()
rock = pygame.sprite.Group()
player = Player()
all_sprites.add(player)


run = True

while run:
clock.tick(FPS)
for event in pygame.event.get():
if event.type == pygame.QUIT:
run = False

all_sprites.update()
all_sprites.draw(screen)
screen.fill(BEIGE)
pygame.display.flip()


pygame.quit()
Benutzeravatar
ThomasL
User
Beiträge: 1366
Registriert: Montag 14. Mai 2018, 14:44
Wohnort: Kreis Unna NRW

Hallo asaga,
kannst du bitte den Vollständigen Editor benutzen und dort deinen Code in [co de][/co de] Tags packen, denn so ist der nicht les- und verwendbar.
Im Editor gibt es dazu den Button </>.
Danke.
Ich bin Pazifist und greife niemanden an, auch nicht mit Worten.
Für alle meine Code Beispiele gilt: "There is always a better way."
https://projecteuler.net/profile/Brotherluii.png
Gargoyle D.
User
Beiträge: 10
Registriert: Montag 3. Dezember 2018, 20:24

Zuerst einmal, wenn man eine Frage im Forum stellt, verwendet man die Codetags, denn dafür sind sie da :wink: , und ein bisschen den Code eingrenzen und nicht das ganze Programm sondern nur die wichtigen Stellen wäre auch hilfreich für die Leute, die deinen Code zum ersten Mal sehen... Ohne jetzt einen genaueren Blick auf deinen Code zu werfen, erkläre ich jetzt einfach die Idee:

Pygame hat eine Klasse namens "Rect", die einfach nur ein Rechteck darstellt mit Extrafunktionen. Erstellt wird es so:

Code: Alles auswählen

rect = pygame.Rect(x, y, length, width)
Erstellt man 2 Rechtecke, kann man mit diesesm Script

Code: Alles auswählen

rect1 = pygame.Rect(x1, y1, length1, width1)
rect2 = pygame.Rect(x2, y2, length2, width2)
rect1.colliderect(rect2)
herausfinden, ob die Rechtecke miteinander kollidieren.

Ich hoffe, das hilft dir bei deinem Projekt, ansonsten musst du deine Frage noch etwas präziser stellen :D
Gargoyle D.
User
Beiträge: 10
Registriert: Montag 3. Dezember 2018, 20:24

Tipp:
Beim Durchschauen deines Programmes sind mir einige Probleme aufgefallen:

Code: Alles auswählen

screen.fill(BEIGE)
sollte in deiner while Schleife weiter vorne kommen, da in deiner Konstellation niemals ein Sprite angezeigt wird, weil du
direkt nachdem du

Code: Alles auswählen

all_sprites.draw(screen)
ausführst du alles Beige färbst...

Es reicht, wenn du pygame am Anfang einmal importierst :D , 3 mal sind zu viel des Guten..
Antworten