pygame--窗口操作
pygame.display.list_modes() #返回本机所支持的窗口大小--列表
[(1920, 1080), (1680, 1050), (1600, 900), (1440, 900), (1400, 1050), (1366, 768), (1360, 768), (1280, 1024), (1280, 960), (1280, 800), (1280, 768), (1280, 720), (1280, 600), (1152, 864), (1024, 768), (800, 600), (640, 480), (640, 400), (512, 384), (400, 300), (320, 240), (320, 200)]
练习:通过F1键在满屏和窗口之间进行切换
import pygame pygame.init() #游戏初始化的设置,他应该在游戏代码编写的最前边 screen = pygame.display.set_mode((960, 600)) #创建窗口以进行显示;screen定义了一个游戏的屏幕,后续游戏场景中的游戏对象,都要在这个screen上绘制 #参数一:640和480是宽度和高度 #参数二:标志位:具体意思见下表,如果不用什么特性,就指定0 # 0 用户设置的窗口大小
# pygame.FULLSCREEN 创建一个全屏窗口 # pygame.DOUBLEBUF 创建一个“双缓冲“窗口,建议在HWSURFACE或OPENGL时使用 # pygame.HWSURFACE 创建一个硬件加速窗口,必须和FULLSCREEN同时使用 # pygame.OPENGL 创建一个OPENGL渲染的窗口 # pygame.RESIZABLE 创建一个可以改变大小的窗口 # pygame.NOFRAME 创建一个没有边框的窗口 #参数三:色深 pygame.display.set_caption("窗口大小变换") #设置当前游戏窗口的标题 fullscreen = False background =pygame.image.load('2.jpg') #加载图片 while True: for event in pygame.event.get(): #pygame.event.get() 游戏中的事件 if event.type == pygame.QUIT: #如果事件类型是退出 exit() if event.type == pygame.KEYDOWN: if event.key == pygame.K_F1: fullscreen = not fullscreen if fullscreen: screen = pygame.display.set_mode((960, 600), pygame.FULLSCREEN) else: screen = pygame.display.set_mode((960, 600), 0) screen.blit(background, (0, 0)) #把图片加到窗口 pygame.display.update() #更新窗口
import pygame pygame.init() SCREEN_SIZE = (640, 480) screen = pygame.display.set_mode(SCREEN_SIZE,pygame.RESIZABLE) pygame.display.set_caption("窗口大小变换") fullscreen = False background =pygame.image.load('2.jpg') while True: for event in pygame.event.get(): if event.type == pygame.QUIT: exit() if event.type == pygame.VIDEORESIZE: #如果窗口大小发生了变化 SCREEN_SIZE=event.size #返回当前窗口大小--元组(宽,高) print(event.size) screen = pygame.display.set_mode(SCREEN_SIZE, pygame.RESIZABLE) pass screen.blit(background, (0, 0)) pygame.display.update()
如果你想创建一个硬件显示(surface会存放在显存里,从而有着更高的速度),但必须和全屏一起用:
screen = pygame.display.set_mode(SCREEN, HWSURFACE | FULLSCREEN)
当然你完全可以把双缓冲(更快)DOUBLEBUF也加上,这就是一个很nice的游戏显示了,不过记得你要使用pygame.display.flip()来刷新显示。pygame.display.update()是将数据画到前面显示,而这个是交替显示的意思
稍微说一下双缓冲的意思,可以做一个比喻:我的任务就是出黑板报,如果只有一块黑板,那我得不停的写,全部写完了稍微Show一下就要擦掉重写,这样一来别人看的基本都是我在写黑板报的过程,看到的都是不完整的黑板报;如果我有两块黑板,那么可以挂一块给别人看,我自己在底下写另一块,写好了把原来的换下来换上新的,这样一来别人基本总是看到完整的内容了。双缓冲就是这样维护两个显示区域,快速的往屏幕上换内容,而不是每次都慢慢地重画。
还有OPENGL模式,这是一个得到广泛应用的3D加速显示模式。不过一旦使用了这个模式,pygame中的2D图像函数就不能使用了
screen.fill((255,255,255)) #用指定颜色填充窗口