python游戏程序中游戏对象是什么_python游戏编程之pgzero使用介绍

Pgzero是在pygame基础上封装的一个简化版本软件包,使得在python环境下进行游戏编程更加简单。适合于入门学习者。

怎么用

开发一款简单的小游戏,我们可能会立刻想到以下几个要素:

1. 创建一个游戏的页面环境,交待游戏场景

2. 创建一个或多个游戏角色

3. 定义角色的行为

1. 什么条件下触发行为

2. 有哪些行为可以执行

下面就来聊聊怎么上手使用。再啰嗦一下,编程嘛,有一款趁手的IDE(开发编辑器)还是蛮重要的嘞。对于这个游戏编程的项目来说,Mu这个软件还是不错的([Download Mu]),比较轻量化,windows环境下使用体验较好,Mac系统中无法使用(即使下载安装了也无法打开,没办法,苹果的生态系统权限控制比较严格)。

先从大处着眼

先了解一下常见的项目结构。pgzero的使用过程中,往往直接引用某些对象名称,而不给出全部的路径,那是因为它默认执行的脚本**.py所在目录具有固定的结构,典型的案例如下:

.

├── images/

│ └── alien.png

└── intro.py

当程序需要创建一个以alien.png图片为对象的游戏角色时,alien = Actor('alien') 这个命令就会直接去找images文件夹,然后将它下面的alien.png图片导入进来,所以如果你的目录结构不符合这样的结构,就会报错喽。

找一段完整的游戏代码来看看长啥样:

import pgzrun

WIDTH = 1300

HEIGHT = 600

NUM = 3

balls = []

for i in range(NUM):

ball = Actor("ball")

ball.x = 50 * i + 100

ball.y = 100

ball.dx = 5 + i

ball.dy = 5 + i

balls.append(ball)

def draw():

screen.fill((255,255,255))

for ball in balls:

ball.draw()

def update():

for ball in balls:

ball.x += ball.dx

ball.y += ball.dy

if ball.right > WIDTH or ball.left < 0:

ball.dx = - ball.dx

if ball.bottom > HEIGHT or ball.top < 0:

ball.dy = -ball.dy

pgzrun.go()

写过python程序的朋友可能注意到了几个点:没有常见的 if __name_== '__main__' 这样的真正执行命令块,那是因为pgzrun已经封装了这些操作

没有for, while这样的循环,只是定义了如何更新、画图的方法,那同样是因为pgzrun在后台会为我们执行这样的循环,不需要显式来写

接下来就开始分解各环节来讨论。

怎样创建一个游戏的场景。

简单点,可能就是一张背景图就完事儿了。

WIDTH = 300

HEIGHT = 300

def draw():

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

其中WIDTH,HEIGHT交待窗口环境的宽度与长度,如下图所示:

screen.fill 这个命令就是按照一组RGB的值,把屏幕背景设置为某一个颜色,具体每个RGB值对应什么颜色可以网上方便地查到(例如RGB颜色对照表)。

注意:不想了解pgzero这个screen底层实现方法的朋友可以跳过下面这小段内容,不影响对于pgzero使用的学习。

我们已经知道pgzero底层是对pygame做了封装,那么它具体是怎么实现的,感兴趣的朋友就可以去看pgzero的github源代码:https://github.com/lordmauve/pgzero​github.com

其中screen.py的定义如下:

可见它是引用了pygame的surface对象,如果去看pygame的文档时,会读到下面这样的描述:

其中也提到了最关键是的blit(),fill()这样的方法,这样就呼应起来了。

值得注意的是,有时候我们希望背景更多彩一些,并不止是某个纯色系,那么就可以导入一张图片做为背景图。上面这段话正好提到了可以创建一个含有图片的surface,且在pygame中是通过image.load()来实现的。回头去看pgzero的源码screen.py中对于Screen这个类的定义,其中有一个方法:

因此,我们通过下面的方法就可以实现导入图片,如果这张图片大到可以平铺满整个屏幕,那就背景图了。如果图片比较小,其实也相当于导入了一个角色(不过,如果是想实现这个功能,更推荐使用Actor类来创建角色对象)。

def draw():

screen.blit('这里是图片名称',(这里是坐标位置))

再来创建游戏角色

pgzero提供了一个类:Actor,创建的方法如下:

alien = Actor('alien') #创建一个角色对象

alien.pos = 100, 56 #指定角色在screen中出现的位置

WIDTH = 500

HEIGHT = alien.height + 20 # 先定义了角色的位置,才定义高度,是怕角色展示不全

def draw():

screen.clear()

alien.draw() #这里的.draw是调用了Actor类的一个方法,而非这里定义的函数draw

如果想导入一张图片作为角色,可以直接指定图片的图称作为一个参数(前期是这张图片需要在本脚本所在文件目录下同级目录images/下),例如:

alien = Actor('alien', (50, 50)) #这里alien是一个图片名称,在当前脚本所以目录中一定有images这个文件夹,alien.png就在这个文件夹下

def draw():

screen.clear()

alien.draw()

有了角色后,怎么控制其动作呢?

这里就引出一个非常重要的函数:

def update():

alien.left += 2

if alien.left > WIDTH:

alien.right = 0

所有关于角色的设置,最终都要通过这个update函数来实现。你可以把一个常规的游戏过程理解成下面这样的序列:

while game_has_not_ended(): #如果不退出游戏,就会永远执行下面的循环。只不过pgzero帮我们实现了这个while的控制,不需要我们自己再显式地去写这个循环控制

process_input()

update()

draw()

官网上有一段关于update函数的表述摘抄如下:

所以,一款游戏的执行过程中,你可以理解一直在反复调用这个update,更新角色的位置、状态,然后再通过draw()画图显示到屏幕上。

那什么条件会触发角色的update动作呢?其中比较常用的一些触发条件整理如下:

使用时,定义一个函数,然后在其中定义条件触发后,角色会执行哪些动作,举一个例子如下:

def on_mouse_down(pos): #当在pos位置上按下鼠标时,会触发该事件

if alien.collidepoint(pos):

sounds.eep.play()

alien.image = 'alien_hurt'

更多使用技巧如声音,时间控制等操作,留给大家举一反三去探索。

小结

Pgzero提供了一套可以快速入门游戏编程的接口与方法,对于初学者来说非常值得去体验。本文介绍了pgzero使用的要点,但肯定还是需要咱们多看例子,多实践,才能真正熟练掌握。当然,要想开发更加个性化的功能,还是需要入手pygame的,这个有时间的话,咱们再接着聊。欢迎关注本专栏动态。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值