在pygame中剪切的文本

时间:2014-04-17 16:19:03

标签: python pygame

我似乎在屏幕上显示文字时遇到问题 代码在屏幕上绘制文字,但是一半的内容是在屏幕上显示的。分数'因为理由而被削减。 但是,如果我将screen.blit(text,self.score_rect,self.score_rect)更改为screen.blit(text,self.score_rect),它可以正常工作。我想知道为什么会发生这种情况,我该如何解决这个问题。

感谢。

以下是代码:

class Score(object):
def __init__(self, bg, score=100):
    self.score = score
    self.score_rect = pygame.Rect((10,0), (200,50))
    self.bg = bg

def update(self):
    screen = pygame.display.get_surface() 

    font = pygame.font.Font('data/OpenSans-Light.ttf', 30)
    WHITE = (255, 255, 255)
    BG = (10, 10, 10)

    score = "Score: " + str(self.score)
    text = font.render(score, True, WHITE, BG)
    text.set_colorkey(BG)

    screen.blit(
    self.bg, 
    self.score_rect,
    self.score_rect)

    screen.blit(text, 
    self.score_rect, 
    self.score_rect)


def main():
    pygame.init()

    #initialize pygame
    pygame.init()
    screen = pygame.display.set_mode((640, 480))
    pygame.display.set_caption('Score Window')

    #initialize background
    bg = pygame.Surface((screen.get_size())).convert()
    bg.fill((30, 30, 30))
    screen.blit(bg, (0, 0))

    #initialize scoreboard
    score_board = Score(bg)

    while True:
        for event in pygame.event.get():
            if event.type == QUIT:
                exit(0)

        score_board.update()
        pygame.display.flip()

1 个答案:

答案 0 :(得分:0)

嗯 - 它看起来像调用的第三个参数做blit,你重复core_rect`参数的设计完全是为了做到这一点:它选择了一个矩形区域 将源图像(在本例中为渲染文本)粘贴到目标中(在本例中为屏幕)。

Pygame中的文本以良好的边距渲染,你根本不应该使用source-crop参数 - 如果你瘦了,你应该传递一组适当的坐标,在渲染文本内部相关,而不是与之相关的坐标。屏幕上的目的地坐标。

来自http://www.pygame.org/docs/ref/surface.html#pygame.Surface.blit

  

blit()将一个图像绘制到另一个blit上(source,dest,area = None,   special_flags = 0) - > Rect将源Surface绘制到此Surface上。   可以使用dest参数定位绘图。 Dest可以是   表示源的左上角的坐标对。   Rect也可以作为目标和topleft角传递   矩形将用作blit的位置。的大小   目标矩形不会影响blit。

     

也可以传递可选的区域矩形。这代表了一个   要绘制的源曲面的较小部分。   ...