Wo bleibt mein Text?
Verfasst: Dienstag 21. Juli 2009, 15:53
Ich habe begonnen mit Python 2.6 ein kleines Pseudo3D Spiel mit Comic mäßigen Grafiken mithilfe PyGame zu schreiben. (Screenshot hier: http://img216.imageshack.us/i/opencity001.png/) Das darstellen der Spielkarte und deren Gebäude ist kein Problem und funktioniert auch schon. Selbst ein funktionierenter Cursor und ein simples Event-System exestiert bereits. Nun sollte eine kleine InGame GUI kommen. Jedoch scheitere ich zurzeit daran, Texte auszugeben.
Meine erste Klasse für die GUI soll ein PopUpMenu sein. Also ein Menü, welches z.B.: beim drücken der rechten Maustaste erscheint, irgendetwas stimmt jedoch nicht. Denn ich sehe denn Text nicht.
Hier die Klasse "PopUpMenu":
Um die Klasse zu verwenden, wird sie folgend aufgerufen:
Wobei "screen" das Surface des Bildschirmes ist.
Ist übrigens mein erstes größeres Python Programm, also seit bitte milde zu mir, sollte ich irgendeinen Mist gedreht haben.
Ich hoffe ihr findet meinen Fehler.
Danke,
Cruzer
Nachtrag:
Auf dem oben erwöhnten Screenshot sieht man ausserdem das Ergebnis dieser Klasse. (Am linken oberen Eck des Screenshots) Es ist eine leere graue Box.
Meine erste Klasse für die GUI soll ein PopUpMenu sein. Also ein Menü, welches z.B.: beim drücken der rechten Maustaste erscheint, irgendetwas stimmt jedoch nicht. Denn ich sehe denn Text nicht.
Hier die Klasse "PopUpMenu":
Code: Alles auswählen
import pygame, pygame.mouse
from pygame.locals import *
from message import *
class PopUpMenu():
x = 0
y = 0
__width = 0
backcolor = (192,192,192)
forcolor = (122,122,122)
def __init__(self, x, y):
self.x = x
self.y = y
self.__width = 220
self.__entry = list()
self.font = pygame.font.Font(None, 12)
self.linesize = self.font.get_linesize()
def render(self, screen):
x = self.x
y = self.y
box = pygame.rect.Rect(x, y, self.__width, (self.linesize+4) * len(self.__entry) + 4)
# Zuerst zeichne den Hintergrund
pygame.draw.rect(screen, self.backcolor, box)
# Dann zeichne den Rahmen
pygame.draw.rect(screen, self.forcolor, box, 1)
# Und nun den Text auf eine Surface schreiben.
for entry in self.__entry:
text = self.font.render(entry[1], 0, self.forcolor)
text.blit(screen, (x+2,y+3))
y = y + self.linesize + 4
def addEntry(self, entry_id, text, icon=None):
self.__entry.append((entry_id, text, icon))
# Bei jedem hinzufügen eines Textes, wird geprüft ob der neu Text größer ist, als
# der bissher breiteste Text. Sollte dies der Fall sein, so wird das graue
# Hintergrundfeld des PopUpMenus vergroessert.
(text_width, text_height) = self.font.size(text)
if self.__width < text_width + 6:
self.__width = text_width + 6
Code: Alles auswählen
menu = PopUpMenu(10,20)
menu.addEntry(1,"Hallo Welt!")
menu.addEntry(2, "Und tschuess!")
menu.render(screen)
Ist übrigens mein erstes größeres Python Programm, also seit bitte milde zu mir, sollte ich irgendeinen Mist gedreht haben.
Ich hoffe ihr findet meinen Fehler.
Danke,
Cruzer
Nachtrag:
Auf dem oben erwöhnten Screenshot sieht man ausserdem das Ergebnis dieser Klasse. (Am linken oberen Eck des Screenshots) Es ist eine leere graue Box.