天天酷跑,一款童年游戏,主要是进行跳跃操作,和躲避障碍物,中篇主要实现人物的下蹲,随机障碍物的生成以及优化main函数里面的sleep(30)
一. 游戏的展示效果
二.本节开发日志
上篇已更新 : 天天酷跑上篇
优化main函数里面的sleep(30);
1.利用接口getDelay()函数
2.更新窗口标志update;
3.优化来自用户点击时候的消息
实现玩家的下蹲
1利用计数器
随机障碍物的实现
1.障碍物池子
2.随机数取类型
三.优化上篇中main函数里的sleep(30)
首先为什么要优化这个呢?
了解sleep的都知道,这个是让程序休眠30ms也就是当程序执行到这里的时候,会在这里呆30ms,因为这款游戏需要接收玩家的按键消息,所以有时候玩家在这30ms内有键盘响应的时候,由于程序休眠,无法接收到消息,会降低游戏的体验性
要解决的问题: 在按跳跃键的时候不受sleep的影响
解决方法 : 利用时间戳,定义一个计时器,当达到该计时器的设定的时间就可以打开刷新窗口的按钮,或者当跳跃时候打开该按钮,代码如下:
int main() { init(); while (1) { keyEvent(); timer += getDelay(); if (timer >= 30) { timer = 0; update = true; } if (update) { update = false; BeginBatchDraw(); //渲染背景 updataBg(); //实现人物的奔跑 putimagePNG2(heroX, heroY, &imgHero[heroIndex]); //渲染障碍物 updateEnemy(); EndBatchDraw(); fly(); } } system("pause"); return 0; }
代码解释 : timer是一个全局变量,用于累加两次函数执行的时间,当达到30ms就会将update标志设置为true进行刷新界面
时间戳 : 一个用于表示特定时刻的数值,通常是一个整数或浮点数。在上述代码中,时间戳用于记录函数调用的时间点
这样优化的话,感觉和sleep(30)的效果一样,此时还需要在跳跃的时候将其update设为true,在以后只要接受玩家键盘消息的时候都要加上
void jump() { //跳跃只需要改变y值即可,在底层数据管理函数实现,此时只需要给出可以改数据的信号即可 heroJump = true; update = true; }
这样的话就解决了玩家按跳跃键程序休眠的问题 ,此时提高了游戏的体验性
开发之前,先回顾一下上篇中的开发流程,将开发分为两层,一个是渲染层(update)一个是数据层(fly),渲染层是将游戏的图片呈现出来,数据层是控制渲染层的,实现游戏的控制,其他的功能根据可封装为函数围绕这两层进行展开,将游戏的资源加载放在初始化函数(init)
四.实现玩家的下蹲功能
天天酷跑主要就是跳跃和下蹲,下蹲可躲避障碍物柱子,给障碍物的创建先奠定基础,实现下蹲和实现跳跃的流程大致相似,分析可知,下蹲时玩家发出的信号,那么我们就可用从用户点击函数开始开发,当玩家按下a的时候执行下蹲操作
资源必须先加载进来,因为下蹲有两张图片,所以在全局定义一个存放该图片的数组,然后再初始化中进行加载
转载自CSDN-专业IT技术社区
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/weixin_73865721/article/details/132632295