Permalänk
Medlem

Problem i pygame

Hej Swec!

Ni har hjälpt mig förut. Nu har jag ett både konstigt och svårförklarat problem. Jag kan nog tyvär inte heller isolera problemet till en kodsnutt.

I alla fall, jag ska göra ett försök till förklaring:

Jag har en top down spaceshooter för två spelare. Jag har nu lyckats skapa skott, men det verkar som att update- funktionen aldrig körs i skottobjekten. Detta trots att jag uppdaterar dom på precis samma sätt som objekten player1 och player2.

Spritegrupper skapas och uppdateras i mainloopen:

#---------------Prepare Game Objects------------------------# playersSprite1 = pygame.sprite.RenderClear() playersSprite2 = pygame.sprite.RenderClear() p1 = player1.Player1() p2 = player2.Player2() playersSprite1.add( p1 ) playersSprite2.add( p2 ) shot_1 = pygame.sprite.RenderClear() shot_2 = pygame.sprite.RenderClear() #test = Shot_1.Shot_p1(100,100,5,5) #shot_1.add(test) #----------------------------------------------------------# #----------------------Main Loop---------------------------# while 1: clock.tick(30) #--Input--# for event in pygame.event.get(): if event.type == pygame.QUIT: running = False pygame.quit () elif event.type == pygame.KEYDOWN: if event.key == pygame.K_ESCAPE: running = False pygame.quit () elif event.key == pygame.K_SPACE: shot_1.add(Shot_1.Shot_p1( p1.__dict__['x'], p1.__dict__['y'], p1.__dict__['speed'], p1.__dict__['direction'] ) ) elif event.key == pygame.K_q: shot_2.add( Shot_2.Shot_p2( p2.__dict__['x'], p2.__dict__['y'], p2.__dict__['speed'], p2.__dict__['direction'] ) ) elif event.key == pygame.K_h: if showhelp == 0: showhelp = 1 screen.blit(h_background, (0, 0)) elif showhelp == 1: showhelp = 0 screen.blit(background, (0, 0)) #-----Update all sprites-----# playersSprite1.update() playersSprite2.update() shot_1.update() shot_2.update()

Utdrag från klassen Shot_1 (typ identisk med shot2):

class Shot_p1(pygame.sprite.Sprite): def __init__(self,x,y,speed,direction): pygame.sprite.Sprite.__init__(self) #Initiera masterklassen Sprite self.image = RecourceLoading.load_image('spr_shot1.png','sprites',-1) self.rect = self.image.get_rect() self.original = self.image self.x = x self.y = y self.direction = direction + 90 self.maxSpeed = 9 self.speed = speed + self.maxSpeed self.xd = 0 self.yd = 0 self.rect.x = self.x self.rect.y = self.y self.isdone = 1 print "skott skapas" update() def update(self): print "shot UPDATE" #Movement, change coordinates #1:a kvadranten if self.direction >= 0 and self.direction < 90: self.xd = math.cos(math.radians(self.direction)) * self.speed self.yd = -math.sin(math.radians(self.direction)) * self.speed #2:a kvadranten if self.direction >= 90 and self.direction < 180: self.xd = -math.sin(math.radians(self.direction-90)) * self.speed self.yd = -math.cos(math.radians(self.direction-90)) * self.speed #3:e kvadranten if self.direction >= 180 and self.direction < 270: self.xd = -math.cos(math.radians(self.direction-180)) * self.speed self.yd = +math.sin(math.radians(self.direction-180)) * self.speed #4:e kvadranten if self.direction >= 270 and self.direction < 360: self.xd = +math.sin(math.radians(self.direction-270)) * self.speed self.yd = +math.cos(math.radians(self.direction-270)) * self.speed #Sprite rotation # if isdone == 1: #needed only to be done once center = self.rect.center rotate = pygame.transform.rotate self.image = rotate(self.original, self.direction) self.rect = self.image.get_rect(center=center) # isdone = 1 #Keep direction within one lap, Works! #if self.direction > 360: # self.direction = 0 #if self.direction < 0: # self.direction = 359.999 #Set new x and y values x+=1 self.x = self.x + self.xd self.y = self.y + self.yd self.rect.x = self.x self.rect.y = self.y print "x: " + str(self.x) + "xd: " + str(self.xd) #kill if outside screen if self.x > 2000 or self.x < -10: self.kill() if self.y > 2000 or self.y < -10: self.kill()

Genom att använda print på olika ställen i koden ahr det visat sig att update inte alls körs i spritesen som ligger i grupperna shot1 och shot2

Vad kan tänkas vara fel?

Tack på förhand!

Permalänk
Medlem

Det ser ut som att du tabbat in update-metoden ett steg för långt?

Visa signatur

AK47s for everyone! - Angry mob
Since NaN /= NaN, I think, we should decipher 'NaN' as 'Not a NaN' - Miguel Mitrofanov
(Varför är människan så benägen att tro på Gud?) Antagligen har det lönat sig och evolutionen har drivit fram sådana hjärnor. - Anon

Permalänk
Medlem

Intenderingsfel bör IDLE klaga på isf, jag har försökt mixtra lite men jag tror inte det hjälpte...

Nu ser jag btw...hahaha... :E

Jag tror nog att det var felet, lömska python, tack för pointern!