【cocos2d-x制作别踩白块儿】第九期:游戏计时功能(附源代码)

【cocos2d-x制作别踩白块儿】第九期:游戏计时功能(附源代码)

游戏没有计时,不是坑爹吗?

这一期,我们将来加入游戏计时功能。

1. 定义变量和函数

我们先在HelloWorldScene.h中定义几个变量和函数

	long startTime;
	bool timeRunning;

startTime用来记录開始的时间,timeRunning用来推断游戏是否在进行中。

	//開始计时
	void startTimer();

	//结束计时
	void stopTimer();

	virtual void update(float dt);

startTimer()函数时開始计时,stopTimer()函数是结束计时,update()函数是每帧都调用。

2. 详细实现三个函数

然后,我们来看看这三个函数的详细实现

void HelloWorld::update(float dt)
{
	long offset = clock()-startTime;

	timerLabel->setString(StringUtils::format("%g",((double)offset)/1000000));
}

//開始计时
void HelloWorld::startTimer()
{
	if(!timeRunning)
	{
		scheduleUpdate();
		startTime = clock();
		timeRunning = true;
	}
}

//结束计时
void HelloWorld::stopTimer()
{
	if(timeRunning)
	{
		unscheduleUpdate();
		timeRunning = false;
	}
}

startTimer()函数先推断是否正在计时,假设没有的话,先调用update函数。

stopTimer()函数先推断是否正在计时,假设有的话,就卸载update。

update函数用来计算时间差,而且显示出来。

3. 调用函数

当然,实现函数后,就要调用。那么在哪里调用呢?

当然是在点击黑色块后调用startTimer,点击绿色块后调用stopTimer。

                                if(b->getColor()==Color3B::BLACK)
				{
					b->setColor(Color3B::GRAY);
					this->moveDown();
					this->startTimer();

				}
				else if(b->getColor()==Color3B::GREEN)
				{
					this->moveDown();
					this->stopTimer();
				}

4. 执行项目 

执行项目后,效果例如以下

<span>【cocos2d-x制作别踩白块儿】第九期:游戏计时功能(附源代码)</span>

5. 产生真正的随机数

效果执行多了,你会发现,事实上黑色方块并非随机出现,而是常常出如今同一个位置。这时候,我们须要加入一行代码

srand(time(NULL));

这样子,就能让随机数真正的随机产生了。

6. 改动分辨率

看到执行项目后,窗体有点大,事实上是分辨率的问题。在3.0正式版中,改动分辨率不再是在main函数中直接改动了,能够加入例如以下两行代码在AppDelegate中

    glview->setFrameSize(320,480);
    glview->setDesignResolutionSize(320,480,ResolutionPolicy::SHOW_ALL);

记得要加入在例如以下代码的后面

    if(!glview) {
        glview = GLView::create("My Game");
        director->setOpenGLView(glview);
    }

这时候,我们再来执行一下项目,是不是舒服非常多了呢?

<span>【cocos2d-x制作别踩白块儿】第九期:游戏计时功能(附源代码)</span>

到这里为止,我们游戏的核心功能,就基本完毕了。赶紧拿起键盘,来敲写程序吧。

7. 源代码

源代码直达: http://download.csdn.net/detail/legendof1991/7348941

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/119169.html原文链接:https://javaforall.net

(0)
上一篇 2021年11月15日 上午8:00
下一篇 2021年11月15日 上午9:00


相关推荐

  • 精读论文题目_读书要精读的议论文

    精读论文题目_读书要精读的议论文文章目录前言前言

    2025年11月29日
    7
  • JavaWeb之HttpSession

    JavaWeb之HttpSessionHttpSession一、概述HttpSession是由JavaWeb提供的,用来会话跟踪的类。session是服务器端对象,保存在服务器端!!!HttpSession是Servlet三大域对象之一,所以它也有setAttribute()、getAttribute()、removeAttribute()方法。HttpSession底层依赖Cookie,或是URL重写!二、HttpSe…

    2022年7月12日
    23
  • JavaScript定时器的各种案例

    JavaScript定时器的各种案例JavaScript bom 初学者案例 setTimeout 控制时间 setInterval 计时 页面缩放图片隐藏 搜索框 s 的用法

    2026年3月16日
    2
  • 推荐系统——LR模型「建议收藏」

    推荐系统——LR模型「建议收藏」LR模型是广义线性模型。LR模型(对数几率回归模型),虽然叫回归,但是其本质为分类。对数几率函数是一种sigmoid函数。线性模型有可解释性强、易于并行的优点。但是其难以表示非线性关系,所以模型的准确性可能不好。为了增强原始特征与拟合目标之间的非线性关系,通常需要对原始特征做一些非线性转换。常用的转换方法包括:连续特征离散化、特征之间的交叉等。离散化相当于把连续函数变成分段函数来增加非线性…

    2022年10月13日
    6
  • python treeview控件使用详解_winform Treeview控件使用

    python treeview控件使用详解_winform Treeview控件使用做角色菜单权限时用到 treeview 控件做树状显示菜单 简单总结了一下用法 1 在 winform 窗体中拖入 treeview 控件 注意修改属性 CheckBoxes 属性为 true 即在节点旁显示复选框 2 后台动态加载数据库数据绑定到 treeview 上 子节点使用递归添加代码如下 循环添加 treeview 节点 for inti i

    2026年3月17日
    2
  • ottomator-agents中的文学创作:AI辅助的写作智能体

    ottomator-agents中的文学创作:AI辅助的写作智能体

    2026年3月16日
    1

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号