Problem mit Image unter Pygame

Hier werden alle anderen GUI-Toolkits sowie Spezial-Toolkits wie Spiele-Engines behandelt.
Imperator
User
Beiträge: 275
Registriert: Montag 20. August 2007, 14:43
Kontaktdaten:

Bin gerade am experimentieren mit Pygame, und habe nun ein problem.
Erst der Code:

Code: Alles auswählen

import pygame
import sys
from pygame.locals import*
pygame.init
size = width, height = 1000, 1000
black = 0, 0, 0
screen = pygame.display.set_mode(size)
Bild = pygame.image.load('Hopsy.jpg')
Bild_Rect = Bild.get_rect()
screen.fill(black)
screen.blit(Bild, Bild_Rect)
pygame.display.flip
Das Bild erscheint nicht. Außerdem lässt es sich nur mit 'Sofort Beednden' und dann 'Problembericht senden\nicht senden' beenden.
Könnt ihr den Fehler entdecken?
BlackJack

Beim `flip()` fehlen auf jeden Fall die Klammern damit die Funktion auch aufgerufen wird.
Imperator
User
Beiträge: 275
Registriert: Montag 20. August 2007, 14:43
Kontaktdaten:

Jetzt erscheint zumindest schon mal das Bild. Danke! Aber das problem mit dem beenden besteht immer noch. Und es erscheinen weiße Abschnitte im Spielfenster.
BlackJack

Die `pygame.init` hast Du im Beispiel oben auch nicht aufgerufen.
Imperator
User
Beiträge: 275
Registriert: Montag 20. August 2007, 14:43
Kontaktdaten:

Also dieses Problem ist schon eine Weile erledigt, und ich habe mit meinem Wunschprojekt begonnen. Lief alles wunderbar, bis zu,m kreiren des Levels. Nun erscheint wieder gar nichts, aber ich wüsste nicht wie man es sonst machen kann. In nem tut wurde das Modul Levelbase verwendet, allerdings findet meine IDLE es nicht. Kennt ihr das?
Hier jedenfalls der Code:

Code: Alles auswählen

import pygame
import os, sys
from pygame.locals import*
from pygame.event import*
from pygame.key import*
from pygame.mouse import*
from pygame.draw import*
from pygame.display import*
pygame.init()

def getgraphik(): #hier muss der Fehler liegen
        Söldner = 1
        Kunst = 2
        Deckung = 3
        Lifeball = 4
        level = [2, 2, 2, 2, 2, 3, 3, 2, 2, 3],\
                   [3, 3, 2, 3, 2, 2, 2, 2, 2, 2],\
                   [2, 3, 2, 2, 2, 2, 2, 2, 2, 2],\
                   [2, 3, 3, 3, 3, 2, 2, 2, 3, 2],\
                   [2, 3, 3, 3, 3, 4, 2, 2, 3, 3],\
                   [2, 3, 3, 3, 3, 3, 3, 2, 2, 2],\
                   [2, 3, 3, 3, 3, 3, 3, 2, 2, 2],\
                   [3, 2, 2, 2, 2 ,2, 2, 2, 3, 4],\
                   [3, 2, 3, 3, 2, 2, 2, 3, 3, 3],\
                   [2, 2, 2, 2, 2, 2, 2, 2, 2, 1]]
        return (level)

def getsprites():
    Söldner = pygame.image.load('Söldner.jpg')
    Spos = Söldner.get_rect()
    Kunst = pygame.image.load('Kunst.jpg')
    Kpos = Kunst.get_rect()
    Deckung = pygame.image.load('Deckung.jpg')
    Dpos = Deckung.get_rect()
    Lifeball = pygame.image.load('Lifeball.jpg')
    Lpos = Lifeball.get_rect()
    return (Söldner, Deckung, Kunst, Lifeball)
    

black = 0, 0, 0
size = width, height = 800, 400
screen = pygame.display.set_mode(size)
while True:
    for event in pygame.event.get():
        if event.type == KEYDOWN:
            if event.key == K_UP:
                x = 1
                while x == 1:
                    Spos = Spos.move (0, -2)
                    if event.type == KEYUP and event.key == K_UP:
                        x = 0
screen.fill(black)
getsprites()
getgraphik()
screen.blit (Söldner, Spos, Deckung, Dpos, Kunst, Kpos, Lifeball, Lpos, level)
pygame.display.flip()
ich kämpf mit dem problem schon eine ganze Weile.
BlackJack

