游戏没有计时,不是坑爹吗?
这一期,我们将来加入游戏计时功能。
我们先在HelloWorldScene.h中定义几个变量和函数
long startTime;
bool timeRunning;
startTime用来记录開始的时间,timeRunning用来推断游戏是否在进行中。
//開始计时
void startTimer();
//结束计时
void stopTimer();
virtual void update(float dt);
startTimer()函数时開始计时,stopTimer()函数是结束计时,update()函数是每帧都调用。
然后,我们来看看这三个函数的详细实现
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函数用来计算时间差,而且显示出来。
当然,实现函数后,就要调用。那么在哪里调用呢?
当然是在点击黑色块后调用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();
}
执行项目后,效果例如以下
效果执行多了,你会发现,事实上黑色方块并非随机出现,而是常常出如今同一个位置。这时候,我们须要加入一行代码
srand(time(NULL));
这样子,就能让随机数真正的随机产生了。
看到执行项目后,窗体有点大,事实上是分辨率的问题。在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);
}
这时候,我们再来执行一下项目,是不是舒服非常多了呢?
到这里为止,我们游戏的核心功能,就基本完毕了。赶紧拿起键盘,来敲写程序吧。
源代码直达: http://download.csdn.net/detail/legendof1991/7348941
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/119169.html原文链接:https://javaforall.cn