var flag = true; function onlyOne() { if(flag) { "这里是要执行的代码"; } flag = false//该方法是控制函数仅执行一次...因为flag是全局变量 onlyOne()函数执行一次后flag就变成false了 函数就执行不了了
附录 A:与 Pygame 集成 本附录显示了如何在 OpenCV 应用中设置 Pygame 库以及如何使用 Pygame 进行窗口管理。...每个事件的类型均为pygame.event.Event,并具有属性 type,它指示事件的类别,例如pygame.KEYDOWN表示按键,pygame.QUIT 表示窗口的关闭按钮被点击。...总结 到现在为止,我们应该有一个应用,该应用使用 OpenCV 捕获(并可能操纵)图像,同时使用 Pygame 显示图像和捕获事件。...、 查找训练可执行文件 为了使级联训练尽可能自动化,OpenCV 提供了两个可执行文件。 它们的名称和位置取决于操作系统和 OpenCV 的特定设置,如以下两节所述。...同时,images/positive 1.png包含目标的两个实例。 一个实例位于子矩形中,该子矩形的左上角为(200, 120),而其右下角为(240, 180)。
一个重要的需求是: 设计应包含一些游戏状态(如游戏简介、关卡和“游戏结束”状态); 同时可轻松地添加新状态。...4.7 pygame.event 模块pygame.event跟踪各种事件,如鼠标单击、鼠标移动、按下或松开键等。要获取最近发生的事件列表,可使用函数pygame.event.get。...将这个对象添加到RenderUpdates编组sprites中。(处理多个Sprite对象时,这样做很有帮助。) 4) 使用pygame.event.get获取最近发生的所有事件,并依次检查这些事件。...如果发现事件QUIT或因按下Escape键(K_ESCAPE)而触发的KEYDOWN事件,就退出程序。(事件类型和键分别存储在事件对象的属性type和key中。...要运行这个程序,可使用下面的命令: python weights.py 执行这个命令时,必须确保weights.py和weight.png(铅锤图像)都在当前目录中。
设计应包含一些游戏状态(如游戏简介、关卡和“游戏结束”状态),同时可轻松地添加新状态。...2.7.pygame.event 模块pygame.event跟踪各种事件,如鼠标单击、鼠标移动、按下或松开键等。要获取最近发生的事件列表,可使用函数pygame.event.get。...将这个对象添加到RenderUpdates编组sprites中。(处理多个Sprite对象时,这样做很有帮助。) (4)使用pygame.event.get获取最近发生的所有事件,并依次检查这些事件。...如果发现事件QUIT或因按下Escape键(K_ESCAPE)而触发的KEYDOWN事件,就退出程序。(事件类型和键分别存储在事件对象的属性type和key中。...要运行这个程序,可使用下面的命令: python weights.py 执行这个命令时,必须确保weights.py和weight.png(铅锤图像)都在当前目录中。
1 函数check_events() 将check_events()放在一个名为game_functions的模块中,在该函数主要是管理事件的功能,通过隔离事件循环,可将事件管理与游戏的其他方面(如更新屏幕...事件都是通过方法pygame.event.get()获取的,因此在函数check_events()中,我们需要指定要检查哪些类型的事件。每次按键都被注册为一个KEYDOWN事件。...代码见下面: 3 调整飞船的速度 当前,每次执行while循环时,飞船最多移动1像素,但我们可以在Settings类中添加属性ship_speed_factor,用于控制飞船的速度。...下面演示了如何在settings.py中添加这个新属性: 4 限制飞船的活动范围 当前,如果玩家按住箭头键的时间足够长,飞船将移到屏幕外面,消失得无影无踪。...通过使用精灵,可将游戏中相关的元素编组,进而同时操作编组中的所有元素。
通过“clockalarm”功能块,可以实现事件单次执行,或每年,每月,每日,每小时,每分钟以及每秒执行。...描述 通过“clockalarm”功能块的输入参数定义事件的开始时间,禁用不需要的时间单位(例如,年,月,日,…)等下表中列出的参数。...功能块会将配置的参数与系统时间进行比较,当定义的时间与系统时间相同时,“clockalarm”功能块输出管脚输出True信号。...例子 一个每天的事件用"ClockAlarm" 定义为本地时间14:50执行。 详细设置如下: 1、设置输入参数“小时 使能”和“分 使能”为 真 信号。具体输入参数“小时”和“分钟”的数值。...数字量"Ret_Val" 被设定为每天本地时间14:50时被程序调用执行.图1 显示了参数设置情况。 图.1 注意 "ClockAlarm" 功能块参数也可以通过DB和面板设置。
通过隔离事件循环,可将事件管理与游戏的其他方面(如更新屏幕)分离。...通过这样做,你将学会如 何控制屏幕图像的移动。 12.6.1 响应按键 每当用户按键时,都将在Pygame中注册一个事件。...事件都是通过方法pygame.event.get()获 取的,因此在函数check_events()中,我们需要指定要检查哪些类型的事件。每次按键都被注册 为一个KEYDOWN事件。...最后,我们需要修改alien_invasion.py中的while循环,以便每次执行循环时都调用飞船的 方法update(): alien_invasion.py # 开始游戏主循环 while...这里之所以可以使用elif代码块,是因为每个事件都只与一个键相关联;如果玩家同时按下了左右箭头键,将检测到 两个不同的事件。
12.6.4 调整飞船的速度 当前,每次执行while循环时,飞船最多移动1像素,但我们可以在Settings类中添加属性 ship_speed_factor,用于控制飞船的速度。...下面演示了如何在settings.py中添加这个新属性: settings.py class Settings(): """一个存储游戏《外星人入侵》的所有设置的类""" def __init...12.6.6 重构 check_events() 随着游戏开发的进行,函数check_events()将越来越长,我们将其部分代码放在两个函数中: 一个处理KEYDOWN事件,另一个处理KEYUP事件...这两个函数的代码是从check_events()中复制而来的,因此我们将函数check_events 中相应的代码替换成了对这两个函数的调用。...通过使用精灵,可将游戏中相 关的元素编组,进而同时操作编组中的所有元素。
如果你还想启用较高级的功能,如在游戏中包含声音,可安装下面两个额外的库: $ brew install sdl_mixer portmidi 使用下面的命令来安装Pygame(如果你运行的是Python...在Pygame中,surface是屏幕的一部分,用于显示游戏元素。在这 个游戏中,每个元素(如外星人或飞船)都是一个surface。...这个游戏由一个while循环(见3)控制,其中包含一个事件循环以及管理屏幕更新的代码。 事件是用户玩游戏时执行的操作,如按键或移动鼠标。...为让程序响应事件,我们编写一个事件循 环,以侦听事件,并根据发生的事件执行相应的任务。4处的for循环就是一个事件循环。...图像的背景色与游戏的背景色相同时,游戏看起来最漂亮;你也可以 将游戏的背景色设置成与图像的背景色相同。
您可以使用pygame事件系统执行此操作。 处理事件 按键、鼠标移动甚至操纵杆移动都是用户可以提供输入的一些方式。所有用户输入都会生成一个事件。...事件可以在任何时间发生,并且经常(但不总是)起源于程序之外。所有事件pygame都放在事件队列中,然后可以访问和操作。处理事件称为处理它们,执行此操作的代码称为事件处理程序。...中的每个事件pygame都有一个与之关联的事件类型。对于您的游戏,您将关注的事件类型是按键和窗口关闭。按键事件有事件类型KEYDOWN,关闭窗口事件有类型QUIT。...在屏幕上绘图 在示例程序中,您使用两个命令在屏幕上绘图: 1、screen.fill()填充背景 2、pygame.draw.circle()画一个圆 现在您将了解第三种绘制屏幕的方法:使用Surface...之前,您看到它pygame.event.get()返回事件队列中的事件列表,您可以在其中扫描KEYDOWN事件类型。好吧,这不是读取按键的唯一方法。
在 Pygame 的例子目录中,有一个演示代码(prevent_display_stretching.py)展示如何在微软系统(Vista 以上系统)中关闭 Pygame 显示的自动拉伸属性。...从队列中获取一个事件 pygame.event.wait() — 等待并从队列中获取一个事件 pygame.event.peek() — 检测某类型事件是否在队列中 pygame.event.clear...(如果第二个参数为None,则第一个参数将是两个扬声器的音量。) 如果频道正在播放set_volume()已调用的声音,则会同时考虑这两个呼叫。...注意:在 MS Windows 系统中,一个窗口可以同时对鼠标和键盘事件保持监听。但是在 X-Windows 系统中,需要用一个窗口监听鼠标事件而另一个窗口监听键盘事件。...当 python 解释器关闭时,这个方法将被无条件地调用,所以你的程序并不需要调用这个方法,除非你想要终止 pygame 资源,并继续执行其他功能。多次执行这个方法也是没有问题的。
() # 退出pygame 上述代码中添加了轮询事件检测。...这里的事件处理方式与GUI类似,如event.type等于pygame.QUIT表示检测到关闭pygame窗口事件,pygame.KEYDOWN表示键盘按下事件,pygame.MOUSEBUTTONDOWN...pygame 上述代码中,添加了碰撞检测功能。...分析 在Flappy Bird游戏中,主要有两个对象:小鸟、管道。可以创建Brid类和Pineline类来分别表示这两个对象。...True: clock.tick(60) # 每秒执行60次 # 轮询事件 for event in pygame.event.get
请注意,当导入pygame模块时,还会自动导入pygame模块中的所有模块,如pygame.images和pygame.mixer.music。不需要使用额外的import语句导入这些模块内的模块。...由于游戏状态通常是响应事件(如鼠标点击或键盘按键)或时间流逝而更新的,游戏循环会不断地每秒检查和重新检查是否有新事件发生。...在这种情况下,我们需要将KEYUP事件放回 Pygame 的事件队列中。...我们使用pygame.draw.rect()调用绘制瓦片的背景方块,同时在需要调整瓦片位置的情况下,将adjx和adjy的值添加到left和top中。...请注意,当动画正在进行时,用户创建的任何事件都不会被处理。这些事件将在下一次执行到main()函数的第 70 行或checkForQuit()函数中的代码时处理。
在上一篇博客中,我们学习了pygame中的IO、数据http://www.cnblogs.com/msxh/p/4973003.html。 这次我们来一起了解一下pygame事件与设备轮询。...一、pygame事件 1.简介 pygame事件可以处理游戏中的各种事情。其实在前两节的博客中,我们已经使用过他们了。...2.实时事件循环 pygame中的事件处理是放在一个实时的循环中来完成的。将代码都放在一个while True的循环中,但是这样会造成死循环,所以在里面加一句sys.exit()来退出。...中除了pygame事件,还可以使用设备轮询的方法来检测是否有事件发生。...下个博客中我们将会一起学习如何在pygame中加载位图,以及pygame中一些常用的数学函数。并且还会综合前几次学到的知识制作一个小游戏。游戏效果图如下: ? ? ?
除了程序的运行时的结构,还需要有的两个游戏运行的必要能力: 显示一个可供画图的窗口 检测用户的输入,如键盘按键、鼠标点击等 pygame 提供了这样的能力,因此我们可以编写一个游戏的主循环如下(可以保存为...main.py 文件中运行): import pygame pygame.init() screen = pygame.display.set_mode([640,480]) # 显示 640x480...此时可能同时存在多个操作 for event in events: # 循环遍历每个操作事件 if event.type == pygame.QUIT: # 关闭窗口事件被发现...在上面的例子中没有用到这个对象。从上面这个代码,你可以发现,一个游戏程序,是可以同时拥有多个画面窗口的!虽然一般来说都只是一个。...pygame.event.get() 返回了当前瞬间的用户所有的操作,包括点击了关闭窗口,就是 pygame.QUIT 事件;还包括了当前键盘按键是否被按下,还是被释放;鼠标点击了哪个位置等等。
常使用的有: 1.精灵类 pygame.sprite.Sprite() 单个游戏对象类 pygame.sprite.Group() 多个游戏对象类 2.两个精灵碰撞检测方法 pygame.sprite.collide_rect...image属性,同时赋值为一个圣诞帽surface对象 hat.image = pygame.image.load('hat.png') # 给hat对象添加一个rect属性,同时赋值为一个rect元组...() clock.tick(30) 矩形碰撞检测 pygame.sprite.collide_rect 方法用于检测两个精灵是否有碰到,没碰到result返回0,碰到返回1. result...() clock.tick(30) 圆形碰撞检测 pygame.sprite.collide_circle 方法用于检测两个精灵是否有碰到,没碰到result返回False,碰到返回True...方法用于检测两个精灵是否有碰到,没碰到result返回None,碰到返回碰撞点坐标。
、键盘等各种事件的发生并执行对应的代码对事件进行处理,因为事件会持续的发生,所以需要这样的一个循环一直运行着等待下一个事件的发生。...使用Pygame进行游戏开发 Pygame是一个开源的Python模块,专门用于多媒体应用(如电子游戏)的开发,其中包含对图像、声音、视频、事件、碰撞等的支持。...# 从消息队列中获取事件并对事件进行处理 for event in pygame.event.get(): if event.type == pygame.QUIT...碰撞检测在绝大多数的游戏中都是一个必须得处理的至关重要的问题,pygame的sprite(动画精灵)模块就提供了对碰撞检测的支持,这里我们暂时不介绍sprite模块提供的功能,因为要检测两个小球有没有碰撞其实非常简单...,只需要检查球心的距离有没有小于两个球的半径之和。
12.2 安装 Pygame 开始编码前,先来安装Pygame。下面介绍如何在Linux、OS X和Microsoft Windows中安装 Pygame。...如果这两个版本都没有安装到你的系 统中,请跳到“安装pip”。 如果你的系统安装了多个版本的Python,请核实pip关联到了你使用的Python版本,如python3.5(见1)。...如果执行这两个命令时都出现错误消息,请跳到 “安装pip”。 如果你的系统安装了多个版本的Python,请核实pip关联到了你使用的Python版本,如python 3.5(见1)。...为此,打开一个终端窗口,并 执行下面的命令,这将下载Pygame,并将其安装到你的系统中: $ sudo apt-get install python-pygame 执行如下命令,在终端会话中检查安装情况...如果你使用的是Python 3,就需要执行两个步骤:安装Pygame依赖的库;下载并安装Pygame。
我们可以为一般init()调用和特定模块的初始化(这将向我们显示这些模块是否可用)执行此操作: i = pygame.init() print(i) f = pygame.font.init() print...在我们程序的主游戏循环中,我们将构造一个for循环来迭代事件队列中的用户事件,该事件队列将由pygame.event.get()函数调用。...我们将迭代中的事件以print(event)的形式传递给语句。...让我们将这两个循环和print()语句添加到我们的程序文件中: import pygame from pygame.locals import * pygame.init() display_width...该KEYDOWN事件意味着用户正在按下键盘上的键。为了我们的目的,让我们说Q密钥(如“退出”)或ESC密钥可以退出程序。
函数check_events() 首先我们将管理事件的代码移到一个名为check_events()的函数中,目的是为了隔离事件循环 import sys import pygame def check_events...响应按键 因为在pygame中,每次按键都被注册为KEYDOWN事件,在check_events()中,我们通过event.type检测到KEYDOWN事件后还需进一步判断是哪个按键。...调整飞船的速度 当前,每次执行while循环时,飞船最多移动一个像素,我们可以在Settings中添加ship_speed_factor,用于控制飞船的速度。...这里我们在Settings类中设置外星人移动的速度,然后通过Alien类中的update的方法来实现移动 射杀外星人 要想射杀外星人,就必须先检测两个编组成员之间是否发生碰撞,在游戏中,碰撞就是游戏元素重叠在一起...这里我们使用sprite.groupcollide()来检测两个编组的成员之间的碰撞。
领取专属 10元无门槛券
手把手带您无忧上云