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

python游戏引擎ppb介绍(7)补充与总结

程序员文章站 2022-07-12 23:34:42
...

其实作为一个2D游戏引擎,可以不必使用相机概念,但ppb引入的相机确实把一些相关功能整合在了一个直观的概念下,有一定的价值。

目前游戏的操作都是基于鼠标,但是键盘事件也是互动操作中必不可少的一环,让我们看看键盘事件是怎样处理的。

补充这两个内容容,对ppb的基本结构3个核心概念做一个总结。

python游戏引擎ppb介绍(7)补充与总结

相机(camera

相机有三个直接的用处

  1. 屏幕的放大和缩小
  2. 屏幕的移动
  3. 精灵可见性的检测

放大与缩小

只需设置一个参数(scene.main_camera.width)即可调整屏幕的比例:

event.scene.main_camera.width=20

 

我们把这一操作,放在键盘事件中,当按方向键的时候,放大屏幕,按的时候,缩小屏幕。

屏幕移动

相机本身也有position属性,移动屏幕,在ppb中转换为相机的移动,直接改变相机的position即可。对于横屏拖动的游戏很适合,但本课程的案例由于始终在一个固定场景中,所以无法演示这一次功能。

精灵可见性

单击一次鼠标就发出一枚导弹,只有个别导弹由于击中靶子而销毁。大部分导弹会无止境地飞翔。感觉是对系统资源的一种浪费。我们增加一个设定,如果导弹飞出了屏幕(看不到了)即让它自行删除。

判断精灵的可见性,我们把这一代码加到导弹的刷新事件中,使用相机的sprite_in_view函数来判断:

class Projectile(ppb.Sprite):

    image = ppb.Image("resources/Projectile.png")

    speed = 6

    layer= 2



    def on_update(self, update_event, signal):

       self.rotation= 90- self.direction.angle(ppb.Vector(1,0))

       self.position += self.direction * self.speed * update_event.time_delta

       if not update_event.scene.main_camera.sprite_in_view(self):

            signal(ppb.events.PlaySound(ppb.Sound('resources/hit_glass.mp3')))

            update_event.scene.remove(self)

 

当导弹发现已经飞出屏幕可见范围后,发出一个轻柔的声音以通知用户,同时删除掉自己。

python游戏引擎ppb介绍(7)补充与总结

键盘事件

我们在键盘事件里处理屏幕缩放和游戏初始化两个环节。

    def on_key_pressed(self, key_event: KeyPressed, signal):

       global score

       if key_event.key == ppb.keycodes.Up:

           key_event.scene.main_camera.width=20

       elif key_event.key == ppb.keycodes.Down:

           key_event.scene.main_camera.width=25

       elif key_event.key == ppb.keycodes.Enter:

           if score==100:

              score= 0

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

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

              signal(ChangeScore(0))

 

我们把键盘事件(on_key_pressed)写在Blob类的事件中,由于这是控制全局的事件,其实写在任何一个稳定存在的对象类中都是可以的。

key_event.key代表按下键的键值,我们无须记忆具体的数字,使用ppb.keycodes中对应键的名字即可。这里的逻辑是:

  • 方向键,放大:相机的width减小
  • 方向键,缩小:相机的width增大
  • 回车键,系统重置:当所有的靶子都打完后(成绩是100分),重新建立所有的靶子精灵。并发出事件,将成绩设置为0,这一机制是上节课讨论的内容。

引擎总结

经过这六次课程的介绍,我们现在可以对ppb的架构做一个总结。

python游戏引擎ppb介绍(7)补充与总结

ppb的三大核心概念:精灵、场景、事件。

  • 核心概念——精灵
    • 通过类定义一个精灵
    • 精灵的名字可以自动匹配同目录下的同名图片
    • 精灵可以通过设置多图显示动画效果
    • 精灵可以把图片设置成文字
    • 通过精灵的属性来改变它的位置、大小、旋转
    • 通过类函数来响应事件
    • 精灵加入场景后可见,删除后消失
  • 核心概念——场景
    • 场景在setup函数中初始化
    • 可以方便地按类型枚举场景中所有的精灵
    • 场景的坐标系统由相机控制
    • 场景的缩放移动等功能用相机的形式来体现
  • 核心概念——事件
    • 事件包括系统内置事件与自定义事件
    • 事件携带场景信息
    • 内置事件中比较常用的有
      • 鼠标事件
      • 刷新事件
      • 键盘事件
    • 自定义事件本身就是一个类
      • 类是属性用于在触发事件时传递参数给响应它的精灵
      • 事件的触发通过signal
    • 播放音效也通过signal

作为一个游戏引擎,ppb的使用相当简洁清晰,适合初学者,我们希望它能持续发展完整。