欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

python游戏引擎ppb介绍(2)精灵、场景与坐标

程序员文章站 2022-07-12 23:35:00
...

精灵(sprite)就是在屏幕上显示的一切事物,场景(scene)可以简单理解为屏幕,屏幕上的具体位置通过坐标来表示。

python游戏引擎ppb介绍(2)精灵、场景与坐标

静态精灵

ppb中的精灵定义很有特色,非常简单。它可以直接对应一个外部的png文件。如果我们有这样一个图片,名字叫Target.png

python游戏引擎ppb介绍(2)精灵、场景与坐标

我们只需定义一个同名的类,无须任何实际的代码,即可成为一个静态精灵:

class Target(ppb.Sprite):

    pass

 

注意精灵的默认大小是1,这个1,不是一个像素,而是一个坐标单位,详见下面场景与坐标。

动态精灵

动态精灵的定义也很简单,比如我们有下面一组图片:

python游戏引擎ppb介绍(2)精灵、场景与坐标

blob_0

python游戏引擎ppb介绍(2)精灵、场景与坐标

blob_1

python游戏引擎ppb介绍(2)精灵、场景与坐标

blob_2

python游戏引擎ppb介绍(2)精灵、场景与坐标

blob_3

python游戏引擎ppb介绍(2)精灵、场景与坐标

blob_4

python游戏引擎ppb介绍(2)精灵、场景与坐标

blob_5

python游戏引擎ppb介绍(2)精灵、场景与坐标

blob_6

一共七张,依次命名为blob_0~blob_6,我们只需定义一个精灵,并指定它的图片序列如下:

class Blob(ppb.Sprite):

    image = Animation("blob_{0..6}.png", 10)

 

其中最后一个参数10,含义是每秒10帧,它可以用来调节精灵运动的速度。

场景与坐标

我们把场景简单理解为精灵的舞台,为了显示精灵,只需把精灵加入到这个舞台上即可。

def setup(scene):

    scene.add(Blob(pos=(0, -3.5)))

    for x in range(-4, 5, 2):

       scene.add(Target(position=ppb.Vector(x, 3)))

 

精灵的坐标,统一用向量(Vector)来表示。坐标的单位,不是像素,而是一个单位,这个单位的大小,由相机(camera)的设置来指定,默认状态是宽度的1/25,即屏幕的宽度为25个单位,最左边是-12.5,最右边是12.5。数字的选择大概也没有什么特别的理由,只是系统的一个默认而已。

在这段代码中我们在场景中放置了一个Blob精灵,位置(pos)定制在正中偏下的位置(0-3.5,另外放置了5个靶子,位置分别是(-4,2)(-2,2)(0,2)(2,2)(4,2)。

代码展示了设置位置的两种方式,设置pos/postion属性,可以用一个元组,或者更明确地用一个向量(ppb.Vector)来表示。

完整代码如下:

import ppb

from ppb.features.animation import Animation



class Blob(ppb.Sprite):

    image = Animation("blob_{0..6}.png", 10)



class Target(ppb.Sprite):

    pass



def setup(scene):

    scene.add(Blob(pos=(0, -3.5)))

    for x in range(-4, 5, 2):

       scene.add(Target(position=ppb.Vector(x, 3)))





ppb.run(title='小游戏',setup=setup,resolution=(1280, 768))

 

运行效果是这样:

python游戏引擎ppb介绍(2)精灵、场景与坐标

本节教程到此为止,下次我们让精灵动起来。