我正在开发一款游戏,当你输了它时基本上说游戏结束了,但我想改变字体,我不知道怎么做,这里是我关注的代码的一部分:< / p>
def end_game(self):
""" End the game. """
end_message = games.Message(value = "You didn't eat the pie, game over!",
size = 70,
color = color.red,
x = games.screen.width/2,
y = games.screen.height/2,
lifetime = 7 * games.screen.fps,
after_death = games.screen.quit)
games.screen.add(end_message)
我想要的是基本上改变字体让我们说Calibri
答案 0 :(得分:1)
你不能。
LiveWires旨在让您开始学习编程。在尝试这样做时,它会尝试为您简化一些事情。起初,像LiveWires这样的图书馆很有用:它为你做了很多工作,让你专注于学习编码(并制作有趣的游戏!)
然而,在某些时候,这样一个精心设计的系统会做你可能不想要的事情。在我们的例子中,LiveWires使所有文本都使用“默认”字体,并且它似乎没有任何改变它的方法。
我能够通过查看LiveWires框架本身的源代码来确定这一点(它也是用Python编写的)。您使用的LiveWires Message
类继承自LiveWires Text
类。您可以自己查看Text
类代码;它应该位于名为“games.py”的文件中的“livewires”目录中。我将在下面的“Text”类中显示一些代码:
class Text(Object, ColourMixin):
"""
A class for representing text on the screen.
The reference point of a Text object is the centre of its
bounding box.
"""
def __init__(self, screen, x, y, text, size, colour, static=0):
self.init_text (screen, x, y, text, size, colour, static)
def init_text (self, screen, x, y, text, size, colour, static=0):
"""
Arguments:
screen -- the screen the object is on.
x -- x-coordinate of centre of bounding box.
y -- y-coordinate of centre of bounding box.
text -- the text to display.
size -- nominal height of the text, in pixels.
colour -- the colour the text should be.
"""
if not _have_font:
raise GameError, "We don't have pygame.font, so can't create text objects"
self._size = size
self._colour = colour
self._text = text
self._font = pygame.font.Font(None, self._size)
self._a = 0
surface = self._create_surface()
Object.__init__(self, screen, x, y, surface, x_offset=self._x_offset,
y_offset=self._y_offset, static=static)
self.move_to(x,y)
# There are more methods...
具体来说,我正在研究__init__
方法的这一部分...
self._font = pygame.font.Font(None, self._size)
self._a = 0
surface = self._create_surface()
基本上正在发生的事情是LiveWires中的每个文本项都是使用pygame.font.Font对象构建的(pygame是LiveWires用来实际执行许多其他操作的实用程序)。 LiveWires使用以特定方式创建Font对象(使用None
作为第一个参数)来查找要使用的“默认”字体。您可以通过执行...
import pygame
print pygame.font.get_default_font()
让字体在不同的计算机上运行良好可能会变得棘手,因此让所有文本使用“默认”字体对于LiveWires源代码的作者来说是一种合理的方法。
您应该注意_font
属性以下划线开头,这是Python中的一种惯例,基本上是“不要玩这个!”换句话说,创建Message对象然后尝试执行...
# Don't do this!
end_message._font = pygame.font.Font('/path/to/my/font/file', size)
虽然这个WOULD用不同的字体替换Message类中的字体对象,但是如果你再读一下代码,你会发现文本已经用原始(默认)字体渲染到表面上了;你太迟了改变字体对象。
尝试做的一件事是修改LiveWires代码。您可以使用...
替换上面显示的Text类中的行self._font = pygame.font.Font("/path/to/my/font/file", self._size)
这应该从字体文件加载不同的字体。请记住,这将改变游戏中所有文本的字体,因为所有文本都使用相同的Text类。
如果您打算更改LiveWires源代码,请确保保留原始版本的副本,以防出现错误并导致LiveWires源代码本身中断。
如果你能够拉开前一个关闭,那么也许你可以更进一步修改Text类以允许你指定字体文件名。这意味着您需要更改Text构造函数(__init__
方法)以及init_text
方法。此外,调用这些方法的任何其他类(例如,init_text
都是从LiveWires中的Message.init_message
函数调用的。