想写小游戏的心早就有了,但是一直觉得额外学习一门语言的GUI编程好像不是很划算,今年趁着看了点 python 的内容,所以想试试用python来写,在过程中了解到python有一个专门的库——pygame ,所以就看了点教程,以下权当做个笔记
初识 pygame
pygame最小开发框架主要包含两个方面 —— 引入库和初始化,主循环和刷新
- 引入主要是引入自己要用到的库
- 初始化主要是初始化窗体,主要包括窗体的大小,窗体的名称,图标等等
- 主循环主要是接收操作,逻辑判断,事件处理和刷新游戏等
根据教程的壁球小游戏,我直接贴上老师的代码:
初始化部分
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
| import pygame, sys from pygame.locals import *
pygame.init()
sysSize = pygame.display.Info() size = width, height = 400, 600 speed = [1, 1] BLACK = 255, 255, 255
screen = pygame.display.set_mode(size)
pygame.display.set_caption("壁球") icon = pygame.image.load("F:\\PYG02-ball.gif")
pygame.display.set_icon(icon)
|
- 首先,
pygame.init()
代表初始化pygame,也就是所有用pygame写的第一句代码
- 之后可以看到初始化部分主要依托于
pygame.XXX()
的属性设置来完成,具体属性见代码注释
- 比如:
pygame.display.set_mode()
来设置窗体大小
pygame.display.set_caption()
来设置窗体名称
pygame.display.set_icon(icon)
设置窗体图标 等等......
pygame.display.Info()
来获取系统,也就是自己电脑的屏幕尺寸大小
主循环和刷新
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50
| ball = pygame.image.load("F:\\PYG02-ball.gif")
ballRect = ball.get_rect() fps = 500 fClock = pygame.time.Clock()
running = True while running: for event in pygame.event.get(): if event.type == pygame.QUIT: sys.exit() elif event.type == KEYDOWN: if event.key == K_ESCAPE: running = False elif event.key == K_LEFT: speed[0] = speed[0] if speed[0] == 0 else (abs(speed[0]) - 1) * int(speed[0]/abs(speed[0])) elif event.key == K_RIGHT: speed[0] = speed[0] + 1 if speed[0] > 0 else speed[0] - 1 elif event.key == K_DOWN: speed[1] = speed[1] if speed[1] == 0 else (abs(speed[1]) - 1) * int(speed[1]/abs(speed[1])) elif event.key == K_UP: speed[1] = speed[1] + 1 if speed[1] > 0 else speed[1] - 1 elif event.type == pygame.VIDEORESIZE: size = width, height = event.size[0], event.size[1] screen = pygame.display.set_mode(size, pygame.RESIZABLE)
if pygame.display.get_active(): ballRect = ballRect.move(speed[0], speed[1]) if ballRect.left < 0 or ballRect.right > width: speed[0] = -speed[0] if ballRect.top < 0 or ballRect.bottom > height: speed[1] = -speed[1]
screen.fill(BLACK) screen.blit(ball, ballRect) pygame.display.update() fClock.tick(fps)
|
- 载入图片,之后会保存为
surface
对象,因此载入的图片可以运用其方法和属性
for event in pygame.event.get():
pygame 中的事件都储存在队列中,需要逐次取出
event.type == KEYDOWN
表示按下某个键,在此判断内,可以进而匹配是按下了什么键
screen.fill(BLACK)
窗口的背景色,直接可以传RGB值
pygame.display.update()
刷新画面,适用于变换场景简单的画面
fClock.tick(fps)
控制帧率