python pygame event get_pygame简单运用总结

pygame简单运用总结

Pygame 就是一个游戏库,可以直接用高级语言编写,在python中导入pygame就可以用来写一些小游戏了。 如何开始快速使用pygame的做出游戏呢? 首先,就是了解游戏的运行主要是基于一个窗体,然后在窗体里面添加图片、音频,设计一些事件(像鼠标点击),最后装进循环运行就哦了。

基本窗体编写

import pygame,sys

pygame.init()#实例化

screen = pygame.display.set_mode((400,300))#前长后宽,且必须是列表或元组

pygame.display.set_caption('小游戏初始窗体')#设置标题

screen.fill((0,0,0))#填充颜色,默认是黑色,采用RGB格式

clock = pygame.time.Clock()#设置时钟,控制帧率

while True:

for event in pygame.event.get():#获得事件

if event.type == pygame.QUIT:

pygame.quit()

sys.exit(0)#这里不加零会弹出异常

pygame.display.update()

clock.tick(50)#50是毫秒

输出结果:

简单来说流程就是引入——初始化——循环——事件处理——更新

插入图片 先要加载图片,加载代码为 banana = pygame.image.load(filename)图片格式支持JPG、PNG、GIF等 其次要知道一个surface对象,surface对象表示所有载入的图像,刚载入的banana就是一个surface,也可以看做是一个图层。其中用get_rect()方法返回一个覆盖图像的矩形对象,这个Rect对象可以看做是一个选区。 bananarect=banana.get_rect() 生成这个外切的矩形能够利用矩形的属性,比如四点坐标和长宽。 介绍一个矩形的move(x,y)方法。 bananarect=bananarect.move(x,y) 即向横轴方向移动x像素,纵轴方向移动y像素。 移动后系统默认在原图片位置填充白色。 screen.fill((0,0,0)) 需要注意的是,pygame中的坐标是y轴向下的。左上角的坐标是(0,0) 最最重要的是要将载入的图像贴在矩形图像上 screen.blit(banana,bananarect) 也可以将bananarect换成一个坐标,相当于贴在了窗体上 screen.blit(banana,(x,y))

实现插入图片和移动

import pygame,sys

pygame.init()#实例化

screen = pygame.display.set_mode((400,300))#前长后宽,且必须是列表或元组

pygame.display.set_caption('香蕉哥')#设置标题

clock = pygame.time.Clock()#设置时钟,控制帧率

banana = pygame.image.load('香蕉.jpg')

bananarect=banana.get_rect()

bananarect.topleft=(0,10)#设置左顶点坐标

speed =1

while True:

for event in pygame.event.get():#获得事件

if event.type == pygame.QUIT:

pygame.quit()

sys.exit(0)#这里不加零会弹出异常

bananarect=bananarect.move(speed,0)

if bananarect.left <0 or bananarect.right>400:

speed= -speed

screen.fill((0,0,0))

screen.blit(banana,bananarect)

pygame.display.update()

clock.tick(50)#50是毫秒

输出结果:

插入图片的流程就是 载入图片——生成矩形——矩形设置——贴上矩形 当然图片也可以直接操作用,更多时候是生成类,类中设置坐标和图片对象属性,和移动方法。

import pygame,sys

SCREENWIDTH = 800 # 窗口宽度

SCREENHEIGHT = 200 # 窗口高度

FPS = 30 # 更新画面的时间

FPSCLOCk = pygame.time.Clock()

pygame.init()

screen =pygame.display.set_mode([SCREENWIDTH,SCREENHEIGHT])

pygame.display.set_caption('玛丽冒险')

def main():

p1=Map(0,0)

p2=Map(800,0)

while True:

for event in pygame.event.get():#获得事件

if event.type == pygame.QUIT:

pygame.quit()

sys.exit(0)

p1.map_update()

p1.map_roll()

p1.map_update()

p1.map_roll()

pygame.display.update()

FPSCLOCk.tick(FPS)

#地图加载

class Map():

def __init__(self,x,y):

self.bg=pygame.image.load('小玛丽\image\\bg.png').convert_alpha()

self.x=x

self.y=y

def map_roll(self):

if self.x<=-800:

self.x=800

else:

self.x-= 5

def map_update(self):

screen.blit(self.bg, (self.x, self.y))

main()

输出结果:

插入音频

音频的插入同样要先载入音频

audio = pygame.mixer.Sound(filename)

音频操作就是开和关

audio.play() audio.stop()

常用事件 像开始的退出游戏的代码就是,点击右上角的×的事件,这也是事件的基本模式。

for event in pygame.event.get():#获得事件

if event.type == pygame.QUIT:

pygame.quit()

sys.exit()

键盘敲击事件 pygame中用pygame.KEYDOWN表示键盘敲击事件,每个键对应的名称为pygame.K_X的形式

