Читать о Объектах экземпляра и Атрибут экземпляра .
Создать экземпляры Display
и Text
:
display = Display(self.width, self.height, self.col)
text1 = Text('TRAVELLER', 50, black, white, 'freesansbold.ttf', True, False, 10, 100, width, height, col)
Класс Display
нуждается в методе для рисования фона и обновления отображения:
class Display:
def __init__(self, width, height, colour):
self.width = width
self.height = height
self.colour = colour
canvasW, canvasH = width, height
self.canvas = pygame.display.set_mode((canvasW, canvasH), pygame.NOFRAME)
pygame.display.set_caption("TRAVELLER")
def drawbackground(self):
self.canvas.fill(self.colour)
def update(self):
pygame.display.flip()
Текст класса создает текстовую поверхность в конструкторе. Он получает метод draw
, который может blit
текст (self.textSurf
) на поверхность дисплея (canvas
), который является аргументом метода draw
:
class Text:
def __init__(self, text, size, colour, bg, font, bold, italic, x, y, width, height, col):
self.text = text
self.size = size
self.colour = colour
self.bg = bg
self.font = font
self.bold = bold
self.italic = italic
self.x = x
self.y = y
self.width = width
self.height = height
self.col = col
myFont = pygame.font.SysFont(font, size, bold, italic)
self.textSurf = myFont.render(text, False, colour, bg)
def draw(self, canvas):
canvas.blit(self.textSurf, (self.x, self.y))
Не используйте time.sleep
. У вас есть основное приложение l oop, так что используйте его. Нарисуйте сцену в зависимости от состояния self.intro
. Пропустите вступление, если нажата клавиша или промежуток времени истек. Используйте pygame.time.get_ticks()
, чтобы получить время в миллисекундах. например:
class DrawDisplay:
def __init__(self, width, height, col, intro):
self.width = width
self.height = height
self.col = col
self.intro = intro
os.environ['SDL_VIDEO_CENTERED'] = '1'
pygame.init()
pygame.font.init()
display = Display(self.width, self.height, self.col)
text1 = Text('TRAVELLER', 50, black, white, 'freesansbold.ttf', True, False, 10, 100, width, height, col)
clock = pygame.time.Clock()
start_time = pygame.time.get_ticks()
run = True
while run:
clock.tick(120)
# handel events
current_time = pygame.time.get_ticks()
for event in pygame.event.get():
if event.type == pygame.QUIT:
run = False
if self.intro and event.type == pygame.KEYDOWN:
run = False
# change game states
if self.intro and current_time > start_time + 7500: # 7.5 seconds
run = false
# draw dispaly
display.drawbackground()
# draw scene
if self.intro:
text1.draw(display.canvas) #
else:
# draw game objects
# [...]
pass
# update display
display.update()