2016-07-11 8 views
0

Ich bin ziemlich neu bei Python, und ich kann nicht herausfinden, was falsch ist. Ich versuche eine Kugel zu bekommen, die erscheint und sich bewegt, aber das wird nicht funktionieren, sie bleibt am Spieler hängen. Mein Code ist eine Art chaotisch, aber hier ist es:Pygame-Kugeln bewegen sich nicht, nachdem sie gezeichnet wurden

screen = pygame.display.set_mode((512,512)) 
pygame.display.set_caption('The Necromancer') 

background = pygame.image.load('textures/background/background1.png') 
titlecard = pygame.image.load('textures/title/titlecard0.png') 
chars = pygame.image.load('textures/char/chardown1.png') 
skeleton = pygame.image.load('textures/char/chardown2.png') 

up = 0 
down = 0 
right = 0 
left = 0 
x = 64 
y = 64 
selected = 0 
titletime = 0 
level = 0 
facing = 'down' 
dir = "down" 
ballx = x 
bally = y 
ballstage = 0 
spacetimer = 0 
ballon = 0 

global ballon 
global ballstage 
global dir 
global ballx 
global bally 
global facing 
global x 
global y 

class char(pygame.sprite.Sprite): 

    def __init__(self): 
     pygame.sprite.Sprite.__init__(self) 

     self.imagedown = pygame.image.load('textures/char/chardown1.png').convert_alpha() 
     self.imagedown = pygame.transform.scale(self.imagedown, (64,64)) 
     self.imageup = pygame.image.load('textures/char/charup1.png').convert_alpha() 
     self.imageup = pygame.transform.scale(self.imageup, (64,64)) 
     self.imageleft = pygame.image.load('textures/char/charleft1.png').convert_alpha() 
     self.imageleft = pygame.transform.scale(self.imageleft, (64,64)) 
     self.imageright = pygame.image.load('textures/char/charright1.png').convert_alpha() 
     self.imageright = pygame.transform.scale(self.imageright, (64,64)) 

     self.rect = screen.get_rect() 

    def draw(self): 

     if facing == 'up': 
      screen.blit(self.imageup, (x,y)) 
     if facing == 'down': 
      screen.blit(self.imagedown, (x,y)) 
     if facing == 'left': 
      screen.blit(self.imageleft, (x,y)) 
     if facing == 'right': 
      screen.blit(self.imageright, (x,y)) 
     pygame.display.update() 

class ball(pygame.sprite.Sprite): 

    def __init__(self, surface, bax, bay): 
     #pygame.sprite.Sprite.__init__(self) 
     self.surface = surface 
     self.x = bax 
     self.y = bay 
     self.image = pygame.image.load('textures/proj/purpball1.png').convert_alpha() 
     self.image = pygame.transform.scale(self.image, (64,64)) 
     self.rect = screen.get_rect() 
     return 

    def update(self): 

     ballstage += 1 
     global ballstage 

     if ballstage == 20: 
      self.image = pygame.image.load('textures/proj/purpball1.png').convert_alpha() 
     if ballstage == 40: 
      self.image = pygame.image.load('textures/proj/purpball2.png').convert_alpha() 
     if ballstage == 60: 
      self.image = pygame.image.load('textures/proj/purpball3.png').convert_alpha() 
     if ballstage == 80: 
      self.image = pygame.image.load('textures/proj/purpball4.png').convert_alpha() 
     self.image = pygame.transform.scale(self.image, (64,64)) 
     if ballstage == 100: 
      ballstage = 0 
     if dir == 'down': 
      self.y += 1 
     if dir == 'up': 
      self.y -= 1 
     if dir == 'right': 
      self.x += 1 
     if dir == 'left': 
      self.x -= 1 

     self.surface.blit(self.image, (self.x, self.y)) 
     return 

ballGroup = [] 

pygame.display.update() 

