Python pygame 项目实战事件监听

目录
  • 1. 在游戏循环中监听事件
  • 2. 案例演示
    • 2.1 案例概览
    • 2.2 运行结果

1. 在游戏循环中监听事件

事件event:

  • 就是游戏启动后,用户针对游戏所做的操作
  • 例如:点击关闭按钮,点击鼠标,按下键盘

监听:

  • 在游戏循环中,判断用户具体操作
  • 只有捕获到用户具体的操作,才能有针对性的做出响应
  • 简而言之,在游戏循环中编写一小段代码,通过这一小段代码,判断用户的具体操作行为,这个就叫做监听

代码实现:

  • pygame中通过pygame.event.get()可以获得用户当前所做动作的事件列表(因为同一时间用户所作的操作可能会有很多件)
  • 用户可以同一时间做很多事情
  • 提示:这段代码非常的固定,几乎所有的pygame游戏都大同小异!

2. 案例演示

2.1 案例概览

本节,我们将在上一小节的基础上(详情请见本专栏上一篇文章),完成捕获用户所做的动作事件列表。

以下代码中,使用了pygame.event.get()方法,get方法返回的类型为列表类型,因此,我们使用event_list变量来接收get方法返回的结果。但是,如果仅仅是这样改造代码,运行时在程序控制台输出了很多空的列表。因此,我们可以考虑增加if判断,判断是否用户进行了操作事件(是否有操作事件发生)。此时,再运行程序,就可以输出很多操作细节了。(可以移动鼠标或者按下键盘试试),控制台会输出捕获的用户操作。

import pygame
pygame.init()

# 创建游戏的窗口 640*642
screen = pygame.display.set_mode((640, 642))

# 绘制背景图像
bg = pygame.image.load("./飞机大战资料包/images/background1.jpg")
screen.blit(bg, (0, 0))

# 绘制英雄的飞机
hero = pygame.image.load("./飞机大战资料包/images/me1.png")
screen.blit(hero, (280, 500))

# 可以在所有绘制工作完成之后,统一调用update方法
pygame.display.update()

# 创建时钟对象
clock = pygame.time.Clock()

# 游戏循环->意味着游戏的正式开始

# 1. 定义rect记录飞机的初始位置
hero_rect = pygame.Rect(280, 500, 102, 126)

# 游戏循环->意味着游戏的正式开始
while True:
    # 希望无限循环内部的代码每秒钟重复循环60次
    # 可以指定循环体内部的代码执行的频率
    clock.tick(60)

    # 捕获事件
    event_list = pygame.event.get()
    if len(event_list) > 0:
        print(event_list)

    # 2. 修改飞机的位置
    hero_rect.y -= 1
    # 判断飞机的位置
    if hero_rect.y <= -126:
        hero_rect.y = 642

    # 3. 调用blit方法绘制图像
    # 先绘制背景,在绘制飞机,就不会留下残影(背景把上一次的飞机遮挡)
    screen.blit(bg, (0, 0))
    screen.blit(hero, hero_rect)

    # 4. 调用update方法更新显示
    pygame.display.update()
pygame.quit()

2.2 运行结果

运行结果如下所示:

