2016-04-25 6 views
0

Fehler:'Modul' Objekt hat kein Attribut 'game_display'

Traceback (most recent call last): 
     File "/home/hayden/Desktop/Platformer/platformer.py", line 65, in <module> 
     game_loop() 
     File "/home/hayden/Desktop/Platformer/platformer.py", line 58, in game_loop 
     char(char_x,char_y) 
     File "/home/hayden/Desktop/Platformer/platformer.py", line 23, in char 
     pygame.game_display.blit(size,(x,y)) 
    AttributeError: 'module' object has no attribute 'game_display' 
    >>> 

Code:

import pygame 

pygame.init() 

display_width = 800 
display_height = 600 

char_width = 128 
char_height = 99 

char_sprite = pygame.image.load("man.png") 

framerate = 30 

gravity = 5 

game_display = pygame.display.set_mode((display_width,display_height)) 
pygame.display.set_caption("Platformer") 
clock = pygame.time.Clock() 

def char(x,y): 
    size = pygame.transform.scale(char_sprite,(128,99)) 
    pygame.game_display.blit(size,(x,y)) 

def close(): 
    pygame.quit() 
    quit() 

def game_loop(): 

    char_x = display_width/2 
    char_y = display_height/2 
    char_x_change = 0 
    char_y_change = 0 
    char_speed = 5 

    game_exit = False 
    while not game_exit: 

     for event in pygame.event.get(): 
      if event.type == pygame.QUIT: 
       close() 
      if event.type == pygame.KEYDOWN: 
       if event.type == pygame.K_W: 
        char_y_change -= char_speed 
       if event.type == pygame.K_S: 
        char_y_change += char_speed 
       if event.type == pygame.K_A: 
        char_x_change -= char_speed 
       if event.type == pygame.K_D: 
        char_x_change += char_speed 

     game_display.fill((0,0,255)) 

     char_x += char_x_change 
     char_y += char_y_change 
     char_y -= gravity 
     char(char_x,char_y) 

     char_y -= gravity 

     pygame.display.update() 
     clock.tick(framerate) 

game_loop() 

Ich weiß nicht, warum ich diese Störung erhalte und schwarzen Bildschirm. Um Ihnen zu helfen, den Code besser zu verstehen, versuche ich einen 2d-Plattformer zu erstellen. Ich bin neu in der Programmierung und Pygame, also bitte versuche nicht, eine erweiterte Erklärung zu geben. Für andere Fehler wie diese scheint es, als müssten Sie etwas importieren, aber Pygame wird importiert.

+0

Auch ich habe vergessen, Entschuldigung für den gesamten Code zu sagen. – 0swald

+2

ist es möglich, dass Sie nur 'pygame.game_display' in' pygame.display' umschalten müssen? –

+1

'pygame' hat kein' game_display' Attribut. Das ist der Fehler, und eine Überprüfung der Dokumentation bestätigt das Gleiche. Es hat ein Attribut "display", aber das Attribut "display" hat keine entsprechende "blit" -Methode. –

Antwort

0

Hier ist Ihr Code geändert. Es gibt mehr Fehler, aber Sie müssen versuchen, selbst zu lösen und fragen nur, wenn Sie es nicht alleine schaffen können. :) Wenn Sie eine Funktion aufrufen, müssen Sie die Werte und Parameter an sie senden. Eine Funktion führt dies nicht automatisch durch. Siehe die Änderungen, die ich vorgenommen habe.

import pygame 
from pygame import * 

pygame.init() 

display_width = 800 
display_height = 600 

char_width = 128 
char_height = 99 

char_sprite = pygame.image.load("test.png") 

framerate = 30 

gravity = 5 

screen = pygame.display.set_mode((display_width,display_height)) 
pygame.display.set_caption("Platformer") 
clock = pygame.time.Clock() 

def char(x,y, screen): 
    size = pygame.transform.scale(char_sprite,(128,99)) 
    screen.blit(size,(x,y)) 

def close(): 
    pygame.quit() 
    quit() 

def game_loop(screen, display_width, display_height): 

    char_x = display_width/2 
    char_y = display_height/2 
    char_x_change = 0 
    char_y_change = 0 
    char_speed = 5 

    game_exit = False 
    while not game_exit: 

     for event in pygame.event.get(): 
      if event.type == pygame.QUIT: 
       close() 
      if event.type == pygame.KEYDOWN: 
       if event.type == pygame.K_W: 
        char_y_change -= char_speed 
       if event.type == pygame.K_S: 
        char_y_change += char_speed 
       if event.type == pygame.K_A: 
        char_x_change -= char_speed 
       if event.type == pygame.K_D: 
        char_x_change += char_speed 

     screen.fill((0,0,255)) 

     char_x += char_x_change 
     char_y += char_y_change 
     char_y -= gravity 
     char(char_x,char_y, screen) 

     char_y -= gravity 

     pygame.display.update() 
     clock.tick(framerate) 

game_loop(screen, display_width, display_height) 

Hoffe das hilft.

+0

Ich werde versuchen, es zu lösen. – 0swald

+0

Ihre Tasteneingaben werden nicht korrekt empfangen. Lesen Sie die Abschnitte http://www.pygame.org/docs/ref/key.html und http://www.pygame.org/docs/ref/event.html und verstehen Sie die Konzepte gut. – emorphus

Verwandte Themen