设为首页收藏本站

Crossin的编程教室

 找回密码
 立即加入
查看: 47159|回复: 13
打印 上一主题 下一主题

【Pygame 第3课】 游戏中的事件

[复制链接]

174

主题

45

好友

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

跳转到指定楼层
楼主
发表于 2013-8-21 19:15:17 |显示全部楼层 |倒序浏览
有人问,为什么突然讲游戏了?有人问,为什么不继续讲python的基础?有人问,为什么不讲爬虫?有人问,为什么不讲算法?……

因为有很多内容,每一块都有想听的人。因为同时不可能推送很多内容。因为我喜欢游戏开发,制作一款游戏的过程很有趣。我会尽量在论坛上补充更多方面的内容。微信上的推送有天生的限制,不能让所有人满足,大家见谅。

上次课讲了游戏最根本的框架,说到在每次循环中会接收玩家的操作。这是游戏中很重要的一个环节--事件响应。

玩家的操作会触发程序中的事件,常见的事件包括:关闭程序、按下键盘、移动鼠标、按下鼠标等等。今天我们挑其中一个来举例说明:“鼠标按下”事件(MOUSEBUTTONDOWN)。

还记得上次课中的这段代码吗:
  1. for event in pygame.event.get():
  2.     if event.type == pygame.QUIT:
  3.         #接收到退出事件后退出程序
  4.         pygame.quit()
  5.         exit()
复制代码
它就是一段事件响应的处理代码。pygame.event.get()会接收所有程序中的事件。当判断这个事件是一个关闭程序(QUIT)的事件时,就将程序关闭。

现在,我们要增加一个事件响应:当玩家点击了鼠标之后,就换一张背景图。

在for循环中新增一段if语句:
  1. if event.type == pygame.MOUSEBUTTONDOWN:
  2.     #接收到鼠标按下事件后更换背景
  3.     background = pygame.image.load('bg2.jpg').convert()
复制代码
pygame.image.load().convert()是将图片文件读入程序,后面的.convert()可以省略。

运行程序,在窗口上点击鼠标,背景会变成bg2.jpg的图案。为了显示效果,最好使用和bg.jpg长宽一样的图片。

3.png


不过点击了一次之后,背景就不会再变了。而实际上,在你每次点击的时候,程序都会去读取一遍bg2.jpg,这是没有必要。把这个程序的改进留给你们:点击鼠标的时候,背景可以在2张甚至多张图片间切换,另外最好不要每次都去读文件。

#==== Crossin的编程教室 ====#
微信ID:crossincode
论坛:http://crossin.me
QQ群:312723402

面向零基础初学者的编程课
每天5分钟,轻松学编程



#==== Crossin的编程教室 ====#
微信ID:crossincode
网站:http://crossincode.com
回复

使用道具 举报

174

主题

45

好友

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

沙发
发表于 2013-9-5 21:05:47 |显示全部楼层
aresli 发表于 2013-9-5 11:34
为什么一模一样的代码,我的程序出来点击不能切换图片呢?
难道这就是pygame版本不同导致的? ...

在if event.type == pygame.MOUSEBUTTONDOWN:这个if里面增加一些输出,比如
print ‘button down’
看看控制台下有没有输出,以确定程序是不是运行到了这里。然后再分析原因,为什么会有这样的现象。


不过你这里的问题我已经看出来了。。。background拼错了
#==== Crossin的编程教室 ====#
微信ID:crossincode
网站:http://crossincode.com
回复

使用道具 举报

174

主题

45

好友

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

板凳
发表于 2013-10-13 16:32:19 |显示全部楼层
TongShan 发表于 2013-10-13 14:53
请问为什么pygame.image.load().convert()后面的convet()是可以省略的呢?

