pygame游戏常用方法
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()
绘制图形和检测游戏对象碰撞都非常方便。
还是时间,图形转换,声音什么的就不讲了,都是单独的方法,一看就能明白;
游戏类型
不知道做什么游戏?
打开小游戏网站,看见什么好玩做什么;
通常大家做的最多的就是射击类游戏,一般这种最简单,只需要控制移动就行了;
要想全面理解各种游戏设计思路,可以每种都是一些,很多游戏是需要有很好的数据设计结构,不然后面变动非常麻烦;
经典的有贪吃蛇,俄罗斯方块,推箱子,连连看,五子棋,这些都是利用到一些数据结构的,能做出这些,一般的游戏都没问题;
还有联机游戏,就需要用到网络编程相关知识了,相当于多了一个中间环节,这个有时间再讲。
(全文完)
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- CORS Cross Origin Resource Sharing
- 从0开始做播放器-第二季-第2章-Android NDK 工程的建立和 JNI 的基本用法
- 记一次线上问题排查-maven父子结构依赖所遇到的坑
- 『技术随手学』解决 pip conda install 网络故障中断
- boost asio
- 7.SwrContext音频重采样使用
- 8.ffmpeg-基础常用知识
- 9.下载ffmpeg、使QT支持同时编译32位和64位
- 10.QT-QAudioOutput类使用
- 11.QT-ffmpeg+QAudioOutput实现音频播放器
- Spring JPA 自定义删改
- LeetCode-28.实现 strStr()
- 【工具篇】程序员不愿意写 PPT 是姿势不对?
- 机器学习还能预测心血管疾病?没错,我用Python写出来了
- Fasttext 总结