游戏没有计时,不是坑爹吗?
这一期,我们将来添加游戏计时功能。
我们先在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