Sag mal wie führst Du das denn aus? Mal davon abgesehen, dass ein 'ö' in einem Namen nicht erlaubt ist, löst dieser Quelltext einen `NameError` aus. Die ganzen Namen beim `blit()`-Aufruf sind nicht definiert.
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Von den grausigen und zahlreichen nicht mal PEP8-konformen Sternchen-Imports mal abgesehen.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Imperator
User
Beiträge: 275
Registriert: Montag 20. August 2007, 14:43
Kontaktdaten:

Leonidas hat geschrieben:Von den grausigen und zahlreichen nicht mal PEP8-konformen Sternchen-Imports mal abgesehen.
Die sind derzeit zur Sicherheit mit importiert aber zur Löschung vorgesehen.

Also mit dem ö gab es noch nie Probleme. Als ich nur den Söldner reingesteckt hab, hat es ja wunderbar geklappt. Und die Namen in der blit-methode sind eben schon definiert (siehe def getsprites).
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Imperator hat geschrieben:Also mit dem ö gab es noch nie Probleme.
Du nutzt nicht zufällig Python 3.0?
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Imperator
User
Beiträge: 275
Registriert: Montag 20. August 2007, 14:43
Kontaktdaten:

Leonidas hat geschrieben:
Imperator hat geschrieben:Also mit dem ö gab es noch nie Probleme.
Du nutzt nicht zufällig Python 3.0?
äh, nein. 2.5.1
Imperator
User
Beiträge: 275
Registriert: Montag 20. August 2007, 14:43
Kontaktdaten:

Ahem, hilft mir noch jemand?
BlackJack

Wenn Du uns verrätst warum Du keinen `NameError` bekommst. Siehe meinen letzten Beitrag.
Imperator
User
Beiträge: 275
Registriert: Montag 20. August 2007, 14:43
Kontaktdaten:

BlackJack hat geschrieben:Wenn Du uns verrätst warum Du keinen `NameError` bekommst. Siehe meinen letzten Beitrag.
Das weiß ich wirklich nicht. Ich habs jetzt aber trotzdem ö zu oe gemacht, und bekomme nun einen Tb\space error um den ich mich kümmern muss. Aber das mit dem ö kann ich mir wirklich nicht erklären.
BlackJack

Es ist ja nicht nur das 'ö'. Keiner der Namen in der vorletzten Zeile (55) ist auf Modulebene definiert.
Imperator
User
Beiträge: 275
Registriert: Montag 20. August 2007, 14:43
Kontaktdaten:

mit dem aufrufen von getsprites werden diese Namen definiert.
BlackJack

Sie werden *lokal* in der Funktion definiert und einige *Objekte*, nicht *Namen*, werden zurückgegeben. Mit diesen Objekten wird auf Modulebene beim Aufruf der Funktion aber nichts gemacht, die werden also einfach verworfen.
Imperator
User
Beiträge: 275
Registriert: Montag 20. August 2007, 14:43
Kontaktdaten:

Also muss ich sie als global vereinbaren, oder?
BlackJack

Musst Du nicht und solltest Du auch nicht. Globale Namen machen Programme schnell unübersichtlich. Der sauberere Weg ist es die zurückgegebenen Objekte an Namen zu binden.
Imperator
User
Beiträge: 275
Registriert: Montag 20. August 2007, 14:43
Kontaktdaten:

ich habs jetzt so umgeändert, aber das eigentliche Problem löst das nicht:

Code: Alles auswählen

import pygame
import os, sys
from pygame.locals import*
pygame.init()
Soeldner = pygame.image.load('Söldner.jpg')
Spos = Soeldner.get_rect()
Kunst = pygame.image.load('Kunst.jpg')
Kpos = Kunst.get_rect()
Deckung = pygame.image.load('Deckung.jpg')
Dpos = Deckung.get_rect()
Lifeball = pygame.image.load('Lifeball.jpg')
Lpos = Lifeball.get_rect()
def getgraphik():
        Soeldner = 4
        Deckung = 3
        Kunst = 2
        Lifeball = 1
        level = [4321]
        return [level]

    

black = 0, 0, 0
size = width, height = 800, 400
screen = pygame.display.set_mode(size)
while True:
    for event in pygame.event.get():
        if event.type == KEYDOWN:
            if event.key == K_UP:
                x = 1
                while x == 1:
                    Spos = Spos.move (0, -2)
                    if event.type == KEYUP and event.key == K_UP:
                        x = 0
screen.fill(black)
getgraphik()
screen.blit (Soeldner, Spos, Deckung, Dpos, Kunst, Kpos, Lifeball, Lpos, level)
pygame.display.flip()
BlackJack

Preisfrage:

Code: Alles auswählen

while True:
    print '...'
print 'Hallo'
Warum wird nie Hallo ausgegeben?
Antworten