while True: #Update 

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

    while level == 1: 

     randx = random.randrange(0, 512, 64) 
     randy = random.randrange(0, 512, 64) 

     if dir == 'down': 
      bally += 1 
     if dir == 'up': 
      bally -= 1 
     if dir == 'right': 
      ballx += 1 
     if dir == 'left': 
      ballx -= 1 

     if x <= -1: 
      x = 0 

     if y <= -1: 
      y = 0 

     if x >= 449: 
      x = 448 

     if y >= 449: 
      y = 448 

     screen.blit(background, (0,0)) 
     #screen.blit(skeleton, (randx,randy)) 
     for ball in ballGroup: 
      Ball = ball(screen, 64,64).update() 
     char().draw() 
     skeleton = pygame.transform.scale(skeleton, (64, 64)) 
     background = pygame.transform.scale(background,(512,512)) 
     pygame.display.update() 

     if left != 0: 
      x += 1 
      left -= 8 
     if right != 0: 
      x -= 1 
      right -= 8 
     if up != 0: 
      y -= 1 
      up -= 8 
     if down != 0: 
      y += 1 
      down -= 8 
     for event in pygame.event.get(): 

      if event.type == KEYDOWN: 

       if event.key == K_d: 

        #char = pygame.image.load('textures/char/charright1.png') 
        facing = 'right' 
        left += 512 

       if event.key == K_a: 

        facing = 'left' 
        #char = pygame.image.load('textures/char/charleft1.png') 
        right += 512 

       if event.key == K_s: 

        facing = 'down' 
        #char = pygame.image.load('textures/char/chardown1.png') 
        down += 512 

       if event.key == K_w: 

        facing = 'up' 
        #char = pygame.image.load('textures/char/charup1.png') 
        up += 512 

       if event.key == K_SPACE: 

        if facing == 'down': 
         dir = 'down' 
        if facing == 'up': 
         dir = 'up' 
        if facing == 'left': 
         dir = 'left' 
        if facing == 'right': 
         dir = 'right' 
        #ballx = x 
        #bally = y 
        #spacetimer = 500 
        #ballon = 1 
        ballGroup.append(ball) 

     if spacetimer != 0: 
      spacetimer -= 1 
      ballon = 1 

     else: 
      ballon = 0 



    while level == 0: 
    #title screen  
     titletime += 1 
     screen.blit(titlecard, (0,0))    
     pygame.display.update() 

     if selected == -1: 
      selected = 0 

     if selected == 0: 
      titlecard = pygame.image.load('textures/title/titlecard0.png') 

     if selected == 1: 
      titlecard = pygame.image.load('textures/title/titlecard1.png') 

     if selected == 2: 
      titlecard = pygame.image.load('textures/title/titlecard2.png') 

     if selected == 3: 
      selected = 2 

     if selected == 4: 
      selected = 5 

     for event in pygame.event.get(): 

      if event.type == KEYDOWN: 

       if event.key == K_w: 

        selected -=1 

       if event.key == K_s: 

        selected +=1 

       if event.key == K_RETURN: 

        if selected == 0: 

         level = 1 

        if selected == 1: 

         titlecard = pygame.image.load('textures/title/credits.png') 
         selected = 4 

        if selected == 2: 

         sys.exit() 

        if selected == 5: 

         selected = 1 

pygame.display.update() 

wenn Name == 'Haupt': main()

Antwort

0

Sorry, aber es ist schwer, Ihnen mit diesem Problem zu helfen weil der Code ein bisschen viel und ein wenig zu chaotisch ist. Ich kann es auch nicht selbst ausprobieren, ohne es zu ändern, besonders, da Sie viele Bilder laden, die sich auf Ihrem Computer befinden. Versuchen Sie, es übersichtlicher zu gestalten, damit wir das Problem leichter lokalisieren können. Sie können diesen Schritten folgen:

  1. Verwenden Funktionen Ihren Code kleine und überschaubare Einheiten zu unterteilen.
  2. Seien Sie konsequent in Ihrem Schreiben! Manchmal haben Sie eine neue Zeile zwischen den if-Anweisungen und manchmal nicht. Versuchen Sie, Stücke verwandter Code zusammenzufügen.
  3. Stellen Sie sicher, geben Sie uns den Code erforderlich. Entfernen Sie alles, was nicht benötigt wird, wie den Code, den Sie auskommentiert haben, und fügen Sie erforderlichen Code hinzu, um zu ermitteln, welche Module Sie importieren. Dies erleichtert uns das Testen und Suchen nach Fehlern.
  4. Ihre Variablen an der Spitze sind alle global. Sie müssen nicht explizit angeben, dass sie global sind, nachdem Sie sie definiert haben. Verwenden Sie einen IDLE als PyCharm (Community-Version ist kostenlos). Sie werden über Fehler oder Redundanzen benachrichtigt.
  5. Folgen Sie PEP8, solange es den Code nicht weniger lesbar macht.

Zum Versuch, Ihre Frage zu beantworten. Nirgendwo in deinem Code existiert eine Kugel ... Meinst du Ball? In diesem Fall machst du etwas Eigenartiges, das ich nicht ganz verstehe.

for ball in ballGroup: 
    Ball = ball(screen, 64,64).update() 

Ich glaube, Sie ball.update(), vorhatte, weil Sie wissen, an Position neue Bälle sind die Schaffung 64, 64 jedes Spiel Schleife. Dies könnte das Problem sein. Außerdem Variablen mit Kleinbuchstaben und Klassen beginnend mit Großbuchstaben. Es ist sehr wichtig, diesen Konventionen zu folgen, wenn Sie möchten, dass andere Ihren Code einfach lesen und verstehen können.

Here ist ein gutes Tutorial, um die grundlegenden Mechanismen und die Struktur eines Pygame-Spiels zu lernen.