Ich arbeite am Pygame-Projekt und versuche, einen Punktakku zu setzen, wenn der Charakter über die Hindernisse springt? Wenn ich jedoch den Dokill - Parameter in spritecollide() auf true setze, werden die Hindernisse nicht zerstört. Ich möchte, dass sie zerstört werden, so dass die Hindernisse (die sich von rechts nach links zum Spieler bewegen) übersprungen werden Ende des Bildschirms und kollidiert mit einem anderen Sprite, der vom Bildschirm entfernt ist (wenn diese Kollision auftritt, werden Punkte angesammelt). Ich kann nicht einmal so viel anfangen, wenn die Hindernisse, über die der Spieler nicht springt (mit denen er kollidiert), nicht zerstört werden. Danke an jeden, der irgendwelche Vorschläge hat! Auch die spritecollide() keine Liste des Sprites zurückkehrt kollidierte, es gibt dieses für jeden einzelnen Sprit, das es mit kollidiert ... [<sprites sprite(in 0 groups)>]
Pygame Sprites wird nicht zerstört, wenn eine Kollision auftritt
from classyforryan import sprites
import pygame
import os
import time
pygame.init() #short for initialize does return a tuple of successful intilizaton
colors={"black":(0,0,0), "white": (255, 255, 255), "red": (255, 0, 0), "green": (0, 255, 0), "purple": (164, 66, 244), "pink" :(252, 25, 123)}
gameDisplay= pygame.display.set_mode((800, 600))
bg=pygame.image.load('clouds_converted.jpg')
moore=pygame.image.load("baemoore_converted.png")
jump = False
fall = False
cube = pygame.image.load("cube.png")
player=sprites(moore, 50, 544)
ob = sprites(cube, 2125, 580) #changing 580 to 580
ob1 = sprites(cube, 2125, 580)
ob2 = sprites(cube, 2125, 580)
ob3 = sprites(cube, 2125, 580)
ob4 = sprites(cube, 2125, 580)
ob5 = sprites(cube, 2125, 580)
spritesgroup=pygame.sprite.Group()
spritesgroup.add(ob)
spritesgroup.add(ob1)
spritesgroup.add(ob2)
spritesgroup.add(ob3)
spritesgroup.add(ob4)
spritesgroup.add(ob5)
score=600
pygame.display.set_caption("lets play!")
gameExit = False
clock = pygame.time.Clock()
while not gameExit:
clock.tick(40)
timer = pygame.time.get_ticks()
for event in pygame.event.get():
if event.type==pygame.QUIT:
gameExit=True
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_ESCAPE:
gameExit= True
pygame.display.update()
gameDisplay.blit(bg,[0,0])
time.sleep(.05)
player.pos()
ob.pos()
ob.left()
ob1.pos()
ob2.pos()
ob3.pos()
ob4.pos()
ob5.pos()
if(timer > 1600):
ob1.left()
if(timer > 2800):
ob2.left()
if(timer > 4000):
ob3.left()
if(timer > 5200):
ob4.left()
if(timer > 6400):
ob5.left()
blocks_hit_list = pygame.sprite.spritecollide(player, spritesgroup, True)
print blocks_hit_list
#if (blocks_hit_list!=[]):
# score-=10
# print(score)
#print blocks_hit_list
#for x in blocks_hit_list:
pygame.quit() #unintiliazes pygames
quit() #this will exit out of python
und hier sind unsere Klassen
import pygame
import os
import time
#import panda3d
gameDisplay= pygame.display.set_mode((800, 600))
class ourMusic: #our music class
def __init__(self, song):
self.song=song #sthis is the song
def musicUpload(self):
pygame.mixer.music.load(self.song)
def musicPlay(self):
pygame.mixer.music.play(loops=-1, start=0.0) #assignes loops and plays music
class sprites(pygame.sprite.Sprite):
def __init__(self, image, xcoor, ycoor):
# Call the parent class (Sprite) constructor
pygame.sprite.Sprite.__init__(self)
self.image = image
self.rect = self.image.get_rect()
self.rect.x=xcoor
self.rect.y=ycoor
self.rect.topleft = self.rect.x, self.rect.y
def pos(self):
gameDisplay.blit(self.image, [self.rect.x, self.rect.y])
def left(self):
dist = 7
self.rect.x = self.rect.x - dist
Irgendwelche Vorschläge werden geschätzt!
müssen Sie 'self.rect.topleft = self.rect.x, self.rect.y' nicht tun, weil pygame das automatisch macht. – furas
BTW: Sie können 'self.rect = self.image.get_rect (x = xcoor, y = xcoor)' und 'gameDisplay.blit (self.image, self.rect)'. Die Gruppe hat die Funktion 'draw()', die dasselbe wie Ihre 'pos()' Methode tut, aber mit allen Elementen in der Gruppe. – furas
Hallo danke für den Tipp! Und tut mir leid, würde daran erinnern, dass "self.rect = self.image.get_rect (x = xcoor, y = xcoor) und gameDisplay.blit (self.image, self.rect) –