pygame系列_游戏中的事件

先看一下我做的demo:

当玩家按下键盘上的:上,下,左,右键的时候,后台会打印出玩家所按键的数字值,而图形会随之移动

这是客观上面存在的现象。

那么啥是事件呢?

你叫我做出定义,我不知道,我只能举个例子说明,例如接下来的代码中,列出来一些关于游戏中的事件

‘‘‘
    事件                         产生途径                            参数
    QUIT                       用户按下关闭按钮                    none
    ATIVEEVENT                 Pygame被激活或者隐藏                    gain, state
    KEYDOWN                    键盘被按下                            unicode, key, mod
    KEYUP                      键盘被放开                            key, mod
    MOUSEMOTION                鼠标移动                            pos, rel, buttons
    MOUSEBUTTONDOWN            鼠标按下                            pos, button
    MOUSEBUTTONUP              鼠标放开                            pos, button
    JOYAXISMOTION              游戏手柄(Joystick or pad)移动           joy, axis, value
    JOYBALLMOTION              游戏球(Joy ball)?移动            joy, axis, value
    JOYHATMOTION               游戏手柄(Joystick)?移动            joy, axis, value
    JOYBUTTONDOWN              游戏手柄按下                            joy, button
    JOYBUTTONUP                游戏手柄放开                            joy, button
    VIDEORESIZE                Pygame窗口缩放                    size, w, h
    VIDEOEXPOSE                Pygame窗口部分公开(expose)            none
    USEREVENT                  触发了一个用户事件                    code
‘‘‘

如鼠标按下事件,鼠标放开事件,键盘按下事件.....

这些事件的发生都伴随着一个动作的发生,正是因为有动作的发生,所以我们才可以扑捉到这些动作,从而做出相应的反应

如,我们按下键盘的左键,图片就向左移动一段距离...

================================================

代码部分:

================================================

 1 #handle the key event
 2
 3 import pygame
 4 from pygame.locals import *
 5 from sys import exit
 6
 7 ‘‘‘
 8     事件                         产生途径                            参数
 9     QUIT                 用户按下关闭按钮                    none
10     ATIVEEVENT                 Pygame被激活或者隐藏                    gain, state
11     KEYDOWN                 键盘被按下                            unicode, key, mod
12     KEYUP                 键盘被放开                            key, mod
13     MOUSEMOTION                 鼠标移动                            pos, rel, buttons
14     MOUSEBUTTONDOWN         鼠标按下                            pos, button
15     MOUSEBUTTONUP         鼠标放开                            pos, button
16     JOYAXISMOTION         游戏手柄(Joystick or pad)移动           joy, axis, value
17     JOYBALLMOTION         游戏球(Joy ball)?移动            joy, axis, value
18     JOYHATMOTION         游戏手柄(Joystick)?移动            joy, axis, value
19     JOYBUTTONDOWN         游戏手柄按下                            joy, button
20     JOYBUTTONUP                 游戏手柄放开                            joy, button
21     VIDEORESIZE                 Pygame窗口缩放                    size, w, h
22     VIDEOEXPOSE                 Pygame窗口部分公开(expose)            none
23     USEREVENT                 触发了一个用户事件                    code
24 ‘‘‘
25 __author__ = {‘name‘ : ‘Hongten‘,
26               ‘mail‘ : ‘[email protected]‘,
27               ‘blog‘ : ‘http://www.cnblogs.com/hongten‘,
28               ‘QQ‘   : ‘648719819‘,
29               ‘Version‘ : ‘1.0‘}
30
31 BG_IMAGE = ‘C:\\test\\1.gif‘
32
33 pygame.init()
34 screen = pygame.display.set_mode((500, 500), 0, 32)
35 bg = pygame.image.load(BG_IMAGE).convert()
36
37 x, y = 0, 0
38 move_x, move_y = 0, 0
39
40 while 1:
41     for event in pygame.event.get():
42         #print(event.type)
43         if event.type == QUIT:
44             exit()
45         if event.type == KEYDOWN:
46             print(event.key)
47             #event.key返回的是一个数字值,而K_LEFT,K_UP,K_RIGHT,K_DOWN等都是常量,
48             #他们代表的也是一个数字值,这些数字值可以用:print(event.key)获取到
49             #如:K_LEFT = 276
50             #   K_UP = 273
51             #所以下面的代码可以替换为:
52             #if event.key == 276:
53             #    move_x = -10
54             if event.key == K_LEFT:
55                 move_x = -10
56             elif event.key == K_UP:
57                 move_y = -10
58             elif event.key == K_RIGHT:
59                 move_x = 10
60             elif event.key == K_DOWN:
61                 move_y = 10
62         elif event.type == KEYUP:
63             move_x = 0
64             move_y = 0
65
66         x += move_x
67         y += move_y
68         #print(x, y)
69
70         screen.fill((0, 0, 0))
71         screen.blit(bg, (x, y))
72         pygame.display.update()

参考资料:

http://eyehere.net/2011/python-pygame-novice-professional-2/

时间: 2024-10-18 23:37:56

pygame系列_游戏中的事件的相关文章

pygame系列_箭刺Elephant游戏