convert是将读进来的图片做一些像素转换,比如颜色深度、遮罩等,如果不加任何参数,这个转换是可以省略的。但如果我们要用到一张带透明部分的图片,就必须用另一个类似的方法convert_alpha,这时候就不能省略了
#==== Crossin的编程教室 ====#
微信ID:crossincode
网站:http://crossincode.com
回复

使用道具 举报

174

主题

45

好友

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

地板
发表于 2015-12-24 11:42:51 |显示全部楼层
周末晒被子 发表于 2015-12-24 00:26
就是不知道为什么我的图片路径一定要用绝对路径,不能像楼上各位一样简单得用"bg.jpg"... ...

你是不是通过编辑器直接运行的?这样有时候路径会比较奇怪。试试在命令行下运行
#==== Crossin的编程教室 ====#
微信ID:crossincode
网站:http://crossincode.com
回复

使用道具 举报

174

主题

45

好友

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

5#
发表于 2015-12-25 10:51:53 |显示全部楼层
周末晒被子 发表于 2015-12-24 23:54
是在编辑器运行的。试了下在白色背景的命令行(Python 2.75 Shell)运行,没反应,就跟什么都不输入,直接 ...

在系统命令行下运行
python xxx.py
这时候相对路径的当前目录,就是你执行这个命令的所在目录
#==== Crossin的编程教室 ====#
微信ID:crossincode
网站:http://crossincode.com
回复

使用道具 举报

174

主题

45

好友

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

6#
发表于 2015-12-26 18:24:03 |显示全部楼层
周末晒被子 发表于 2015-12-25 13:58
在系统命令行运行”python Firstpygame.py“,能看到一个黑色命令行窗口一闪而过。
先生这是为什么呢?
明 ...

是因为执行完,窗口就关闭了。非要用这种方式运行的话,在结尾加一个input,让程序停下来等待输入
#==== Crossin的编程教室 ====#
微信ID:crossincode
网站:http://crossincode.com
回复

使用道具 举报

174

主题

45

好友

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

7#
发表于 2016-1-28 13:18:01 |显示全部楼层
hermit0308 发表于 2016-1-28 10:01
请问可不可以让不同尺寸的图片自适应固定的窗口大小?

获取窗口的大小,然后缩放图片
#==== Crossin的编程教室 ====#
微信ID:crossincode
网站:http://crossincode.com
回复

使用道具 举报

174

主题

45

好友

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

8#
发表于 2016-1-28 13:18:18 |显示全部楼层
hermit0308 发表于 2016-1-28 10:01
请问可不可以让不同尺寸的图片自适应固定的窗口大小?

获取窗口的大小,然后缩放图片
#==== Crossin的编程教室 ====#
微信ID:crossincode
网站:http://crossincode.com
回复

使用道具 举报

174

主题

45

好友

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

9#
发表于 2016-8-26 16:13:14 |显示全部楼层
lulu 发表于 2016-8-26 16:03
为什么我这样就切换不了图片呢:
if bg==pygame.image.load('D:\\Python27\\workspaces\\1.jpg').convert() ...

每次调用load会生成新对象,前一种写法本身也不对
#==== Crossin的编程教室 ====#
微信ID:crossincode
网站:http://crossincode.com
回复

使用道具 举报

174

主题

45

好友

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

10#
发表于 2016-9-7 15:41:43 |显示全部楼层
Phoestia 发表于 2016-9-7 12:58
学了这一课之后,想在几张照片随机的基础上,加上从网站上扒下来图,储存,再随机切换。。。

然而,写了两 ...

保存图片就是把图片内容以二进制形式保存到文件里。你搜下 “python 下载图片”之类的,应该会找到很多例子
#==== Crossin的编程教室 ====#
微信ID:crossincode
网站:http://crossincode.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即加入

QQ|手机版|Archiver|Crossin的编程教室 ( 苏ICP备15063769号  

GMT+8, 2024-5-3 00:18 , Processed in 0.034190 second(s), 27 queries .

Powered by Discuz! X2.5

© 2001-2012 Comsenz Inc.

回顶部