python游戏彩蛋_用python写游戏之2D跑酷游戏(一)
2D的跑酷游戏有很多,著名的例如Chrome的彩蛋小游戏,手机上的天天酷跑等。打开Chrome浏览器输入 chrome://dino/,按空格激活彩蛋
这篇文章来分析一下这类横版跑酷游戏的主角奔跑,跳跃,二段跳还有滑动的原理,说白了就是如何控制主角, 以及pygame中资源的加载。
游戏的资源
一般情况下,游戏加载音频和图片资源就够了。音频主要是背景音乐和游戏音效。比如跳跃的音效,吃金币的音效,撞墙的音效等。
游戏画布
pygame中游戏画布以左上角为原点(0, 0),往右为x轴正方向,往下为y轴正方向。不同的库,坐标系有可能不同,文中以下部分有关坐标的改变皆以pygame的坐标系做参考。
基础地面高度
定义一个基础的地面高度,base_height,主角的在此高度上运动。
主角坐标
定义主角的位置(x, y)时,这里指主角资源图片的左上角在画布上的位置,y值是base_height 加上主角的高度, x值可以自定义。主角运动时,x值并没有改变,是场景内的其他资源在往左移动,所以造成主角一直向前的错觉。
奔跑
奔跑状态时,主角的位置并没有改变,只是在不停的切换图片,就像视频是由一帧帧的图像组成的一样,快速的切换图片,就可以造成主角奔跑的样子。
滑动
主角的奔跑状态改为滑动状态,需要注意的是,只能从奔跑状态切换至滑动状态,不能由跳跃状态切换至滑动状态,滑动是只是把主角的图片切换成了滑动的图片。
跳越
主角的奔跑状态改为跳跃状态,跳跃时会改变主角的y值,由于是往上,所以y值是减少的。跳跃的状态分为上升和下降,上升时,主角的y值减少,减少的速度越来越慢,下降时,下降的速度越来越快,来模仿重力的作用。
做法就是 定义上升速度,下降速度、加速度和跳跃状态四个值。前三个速度值用来跳跃时y值减少,状态值记录是上升还是下降。
当上升时,上升速度减去加速度,然后主角的y值减去上升速度,这样y值在一直减少,但是每次减少的值越来越少,直到上升速度小于等于0, 主角开始下降。
下降时,下降速度的初始值为0,下降速度加上加速度,主角的y值加上下降速度,y值在一直增大, 直到主角的底部y值等于base_height, 切换为奔跑状态。
二段跳
当主角为跳跃状态时,再次跳跃才可触发二段跳。触发时把跳跃状态置为上升,再次定义上升速度。
代码已上传至coderShenhy/python-gamesgithub.com
重新发布于2020.05.11,之前不知道是不是手滑把之前的文章给删除了。前段时间一直在赶项目,也就没时间去写文章,在此先给大家道个歉,之后会努力更新。