这个游戏原名为:Chimp,我们可以到: http://www.pygame.org/docs/tut/chimp/ChimpLineByLine.html 获取到源码和详细的源码讲解 下面是我对游戏的改编: 运行效果: 当箭刺到大象的时候,大象的身体就会翻转,并且发出声音,当然没有刺到的时候,也会发出另外的声音. 在游戏中,有很多地方值得我们参考,如加载图片,声音和异常处理等 ========================================= 代码部分: ===========

pygame系列_font游戏字体

在pygame游戏开发中,一个友好的UI中,漂亮的字体是少不了的 今天就给大伙带来有关pygame中字体的一些介绍说明 首先我们得判断一下我们的pygame中有没有font这个模块 1 if not pygame.font: print('Warning, fonts disabled') 如果有的话才可以进行接下来的操作:-) 我们可以这样使用pygame中的字体: 1 tork_font = pygame.font.Font('data\\font\\TORK____.ttf', 20) 当

pygame系列_小球完全弹性碰撞游戏

之前做了一个基于python的tkinter的小球完全碰撞游戏: 今天利用业余时间,写了一个功能要强大一些的小球完全碰撞游戏: 游戏名称: 小球完全弹性碰撞游戏规则: 1.游戏初始化的时候,有5个不同颜色的小球进行碰撞 2.玩家可以通过在窗口中单击鼠标左键进行增加小球个数 3.玩家可以通过在窗口中单击鼠标右键进行删减小球个数 4.玩家可以通过键盘的方向键:上,右键进行对小球加速 5.玩家可以通过键盘的方向键:下,左键进行对小球减速 6.玩家可以按键盘:f键实现全屏显示 7.玩家可以按键盘:Esc

pygame系列_draw游戏画图

说到画图,pygame提供了一些很有用的方法进行draw画图. ''' pygame.draw.rect - draw a rectangle shape draw a rectangle shape pygame.draw.polygon - draw a shape with any number of sides draw a shape with any number of sides pygame.draw.circle - draw a circle around a point d

pygame系列_游戏窗口显示策略

在这篇blog中,我将给出一个demo演示: 当我们按下键盘的‘f’键的时候,演示的窗口会切换到全屏显示和默认显示两种显示模式 并且在后台我们可以看到相关的信息输出: 上面给出了一个简单的例子,当然在pygame的官方文档中有对显示策略的更权威的说明: http://www.pygame.org/docs/ref/display.html#pygame.display.set_mode ''' pygame.FULLSCREEN create a fullscreen display pygam

【Unity游戏开发】用C#和Lua实现Unity中的事件分发机制EventDispatcher

一.简介 最近马三换了一家大公司工作,公司制度规范了一些,因此平时的业余时间多了不少.但是人却懒了下来,最近这一个月都没怎么研究新技术,博客写得也是拖拖拉拉,周六周天就躺尸在家看帖子.看小说,要么就是吃鸡,唉!真是罪过罪过.希望能从这篇博客开始有些改善吧,尽量少玩耍,还是多学习吧~ 好了扯得有点远了,来说说我们今天博客的主题——“用C#和Lua实现Unity中的事件分发机制”,事件分发机制或者叫事件监听派发系统,在每个游戏框架中都是不可或缺的一个模块.我们可以用它来解耦,监听网络消息,或者做一些

游戏中水的渲染技术系列一

笔者介绍:姜雪伟,IT公司技术合伙人,IT高级讲师,CSDN社区专家,特邀编辑,畅销书作者,国家专利发明人;已出版书籍:<手把手教你架构3D游戏引擎>电子工业出版社和<Unity3D实战核心技术详解>电子工业出版社等. CSDN视频网址:http://edu.csdn.net/lecturer/144 水的渲染一直是图形学需要解决的问题,网上也有很多关于这方面的技术实现,本博客的系列文章也是给读者做一个总结,本篇博客主要介绍用傅里叶变换算法实现的水反射,也是一种假反射效果,目的是优

游戏编程系列[1]--游戏编程中RPC协议的使用

RPC(Remote Procedure Call Protocol)--远程过程调用协议,它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议.RPC协议假定某些传输协议的存在,如TCP或UDP,为通信程序之间携带信息数据.在OSI网络通信模型中,RPC跨越了传输层和应用层.RPC使得开发包括网络分布式多程序在内的应用程序更加容易.RPC采用客户机/服务器模式.请求程序就是一个客户机,而服务提供程序就是一个服务器. 首先,客户机调用进程发送一个有进程参数的调用信息到服务进

Unity跑酷游戏中的路点生成算法

最近做了一个小的跑酷游戏,今天就我前几天写的 游戏玩家跟随在跑道上的路点行走的简单逻辑进行一下梳理,希望大家和我自己都能够有一定的进步. 下面我先说一下该款游戏的一些有必要知道的前提.跑道是动态生成的,而路点又是作为跑道子对象waypoints的子对象(简单而言,就是孙子对象)存在.所以,路点也就是动态创建,动态销毁了.我的思路是在游戏刚刚加载时,由RacetrackGenerator脚本类在初始化时先动态生成两个跑道,而每个跑道都有一个自己的WaypointsManager(路点管理器脚本),