zoukankan      html  css  js  c++  java
  • pygame 的字体使用

    转载注明链接:https://www.cnblogs.com/liquancai/p/13236196.html

    pygame 的字体使用

    pygame 可以直接调用系统字体,也可以调用 TTF 字体。为了使用字体,应该首先创建一个 Font 对象(不要忘记初始化 pygame),对于系统自带的字体应该这样调用:

    font1 = pygame.font.SysFont('arial', 16)
    

    第1个参数是字体名,第2个参数是字号。在正常情况下系统里都有 arial 字体,如果没有会使用默认字体,默认字体和用户使用的系统有关。

    用户可以使用 pygame.font.get_fonts() 来获取当前系统所有可用的字体。

    另外还有一种调用方法是使用自己的 TTF 字体:my_font = pygame.font.Font('my_font.ttf', 16)

    这个方法的好处是可以把字体文件和游戏一起打包分发,避免玩家计算机上没有这个字体而无法显示的问题。一旦有了 Font 对象,就可以使用 render() 方法来设置文本内容,然后通过 blit() 方法写到屏幕上。

    text = font1.render("坦克大战", True, (0, 0, 0), (255, 255,255))
    

    render() 方法的第1个参数是写入的文本内容;第2个参数是布尔值,说明是否开启抗锯齿;第3个参数是字体本身的颜色;第4个参数是背景的颜色。如果不想有背景色,也就是让背景透明,可以不加第4个参数。

    例如自己定义一个文字处理函数 show_text(), 其中参数 surface_handle 是 surface 句柄,pos 为文字显示位置,corlor 为文字颜色,font_size 为字体大小,font_bold 为文字是否加粗,font_italic 为文字是否斜体。

    def show_text(surface_handle, pos, text, color, font_size = 13, font_bold = False, font_italic = False):
        # cur_font = pygame.font.SysFont('宋体', font_size)		# 获取系统字体
        cur_font = pygame.font.Font('simafang.ttf', 30)			 # 获取字体,并设置大小
        cur_font.set_bold(font_bold)							 # 设置是否加粗
        cur_font.set_italic(font_italic)						 # 设置是否斜体
        text_fmt = cur_font.render(text, 1, color)				 # 设置文本内容
        surface_handle.blit(text_fmt, pos)						 # 绘制文字
    

    在更新窗口内容 pygame.display.update() 之前加入:

    text = "坦克大战"
    show_text(screen, (20, 220), text, (255, 0, 0), True)
    text = "坦克位置:(%d, %d)" % (tank_rect.left, tank_rect.top)
    show_text(screen, (20, 420), text, (0, 255, 255), True)
    

    此时会在屏幕的(20,220)处显示红色的“坦克大战”文字,并且在(20,420)显示现在坦克所处位置的座标,移动坦克,位置座标文字随之改变。

    完整代码如下:

    import pygame
    
    
    def show_text(surface_handle, pos, text, color, font_size = 20, font_bold = False, font_italic = False):
        cur_font = pygame.font.SysFont("华文宋体", font_size)
        cur_font.set_bold(font_bold)
        cur_font.set_italic(font_italic)
        text_message = cur_font.render(text, 1, color)
        surface_handle.blit(text_message, pos)
    
    
    def tank_play():
        pygame.init()
        tank_image = pygame.image.load(r"../images/tank.png")
        tank_rect = tank_image.get_rect()
        back_image = pygame.image.load(r"../images/background2.jpg")
        back_rect = back_image.get_rect()
        screen = pygame.display.set_mode(back_rect.size)
        pygame.display.set_caption("用户方向键控制坦克移动")
        tank_rect.center = back_rect.center
        offset = 2                            
        fps_clock = pygame.time.Clock()
        while True:
            fps_clock.tick(60)
            for event in pygame.event.get():
                if event.type == pygame.QUIT:
                    pygame.quit()
                    exit()
            keys_pressed = pygame.key.get_pressed()
            if keys_pressed[pygame.K_RIGHT]:
                tank_rect.x += offset
            if keys_pressed[pygame.K_LEFT]:
                tank_rect.x -= offset
            if keys_pressed[pygame.K_UP]:
                tank_rect.y -= offset
            if keys_pressed[pygame.K_DOWN]:
                tank_rect.y += offset
            tank_rect.clamp_ip(back_rect)
            screen.blit(back_image, back_rect)
            screen.blit(tank_image, tank_rect)
    
            text = "坦克大战"
            show_text(screen, (20, 220), text, (255, 0, 0))
            text = f"坦克位置:({tank_rect.x},{tank_rect.y})"
            show_text(screen, (20, 250), text, (0, 255, 255))
            pygame.display.update()
    
    
    if __name__ == '__main__':
        tank_play()
        
    

    程序运行结果如下所示:

  • 相关阅读:
    简单选择排序就是简单~~~
    快速排序的性能和名字一样优秀
    网关Ocelot功能演示完结,久等了~~~
    打个赌,用得最多的冒泡排序肯定少了个关键点
    C7 : 进程环境
    Java Native Interface Specification
    JNI简易开发
    Java Native Interface Specification
    MultilingualSimpleObject
    Java Native Interface Specification
  • 原文地址:https://www.cnblogs.com/liquancai/p/13236196.html
Copyright © 2011-2022 走看看