如何在 Cocos2d 中显示倒数计时器?
How to Show a Countdown Timer in Cocos2d?
我正在使用 c++ 在 Cocos2d-X v3 中制作平台游戏。
我想在每个级别设置一个倒数计时器,所以当倒数达到 00:00 时游戏就结束了。并显示在屏幕的右上角,让玩家知道这一点。
最好的方法是什么?
我是 Cocos 和游戏开发
的新手
最简单的方法是使用 Cococs2d-x class 命名为 ProgressTimer。
首先你需要一个你的定时器精灵并定义两个浮点变量:maximumTimePerLevel, currentTime:
float maximumTimePerLevel = ... // your time
float currentTime = maximumTimePerLevel
auto sprTimer = Sprite::create("timer.png");
然后你初始化你的计时器:
void Timer::init()
{
auto timeBar = ProgressTimer::create(sprTimer);
timeBar->setType(ProgressTimer::Type::RADIAL); // or Type::BAR
timeBar->setMidpoint(Vec2(0.5f, 0.5f)); // set timer's center. It's important!
timeBar->setPercentage(100.0f); // countdown timer will be full
this->addChild(timeBar);
// and then you launch countdown:
this->schedule(schedule_selector(Timer::updateTime));
}
在你的 updateTime 方法中:
void Timer::updateTime(float dt)
{
currentTime -= dt;
timeBar->setPercentage(100 * currentTime / maximumTimePerLevel);
if (currentTime <= 0 && !isGameOver)
{
isGameOver = true;
// all Game Over actions
}
}
就是这样!
关于 ProgressTimer 的更多信息,您可以找到 here。 link 是 Cocos2d-x v.2.x 的示例,但带有示例和图像。
如果你只想在标签中显示时间,还有另一种解决方案:
1) 创建一个浮点变量,用于存储剩余时间。同时声明更新函数和时间标签:
float time;
virtual void update(float delta);
ui::Label txtTime;
2) 在 init 函数中初始化它并安排更新:
time = 90.0f;
scheduleUpdate();
//create txtTime here or load it from CSLoader (Cocos studio)
3) 更新你的时间:
void update(float delta){
time -= delta;
if(time <= 0){
time = 0;
//GAME OVER
}
//update txtTime here
}
第三个选项是使用调度程序。
//In your .h file.
float time;
//In your .cpp file.
auto callback = [this](float dt){
time -= dt;
if(time == 0)
{
//Do your game over stuff..
}
};
cocos2d::schedule(callback, this, 1, 0, 0, false, "SomeKey");
我正在使用 c++ 在 Cocos2d-X v3 中制作平台游戏。
我想在每个级别设置一个倒数计时器,所以当倒数达到 00:00 时游戏就结束了。并显示在屏幕的右上角,让玩家知道这一点。
最好的方法是什么? 我是 Cocos 和游戏开发
的新手最简单的方法是使用 Cococs2d-x class 命名为 ProgressTimer。
首先你需要一个你的定时器精灵并定义两个浮点变量:maximumTimePerLevel, currentTime:
float maximumTimePerLevel = ... // your time
float currentTime = maximumTimePerLevel
auto sprTimer = Sprite::create("timer.png");
然后你初始化你的计时器:
void Timer::init()
{
auto timeBar = ProgressTimer::create(sprTimer);
timeBar->setType(ProgressTimer::Type::RADIAL); // or Type::BAR
timeBar->setMidpoint(Vec2(0.5f, 0.5f)); // set timer's center. It's important!
timeBar->setPercentage(100.0f); // countdown timer will be full
this->addChild(timeBar);
// and then you launch countdown:
this->schedule(schedule_selector(Timer::updateTime));
}
在你的 updateTime 方法中:
void Timer::updateTime(float dt)
{
currentTime -= dt;
timeBar->setPercentage(100 * currentTime / maximumTimePerLevel);
if (currentTime <= 0 && !isGameOver)
{
isGameOver = true;
// all Game Over actions
}
}
就是这样!
关于 ProgressTimer 的更多信息,您可以找到 here。 link 是 Cocos2d-x v.2.x 的示例,但带有示例和图像。
如果你只想在标签中显示时间,还有另一种解决方案:
1) 创建一个浮点变量,用于存储剩余时间。同时声明更新函数和时间标签:
float time;
virtual void update(float delta);
ui::Label txtTime;
2) 在 init 函数中初始化它并安排更新:
time = 90.0f;
scheduleUpdate();
//create txtTime here or load it from CSLoader (Cocos studio)
3) 更新你的时间:
void update(float delta){
time -= delta;
if(time <= 0){
time = 0;
//GAME OVER
}
//update txtTime here
}
第三个选项是使用调度程序。
//In your .h file.
float time;
//In your .cpp file.
auto callback = [this](float dt){
time -= dt;
if(time == 0)
{
//Do your game over stuff..
}
};
cocos2d::schedule(callback, this, 1, 0, 0, false, "SomeKey");