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()
绘制图形和检测游戏对象碰撞都非常方便。
还是时间,图形转换,声音什么的就不讲了,都是单独的方法,一看就能明白;
游戏类型
不知道做什么游戏?
打开小游戏网站,看见什么好玩做什么;
通常大家做的最多的就是射击类游戏,一般这种最简单,只需要控制移动就行了;
要想全面理解各种游戏设计思路,可以每种都是一些,很多游戏是需要有很好的数据设计结构,不然后面变动非常麻烦;
经典的有贪吃蛇,俄罗斯方块,推箱子,连连看,五子棋,这些都是利用到一些数据结构的,能做出这些,一般的游戏都没问题;
还有联机游戏,就需要用到网络编程相关知识了,相当于多了一个中间环节,这个有时间再讲。
(全文完)
本文分享自微信公众号 - 叶子陪你玩编程(gh_cd062460d25e),作者:青叶子
原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。
原始发表时间:2020-09-23
本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。
我来说两句