设为首页收藏本站

Crossin的编程教室

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

【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
回复

使用道具 举报

0

主题

1

好友

34

积分

新手上路

Rank: 1

49#
发表于 2019-12-16 14:06:18 |只看该作者
周末晒被子 发表于 2015-12-24 00:24
本来不知道怎么解决“4张图片列表循环”这个问题的,感觉很简单,尝试过用 for...in... 放在 while 循环的 ...

hahaha , 我觉得%的用法比len还好用呢
回复

使用道具 举报

174

主题

45

好友

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

48#
发表于 2018-11-11 17:22:02 |只看该作者
东东哥 发表于 2018-11-10 17:07
((630, 300), 0, 32)老师这个(0,32)是什么意思

set_mode 的参数,一共三个,前面第一个是一个坐标原则,0和32是后面两个参数。具体含义我忘了,一般不用改,似乎默认不给也可以,可以查文档,32好像是图片像素是32位
#==== Crossin的编程教室 ====#
微信ID:crossincode
网站:http://crossincode.com
回复

使用道具 举报

6

主题

0

好友

166

积分

注册会员

Rank: 2

47#
发表于 2018-11-10 17:07:36 |只看该作者
((630, 300), 0, 32)老师这个(0,32)是什么意思
回复

使用道具 举报

6

主题

0

好友

166

积分

注册会员

Rank: 2

46#
发表于 2018-11-10 16:48:37 |只看该作者
test777 发表于 2013-9-11 00:32
两张图片轮流切换

index=2是什么意思
回复

使用道具 举报

6

主题

0

好友

166

积分

注册会员

Rank: 2

45#
发表于 2018-11-10 16:22:16 |只看该作者
jpjlqone 发表于 2013-8-22 13:45

你好,请问第四句是什意思
回复

使用道具 举报

0

主题

0

好友

26

积分

新手上路

Rank: 1

44#
发表于 2018-6-3 19:24:45 |只看该作者
#-*- coding:utf-8 -*-
import pygame
from sys import exit
pygame.init()
screen=pygame.display.set_mode((520,520),0,32)#创建一个窗口,大小和背景图片一样大
pygame.display.set_caption('hello,World!')#设置窗口标题
background1 = pygame.image.load('pic1.jpg').convert()#加载并转换图像
background2 = pygame.image.load('pic2.jpg').convert()
background = background1
n=0
while True:
#游戏主循环
    for event in pygame.event.get():
      
        if event.type == pygame.QUIT:
        #接收到退出事件后退出程序
            pygame.quit()
            exit()
        if event.type == pygame.MOUSEBUTTONDOWN:
            #接收到鼠标按下事件后更换背景
            n+=1
            if n%2==0:
                background = background1
                #print('a')
            if n%2==1:
                background = background2
                #print('b')
            
    screen.blit(background,(0,0))#将背景图画上去
    pygame.display.update()#刷新一下画面


完成,虽然有点笨!
回复

使用道具 举报

2

主题

0

好友

44

积分

新手上路

Rank: 1

43#
发表于 2018-5-18 22:02:21 |只看该作者
crossin先生 发表于 2018-5-17 22:48
用来做个标记,每次点击就切换一下

已经搞懂了  谢谢先生
回复

使用道具 举报

174

主题

45

好友

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

42#
发表于 2018-5-17 22:48:43 |只看该作者
少年与猫. 发表于 2018-5-16 15:59
请问一下 target 在代码里面的作用具体是什么

用来做个标记,每次点击就切换一下
#==== Crossin的编程教室 ====#
微信ID:crossincode
网站:http://crossincode.com
回复

使用道具 举报

2

主题

0

好友

44

积分

新手上路

Rank: 1

41#
发表于 2018-5-16 15:59:31 |只看该作者
jpjlqone 发表于 2013-8-22 13:45

请问一下 target 在代码里面的作用具体是什么
回复

使用道具 举报

0

主题

0

好友

24

积分

新手上路

Rank: 1

40#
发表于 2017-11-9 10:01:58 |只看该作者
test777 发表于 2013-9-11 00:32
两张图片轮流切换

强!
回复

使用道具 举报

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

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

GMT+8, 2024-5-3 05:12 , Processed in 0.027031 second(s), 27 queries .

Powered by Discuz! X2.5

© 2001-2012 Comsenz Inc.

回顶部