python做2d游戏,用的最多的就是pygame库,虽然比较老了,但是非常经典。尽管现在有很多其它游戏的库,可是都封装的比较多了,很多非常重要的细节都被隐藏了。
设计的课程还是采用了这个库,我把一些常用的整理出来了,
学习库最好的方法还是看文档,非常详细,且每个方法都有介绍。
文档:https://www.pygame.org/docs/
自学pygame或者学习这种类似库的时候,首先看自己是要解决那部分的问题,找到对应的方法;一般方法都会有说是用来干什么的。
然后就是看这个方法需要传入什么内容,然后返回什么内容;知道这两点基本上就可以上手使用了,想要了解更底层就可以看源代码。
最简框架
写游戏也是有基本套路的,首先是一个可以跑起来的基本框架;
import pygame
import sys
pygame.init()
window = pygame.display.set_mode([600, 400])
pygame.display.set_caption('标题')
while True:
# 事件循环
for event in pygame.event.get():
if event.type == pygame.QUIT:
sys.exit()
# 游戏逻辑
# 图形绘制渲染
#刷新屏幕
pygame.display.update()
事件
键盘,比如控制左右移动,其它数字键字符类似。
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_LEFT:
pos_x -= 3
if event.key == pygame.K_RIGHT:
pos_x += 3
鼠标控制,鼠标控制有获取鼠标位置,跟随鼠标移动的;
pos = pygame.mouse.get_pos() # 获取鼠标位置(x,y)
也有鼠标左中右点击的;
if event.type == pygame.MOUSEBUTTONDOWN:
state_list = pygame.mouse.get_pressed()
if state_list[0]==1: # 左键
pass
if state_list[1] == 1: # 中键
pass
if state_list[2] == 1: # 右键
pass
pygame.Surface 对象
可以看作一个图像对象,这个概念非常重要,屏幕上看见的图形都是这个对象;
不管是图片加载返回的对象:
pygame.image.load -> Surface
load(filename) -> Surface
load(fileobj, namehint="") -> Surface
save(Surface, filename) -> None
直接生成对象;
surface = pygame.Surface([width,height])
绘制的几何图形;
# 绘制一条线
pygame.draw.line(screen, [200,0,0], [0, 0], [50, 30], 5)
# 绘制一个空心矩形
pygame.draw.rect(screen, [200,0,0], [75, 10, 50, 20], 2)
# 绘制一个矩形
pygame.draw.rect(screen, [200,0,0], [150, 10, 50, 20])
# 绘制一个圆
pygame.draw.circle(screen, [200,0,0], [60, 250], 40)
# 绘制弧线
pygame.draw.arc(screen, [200,0,0], [210, 75, 150, 125], 0, pi/2, 2)
还是绘制的字体文本对象
pygame.font.render()
draw text on a new Surface
render(text, antialias, color, background=None) -> Surface
sprite类
这个对于管理多个游戏对象非常有用,
sprite = pygame.sprite.Sprite()
sprite_list = pygame.sprite.Group()
绘制图形和检测游戏对象碰撞都非常方便。
还是时间,图形转换,声音什么的就不讲了,都是单独的方法,一看就能明白;
游戏类型
不知道做什么游戏?
打开小游戏网站,看见什么好玩做什么;
通常大家做的最多的就是射击类游戏,一般这种最简单,只需要控制移动就行了;
要想全面理解各种游戏设计思路,可以每种都是一些,很多游戏是需要有很好的数据设计结构,不然后面变动非常麻烦;
经典的有贪吃蛇,俄罗斯方块,推箱子,连连看,五子棋,这些都是利用到一些数据结构的,能做出这些,一般的游戏都没问题;
还有联机游戏,就需要用到网络编程相关知识了,相当于多了一个中间环节,这个有时间再讲。
(全文完)