for event in pygame.event.get():#获得事件

if event.type == pygame.KEYDOWN:

if event.key == pygame.K_UP:#向上

pass

elif event.key == pygame.K_LEFT:#向左

pass

鼠标点击事件 pygame中用pygame.MOUSEBUTTONDOWN表示鼠标点击事件,event.pos 鼠标当前坐标值 event.buttons 鼠标三个键对应状态,1为左键

for event in pygame.event.get():#获得事件

if event.type == pygame.MOUSEBUTTONDOWN:

pass

鼠标移动事件 pygame中用pygame.MOUSEMOTION表示鼠标点击事件。 event.pos 鼠标当前坐标值 event.rel 鼠标相对运动距离 event.buttons鼠标按钮状态

for event in pygame.event.get():#获得事件

if event.type == pygame.MOUSEBUTTONDOWN:

pass

鼠标释放事件 pygame中用pygame.MOUSEBUTTONDOWN表示鼠标点击事件,event.pos 鼠标当前坐标值

for event in pygame.event.get():#获得事件

if event.type == pygame.MOUSEBUTTONDOWN:

pass

一些补充 屏幕绘制 pygame的窗体只有一个屏幕,通过display的方法来设置 列举一些常用的 pygame.display.set_mode(r=(x,y),flags=0) #设置屏幕大小 r是分辨率,flags是控制显示类型 pygame.display.Info #生成屏幕相关信息

python #获取电脑屏幕的分辨率 pre_info = pygame.display.Info() size = width, height =pre_info.current_w, pre_info.current_h pygame.display.set_caption() #设置标题信息 pygame.display.set_icon() #设置图标信息 pygame.display.get_active() #感知是否最小化,屏幕发生改变时,返回True pygame.display.filp() #刷新窗体 pygame.display.update() #刷新窗体

图形绘制 pygame.draw 图形绘制后,返回一个矩形Rect表示该形状

绘制矩形 pygame.draw.rect(Surface,color,Rect,width) Surface 一般指屏幕 Rect分别是左顶点x坐标,y坐标,宽度,高度 width 边缘宽度,默认为零,即填充图形 rect= pygame.draw.rect(screen,(255,255,255),(200,200,100,100),0)

绘制多边形 pygame.draw.polygon(Surface,color,pointlist,width) pointlist 多边形顶点坐标列表

文字绘制 pygame.freetype 通过像素绘制字体点阵图 直接上代码

import pygame,sys

import pygame.freetype

pygame.init()

screen = pygame.display.set_mode((400,300))

pygame.display.set_caption('绘制字体')

GOLD = 255,251,0

f=pygame.freetype.Font("C:\\Windows\\Fonts\\msyh.ttc",36)

frect=f.render_to(screen,(100,100),'不知所云',fgcolor=GOLD,size=50)

while True:

for event in pygame.event.get():#获得事件

if event.type == pygame.QUIT:

pygame.quit()

sys.exit(0)#这里不加零会弹出异常

pygame.display.update()

结果:

Sprite/group 类 pygame.sprite.Sprite 是一个特殊的类 含有两个属性,Surface和Rect 和一个方法update 生成类似的对象是可以用这个类继承

import pygame

from pygame.sprite import Sprite,Group

class Gameobj(Sprite):

def __init__(self,image_filename,init_pos,speed=10):

super().__init__()

self.image = pygame.image.load(image_filename)

self.rect = self.image.get_rect()

self.rect.midbottom = init_pos

self.speed=speed

def update(self, *args):

self.rect.y += self.speed

pygame.sprite.Group() 这个类可以存储多个对象 有五个方法: init(self,sprite) 构造精灵组 add(self,sprite) 添加 sprite() 返回所有列表 update() draw() 让组内的对象完成更新和绘制

Gameobj1s = pygame.sprite.Group()#生成组

Gameobj2s = pygame.sprite.Group()

while True:

if True:

obj1 = Gameobj(image_filename,init_pos,speed=10)

Gameobj1s.add(obj1)

if True:

obj2 = Gameobj(image_filename,init_pos,speed=10)

Gameobj2s.add(obj2)

# 两个精灵之间碰撞效果处理

if pygame.sprite.collide_circle(obj1, obj2):

pass

for event in pygame.event.get():#获得事件

if event.type == pygame.QUIT:

pygame.quit()

sys.exit(0)#这里不加零会弹出异常

pygame.display.update()

groupcollide()方法: group=pygame.sprite.groupcollide(Gameobj1s, Gameobj2s, 1, 1) Gameobj1s组中碰撞的对象返回一个组group Sprite/group的好处就是有大量实体时,可以分组管理,处理碰撞时很方便。

你可能感兴趣的:(python pygame event get_pygame简单运用总结)