弹球游戏如此之多,以至于它本身已经成为一种类型。弹球起源于一种模拟街机,一个金属球将被发射到一个倾斜的游戏区域,并在障碍物之间弹跳。玩家通过按下机器两侧的按钮来操作一对脚蹼,从而将球击回比赛区域,击中障碍物并得分。当球从比赛区底部的出口落下时,比赛结束。
视频游戏开发商很快开始尝试重新制作弹球,首先是用相当基本的图形和物理,但随着时间的推移,现实感越来越强——如果你看看1984年任天堂的弹球,然后,比如说,1990年世嘉超级硬盘上的魔鬼迷恋,然后是1992年PC上的弹球梦,你可以看到这一类型在短短几年内发生了多么彻底的变化。
我们将在Pygame Zero中制作一个非常简单的弹球表演。我们不会使用任何复杂的数学或物理系统,只使用一点代数和三角学。
让我们从背景开始。我们需要一个图像,它在外面有障碍物,让球弹起,在底部有一个缺口,让球落下。我们还希望在比赛区域设置一些障碍物,并在侧面设置一个入口,以便球在第一次发射时进入。在这种情况下,我们也将使用我们的背景作为碰撞贴图,所以我们需要设计它,使球可以移动的所有区域都是黑色的。
接下来,我们需要一些脚蹼。这些被定义为演员的枢轴锚定位置设置在大端附近,并位于游戏区底部附近。我们检测左右按键,并在-30到+30度的范围内将脚蹼的角度旋转20度。如果没有按下任何键,则脚蹼会下降。有了这些元素,我们就有了自己的比赛区域,玩家就有了防守出口的能力。
我们现在所需要的只是一个球,在我们制造的障碍物周围弹跳。将球定义为Actor,我们可以为其添加方向和速度参数。设置这些值后,可以使用一些三角函数移动球。我们的新x坐标将移动球方向的sin值乘以速度,新y坐标将移动球方向的cos值乘以速度。我们还需要检测与物体和障碍物的碰撞,所以我们对球周围的四个像素进行采样,看看它是否击中了任何固体。如果有,我们需要让球反弹。如果你想要更真实的物理效果,可以计算被击中表面的反射角,但在这个示例中,我们将使用一个简便方式,这将产生一个粗略的近似值。我们计算出球的运动方向,然后向左或向右旋转四分之一圈,直到球不再与墙壁相撞。最后,我们需要增加一些重力。由于比赛区域向下倾斜,我们需要在球向下移动时提高球的速度,在球向上移动时降低球的速度。所有这些都会让你了解弹球比赛的基本情况。你可以添加更多内容来增加真实感。
源码下载地址:Wireframe-53/source-code-pinball at main · Wireframe-Magazine/Wireframe-53 (github.com)
要运行调试请先安装Pygame Zero。
该框架是一个基于Pygame的游戏编程框架。它可以更容易地编辑游戏,无需模板、不用编写事件循环,也无需学习复杂的Pygame API,而且支持树莓派。
?安装: pip install pgzero
PS:若要全面系统学习Pygame Zero可以参考《趣学Python游戏编程》一书,该书通过十个经典游戏案例,深入浅出地介绍了游戏编程的基本原理,以及Pygame Zero的具体使用方法。相信学完这本书后你也能开发出如此精彩的小游戏。
|