2016-11-21 8 views
0

Ich spiele mit Python und versuche, ein (sehr) einfaches Spiel mit Space Invaders zu schreiben - aber meine Bullet-Sprites werden nicht gezeichnet. Ich benutze im Moment die gleiche Grafik für alles - ich werde die Grafik verschönern, sobald alles andere funktioniert. Das ist mein Code:Pygame-Sprites werden nicht gezeichnet

# !/usr/bin/python 

import pygame 

bulletDelay = 40 

class Bullet(object): 
    def __init__(self, xpos, ypos, filename): 
     self.image = pygame.image.load(filename) 
     self.rect = self.image.get_rect() 
     self.x = xpos 
     self.y = ypos 

    def draw(self, surface): 
     surface.blit(self.image, (self.x, self.y)) 


class Player(object): 
    def __init__(self, screen): 
     self.image = pygame.image.load("spaceship.bmp")  # load the spaceship image 
     self.rect = self.image.get_rect()      # get the size of the spaceship 
     size = screen.get_rect() 
     self.x = (size.width * 0.5) - (self.rect.width * 0.5) # draw the spaceship in the horizontal middle 
     self.y = size.height - self.rect.height    # draw the spaceship at the bottom 

    def current_position(self): 
     return self.x 

    def draw(self, surface): 
     surface.blit(self.image, (self.x, self.y))   # blit to the player position 


pygame.init() 
screen = pygame.display.set_mode((640, 480)) 
clock = pygame.time.Clock() 
player = Player(screen)          # create the player sprite 
missiles = []             # create missile array 
running = True 
counter = bulletDelay 

while running: # the event loop 
    counter=counter+1 
    for event in pygame.event.get(): 
     if event.type == pygame.QUIT: 
      running = False 
    key = pygame.key.get_pressed() 
    dist = 1     # distance moved for each key press 
    if key[pygame.K_RIGHT]: # right key 
     player.x += dist 
    elif key[pygame.K_LEFT]: # left key 
     player.x -= dist 
    elif key[pygame.K_SPACE]: # fire key 
     if counter > bulletDelay: 
      missiles.append(Bullet(player.current_position(),1,"spaceship.bmp")) 
      counter=0 

    for m in missiles: 
     if m.y < (screen.get_rect()).height and m.y > 0: 
      m.draw(screen) 
      m.y += 1 
     else: 
      missiles.pop(0) 

    screen.fill((255, 255, 255)) # fill the screen with white 
    player.draw(screen)   # draw the spaceship to the screen 
    pygame.display.update()  # update the screen 
    clock.tick(40) 

Hat jemand irgendwelche Vorschläge, warum meine Kugeln nicht gezogen werden?

Daumen drücken, dass Sie helfen können, und vielen Dank im Voraus.

Antwort

1

Die Kugeln werden gezeichnet. Aber aufgrund der Art, wie Sie Ihren Code geschrieben haben, können Sie ihn nie sehen! Zuerst zeichnest du alle Kugeln und dann füllst du sofort den Bildschirm mit Weiß. Dies geschieht so schnell, dass Sie sie nicht sehen können. Versuchen Sie dieses und Sie werden sehen, was ich meine:

for m in missiles: 
    if m.y < (screen.get_rect()).height and m.y > 0: 
     m.draw(screen) 
     m.y += 1 
    else: 
     missiles.pop(0) 

# screen.fill((255, 255, 255)) # fill the screen with white 
player.draw(screen)   # draw the spaceship to the screen 
pygame.display.update()  # update the screen 
clock.tick(40) 

Eine Lösung wäre, die screen.fill zu bewegen, bevor Sie die Raketen ziehen.

+0

Aww, verdammt. Ich war zu lange auf. Das ist wirklich ein doozy von einem braunen Papierbeutelfehler. Ich danke dir sehr. Ich werde gehen und mich selbst schlagen und dann einen Kaffee trinken. – headbanger

Verwandte Themen