到此这篇关于Python pygame 项目实战事件监听的文章就介绍到这了,更多相关Python事件监听内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • Python pygame项目实战监听退出事件

    目录 1. 事件监听 2. 案例演示 2.1 案例大体思路 2.2 代码演示 2.3 运行结果 1. 事件监听 首先,我们简单回顾一下事件监听,可以简单概括如下: 在游戏循环中,我们希望判断用户具体操作 只有捕获到用户具体的操作,才能有针对性的做出响应 简而言之,在游戏循环中编写一小段代码,通过这一小段代码,判断用户的具体操作行为,这个就叫做监听 注意:我们想在游戏中实现监听退出事件并且退出游戏,其实代码非常固定(代码形式都差不多),因为几乎所有的pygame游戏都大同小异. 2. 案例演示 2

  • Python+Pygame实现经典魂斗罗游戏

    目录 一.效果展示 二.操作说明 三.核心代码 今天分享一个经典小游戏魂斗罗的 Python 版实现. 一.效果展示 二.操作说明 A:向左 D:向右 W:跳起 S:趴下 J:射击 P:退出程序 目前游戏还是比较初级的版本,有兴趣的小伙伴可以自行修改完善. 三.核心代码 class Game_Player(): def __init__(self,game_settings,screen): self.screen = screen self.game_settings = game_setti

  • python pygame实现五子棋双人联机

    本文实例为大家分享了python pygame实现五子棋双人联机的具体代码,供大家参考,具体内容如下 同一局域网内,服务端开启时,另一机器将IP地址HOST改为服务端对应的IP地址.端口号与服务端的保持一致即可实现双人联机.(IP地址查询方式:菜单栏输入cmd,cmd窗口输入ipconfig找到无线网络下的IPv4地址) 服务端: # -*- coding: utf-8 -*- """ Created on Tue Jun  8 14:03:09 2021 @author:

  • Python+Pygame实现神庙逃亡游戏

    目录 游戏规则 精灵类 加载龙 加载子弹 添加玩家 碰撞事件 完整代码 游戏规则 用pygame动画实现神庙逃亡类似的小游戏,当玩家移动的时候躲避子弹,如果子弹命中玩家或者名字龙都会减速,玩家躲避子弹使更多的子弹打在龙上,当玩家被龙抓到,则游戏输,如果龙被子弹减少速度,与玩家有一定的距离,则玩家获胜. 精灵类 class MySprite(pygame.sprite.Sprite): def __init__(self, target): pygame.sprite.Sprite.__init_

  • Python+Pygame实现趣味足球游戏

    目录 导语 一.环境安装 二.代码展示 三.效果展示 1)加载界面 2)开始游戏界面 3)开始游戏 ​4)游戏运行 导语 ​足球运动有着“世界第一运动”的美称,还是全球最具影响力的体育运动项目之一. ​小小的足球在滚动中能释放满满的能量和快乐. 足球游戏不仅可以锻炼大家的协调和反应能力,还能提高身体素质哦~ 喜欢足球的小可爱,这一期可以大饱眼福啦 小编准备出一期关于足球的编程代码给大家哦~还有那些喜欢看足球赛的可以自己上jio啦​ ​​温馨提示: 足球游戏时,一定要注意.场地要安全,服装要选好.

  • Python pygame新手入门基础教程

    目录 pygame简介 pygame实现窗口 设置屏幕背景色 添加文字 绘制多边形 绘制直线 绘制圆形 绘制椭圆 绘制矩形 总结 pygame简介 pygame可以实现python游戏的一个基础包. pygame实现窗口 初始化pygame,init()类似于java类的初始化方法,用于pygame初始化. pygame.init() 设置屏幕,(500,400)设置屏幕初始大小为500 * 400的大小, 0和32 是比较高级的用法.这样我们便设置了一个500*400的屏幕. surface

  • Python+Pygame实现之走四棋儿游戏的实现

    目录 导语 一.游戏解说 二.游戏规则 三.环境安装 四.代码展示 五.效果展示 导语 大家以前应该都听说过一个游戏:叫做走四棋儿 这款游戏出来到现在时间挺长了,小时候的家乡农村条件有限,附近也没有正式的玩具店能买到玩具,因此小朋友们聚在一起玩耍时,其玩具大多都是就地取材的. 直接在家里的水泥地上用烧完的炭火灰画出几条线,摆上几颗石头子即可.当时的火爆程度可谓是达到了一个新的高度.包括我当时也比较喜欢这款游戏.因为时间推移,小时候很多游戏都已经在现在这个时代看不到啦! 今天小编就带大家追忆童年—

  • python pygame实现打砖块游戏

    本文实例为大家分享了python pygame实现打砖块游戏的具体代码,供大家参考,具体内容如下 最近在尝试着写一个用强化学习的方法玩打砖块的游戏,首先将游戏环境做些改动,以便产生需要的数据 游戏环境的界面以及代码如下 import sys sys.path.append(r'E:\anaconda\Lib\site-packages') import pygame import sys import random import time import math from tkinter imp

  • Python pygame 项目实战事件监听

    目录 1. 在游戏循环中监听事件 2. 案例演示 2.1 案例概览 2.2 运行结果 1. 在游戏循环中监听事件 事件event: 就是游戏启动后,用户针对游戏所做的操作 例如:点击关闭按钮,点击鼠标,按下键盘 监听: 在游戏循环中,判断用户具体操作 只有捕获到用户具体的操作,才能有针对性的做出响应 简而言之,在游戏循环中编写一小段代码,通过这一小段代码,判断用户的具体操作行为,这个就叫做监听 代码实现: pygame中通过pygame.event.get()可以获得用户当前所做动作的事件列表(

  • Python pygame项目实战英雄动画特效实现

    目录 1. 英雄的简单动画实现 2. 代码演示 1. 英雄的简单动画实现 需求: 在游戏初始化定义一个pygame.Rect的变量记录英雄的初始位置 在游戏循环中每次让英雄的y-1--向上移动(y值减1相当于向屏幕上方上移动1) y<=0将英雄移动到屏幕的底部 友情提示: 每一次调用update()方法之前,需要把所有的游戏图像都重新绘制一遍 而且应该最先重新绘制背景图像 2. 代码演示 案例大体思路概括: 在游戏循环上方,定义rect记录飞机的初始位置 在游戏循环内部,修改飞机位置:让飞机的y

  • vue项目中销毁window.addEventListener事件监听解析

    目录 销毁window.addEventListener事件监听 window.addEventListener监听scroll事件 解决办法 使用throttle出现的新问题 最后代码 销毁window.addEventListener事件监听 今天在做项目的过程中,组件中调用iframe时,由于在组件的created方法中写了监听,用于接收iframe发来的信息,但是在组件销毁的时候并没有去掉监听,导致组件创建几次,监听方法就会执行几次,特此记录 created() {     window

  • Android TextView实现带链接文字事件监听的三种常用方式示例

    本文实例讲述了Android TextView实现带链接文字事件监听的三种常用方式.分享给大家供大家参考,具体如下: /** * TextView实现文字链接跳转功能 * @description: * @author ldm * @date 2016-4-21 下午4:34:05 */ public class TextViewLinkAct extends Activity { private TextView tv_3; private TextView tv_4; @Override p

  • Spring的事件监听机制示例详解

    前言 最近公司在重构广告系统,其中核心的打包功由广告系统调用,即对apk打包的调用和打包完成之后的回调,需要提供相应的接口给广告系统.因此,为了将apk打包的核心流程和对接广告系统的业务解耦,利用了spring的事件监听特性来满足需求.以下说明spring的事件机制的相关内容. 首先spring事件分为事件发布者(EventPublisher).事件监听者(EventListener),还包括一个事件广播者(这个是spring实现相关,这一节不讨论).使用spring事件机制,需要自定义事件发布

  • 基于 jQuery 实现键盘事件监听控件

    最近项目里要做一个画板,需要对键盘事件进行监听,来进行诸如撤回.重做.移动.缩放等操作,因此顺手实现了一个键盘事件监听控件,期间略有收获,整理出来,希望对大家有所帮助,更希望能获得高手的指点. 1. 自动获取焦点 似乎浏览器的键盘事件只能被那些可以获得焦点的元素设置监听,而通常需要监听事件的 <DIV>.<CANVAS> 元素都不能获得焦点,因此需要修改目标元素的某些属性使其可以获得焦点,另外一种可行的方法是将事件委托给诸如 <INPUT> 标签.这里采用的是第一类方法

  • javascript事件监听与事件委托实例详解

    本文实例讲述了javascript事件监听与事件委托.分享给大家供大家参考,具体如下: 事件监听与事件委托 在js中,常用到element.addEventListener()来进行事件的监听.但是当页面中存在大量需要绑定事件的元素时,这种方式可能会带来性能影响.此时,我们可以用事件委托的方式来进行事件的监听. 每个事件都经历三个阶段 捕获 到达目标 冒泡 事件委托需要用到事件的冒泡,冒泡就是事件发生时,上层会一层一层的接收这个事件. 如下页面结构: <body> <div id=&qu

  • vue.js项目 el-input 组件 监听回车键实现搜索功能示例

    基于element-ui 组件 开发的vue.js项目, 实现回车键发起搜索,和原生的input 标签使用方法不一样: el-input 监听键盘按下状态 得用@keyup.enter.native,如果是非el-input 组件,可以直接用@keyup.enter <el-input placeholder="搜索" icon="search" v-model="input" :on-icon-click="pchandleIc

  • vue 实现移动端键盘搜索事件监听

    1.首先注意,input的type="serch" <input @keypress="searchGoods" type="serch" placeholder="搜索商品"> 2.监听keypress事件 (1)KeyDown.KeyUp 事件 这些事件是当一个对象具有焦点时按下 ( KeyDown ) 或松开 ( KeyUp ) 一个键时发生的.(要解释 ANSI 字符,应使用 KeyPress 事件.) (

随机推荐