pygame的模块
pygame.cdrom | 访问光驱 |
pygame.cursors | 加载光标 |
pygame.display | 访问显示设备 |
pygame.draw | 绘制形状、线和点 |
pygame.event | 管理事件 |
pygame.font | 使用字体 |
pygame.image | 加载和存储图片 |
pygame.joystick | 使用游戏手柄或者 类似的东西 |
pygame.key | 读取键盘按键 |
pygame.mixer | 声音 |
pygame.mouse | 鼠标 |
pygame.movie | 播放视频 |
pygame.music | 播放音频 |
pygame.overlay | 访问高级视频叠加 |
pygame | 就是我们在学的这个东西了…… |
pygame.rect | 管理矩形区域 |
pygame.sndarray | 操作声音数据 |
pygame.sprite | 操作移动图像 |
pygame.surface | 管理图像和屏幕 |
pygame.surfarray | 管理点阵图像数据 |
pygame.time | 管理时间和帧信息 |
pygame.transform | 缩放和移动图像 |
# -*- coding:UTF-8 -*-
#
mouse_image_filename='fugu.png'
import pygame
from pygame.locals import *
from sys import exit
pygame.init()
background=pygame.image.load('images/sushiplate.jpg')
mouse_cursor=pygame.image.load('images/fugu.png')
#创建了一个窗口,设置分辨率,第一个元祖是分辨率,第二个是不具有特性就设置成0,第三个为色深
screen=pygame.display.set_mode((640,480),0,32)
#设置了一个窗口
pygame.display.set_caption('This is a game')
while True:
for event in pygame.event.get():
if event.type==QUIT:
exit()
screen.blit(background,(0,0))
x,y=pygame.mouse.get_pos()
x-=mouse_cursor.get_width()/2
y-=mouse_cursor.get_height()/2
#计算光标的左上角位置
screen.blit(mouse_cursor,(x,y))
#把光标画上去
pygame.display.update()
pygame.display.set_mode((x,y),标志位,色深)
标志位如下:
FULLSCREEN | 创建一个全屏窗口 |
DOUBLEBUF | 创建一个“双缓冲”窗口,建议在HWSURFACE或者OPENGL时使用 |
HWSURFACE | 创建一个硬件加速的窗口,必须和FULLSCREEN同时使用 |
OPENGL | 创建一个OPENGL渲染的窗口 |
RESIZABLE | 创建一个可以改变大小的窗口 |
NOFRAME | 创建一个没有边框的窗口 |
事件event
pygame的做法是把一系列的还是件存放一个队列中,逐个处理
事件检索:
pygame.event.get()
pygame.event.wait()
pygame.event.poll()一旦调用,他会根据现在的情形返回一个真实的事件,或者一个都没有.
常用的事件集:
事件 | 产生途径 | 参数 |
---|---|---|
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 |
import pygame
from pygame.locals import *
from sys import exit
pygame.init()
screen_size=(640,480)
event_text=[]
front=pygame.font.SysFont('arial',16)
front_height=front.get_linesize()
screen=pygame.display.set_mode(screen_size,0,32)
pygame.display.set_caption("This is a game ")
while True:
event=pygame.event.wait()
event_text.append(str(event))
#获得实践的名称
event_text=event_text[-screen_size[1]/front_height:]
if event.type==QUIT:
exit()
x,y=pygame.mouse.get_pos()
screen.fill((255,255,255))
#y=screen_size[1]-front_height
for text in reversed(event_text):
screen.blit(front.render(text,True,(0,0,0)),(0,y))
y-=front_height
pygame.display.update()
处理鼠标事件:
MOUSEMOTION 会在鼠标动作的时候发生,有三个参数
buttons:一个含有三个数字的元祖,三个值分别代表左键,中键和右键,1代表按下了
pos:就是位置了
rel:代表现在距离上次产生鼠标事件时的距离
MOUSEBUTTONDOWN和MOUSEBUTTONUP:
button:这个值代表哪个案件被操作
pos:位置
处理键盘事件:
KEYDOWN and KEYUP
import pygame
from pygame.locals import *
from sys import exit
pygame.init()
screen_size=(640,480)
image=pygame.image.load('images/fugu.png')
background=pygame.image.load('images/sushiplate.jpg')
screen=pygame.display.set_mode(screen_size,0,32)
pygame.display.set_caption('This is a key event')
key_x,key_y=(0,0)
key_move_x,key_move_y=(0,0)
while True:
for event in pygame.event.get():
if event.type==QUIT:
exit()
if event.type==KEYDOWN:
if event.key==K_UP:
key_move_x-=1
elif event.key==K_DOWN:
key_move_x+=1
elif event.key==K_LEFT:
key_move_y-=1
elif event.key==K_RIGHT:
key_move_y+=1
else:
key_move_x=0
key_move_y=0
key_y+=key_move_y
key_x+=key_move_x
screen.fill((0,0,0))
screen.blit(background,(0,0))
screen.blit(image,(key_x,key_y))
pygame.display.update()
产生事件:
通常玩家做出什么操作,pygame就产生对应的事件就可以了,
my_event=pygame.event.EVENT(KEYDOWN,key=K_SPACE,mod=0,unicode=u'')
my_event=pygame.event.EVENT(KEYDOWN,{key=K_SPACE,mod=0,unicode=u''})
pygame.event.post(my_event)
产生一个完全自定义的事件(这个事件是干嘛的,这个是一个高级的处理,这里留个坑,不是我留的,是我看的教程留的)
CATONKEYBOARD=USEREVENT+1
my_event=pygame.event.EVENT(CATONKEYBOARD,message='Bad Cat')
pygame.event.post(my_event)
#获取这个事件
for event in pygame.even.get():
if event.type==CATONKEYBOARD:
print event.message