备注:我开始在运行壁球游戏(全屏型)代码时,出现壁球超出屏幕范围外的问题,然后在 设置->显示 里,更改文本、应用和其他项目的大小,改为100%就正常了:)
Pygame屏幕绘制机制
1.Pygame屏幕绘制机制简介
屏幕控制:
pygame.display
用来控制Pygame游戏的屏幕
pygame有且只有一个屏幕
屏幕左上角为(0,0)
以像素为单位
-----------------------------------------------
屏幕控制需求:
游戏全屏
游戏屏幕大小可调节
游戏屏幕无边框
更改游戏标题栏内容
更改游戏图标......
-----------------------------------------------
屏幕控制的重要函数:
屏幕尺寸和模式:
pygame.display.set_mode()
pygame.display.Info()
窗口标题和图标:
pygame.display.set_caption()
pygame.display.set_icon()
pygame.display.get_caption()
窗口感知和刷新:
pygame.display.get_active()
pygame.display.flip()
pygame.display.update()
-----------------------------------------------
OpenGL和硬件加速:(略)
pygame.display
可以采用OpenGL支持显示
可以采用硬件加速显示
绘制加速将带来更流畅的运行效果
===================================================================================
2.Pygame屏幕尺寸和模式设置
屏幕模式函数:
pygame.display.set_mode(r=(0,0),flags=0)
r是游戏屏幕的分辨率,采用(width, height)方式输入
flags用来控制显示类型,可用|组合使用,常用显示标签如下:
pygame.RESIZABLE 窗口大小可调
pygame.NOFRAME 窗口没有边界显示
pygame.FULLSCREEN 窗口全屏显示
注意:每种显示方式要配合相应的处理机制
屏幕设置为大小可调:
注意:大小可调时要有尺寸变化的响应
对扩张显示界面的刷新
对扩张/缩小显示界面的游戏响应
屏幕设置为无边框:
注意:无边框时要增加其他退出方式
屏幕设置为全屏:
注意:全屏时要考虑系统分辨率,否则将会按照用户设定被拉伸
-------------------------------------------------------------
屏幕信息函数:
pygame.display.Info()
产生一个显示信息对象VideoInfo,表达当前屏幕的参数信息
在.set_mode()之前调用,则显示当前 系统显示参数信息
参数很多,其中有两个十分重要,如下:
(1)current_w:当前显示模式或窗口的像素 宽度
(2)current_h:当前显示模式或窗口的像素 高度
(1)壁球小游戏(全屏型)
注意:采用系统分辨率进行全屏
源代码:
1 # 壁球小游戏(全屏型) 2 import pygame,sys 3 4 pygame.init() 5 vInfo = pygame.display.Info() #窗口全屏显示 6 size = width, height = vInfo.current_w, vInfo.current_h 7 speed = [1,1] 8 BLACK = 0, 0, 0 9 #print(pygame.display.Info()) 10 #screen = pygame.display.set_mode(size, pygame.RESIZABLE) #窗口大小可调 11 #screen = pygame.display.set_mode(size, pygame.NOFRAME) #窗口无边框 12 screen = pygame.display.set_mode(size, pygame.FULLSCREEN) #窗口全屏显示 13 14 pygame.display.set_caption("Pygame壁球") 15 ball = pygame.image.load("PYG02-ball.gif") 16 ballrect = ball.get_rect() 17 fps = 300 18 fclock = pygame.time.Clock() 19 20 while True: 21 for event in pygame.event.get(): 22 if event.type == pygame.QUIT: 23 sys.exit() 24 elif event.type == pygame.KEYDOWN: 25 if event.key == pygame.K_LEFT: 26 speed[0] = speed[0] if speed[0] == 0 else (abs(speed[0]) - 1)*int(speed[0]/abs(speed[0])) 27 elif event.key == pygame.K_RIGHT: 28 speed[0] = speed[0] + 1 if speed[0] > 0 else speed[0] - 1 29 elif event.key == pygame.K_UP: 30 speed[1] = speed[1] + 1 if speed[1] > 0 else speed[1] - 1 31 elif event.key == pygame.K_DOWN: 32 speed[1] = speed[1] if speed[1] == 0 else (abs(speed[1]) - 1)*int(speed[1]/abs(speed[1])) 33 elif event.key == pygame.K_ESCAPE: 34 sys.exit() 35 ballrect = ballrect.move(speed) 36 if ballrect.left < 0 or ballrect.right > width: 37 speed[0] = - speed[0] 38 if ballrect.top < 0 or ballrect.bottom > height: 39 speed[1] = - speed[1] 40 41 screen.fill(BLACK) 42 screen.blit(ball, ballrect) 43 pygame.display.update() 44 fclock.tick(fps)