-
Sonar Systems adminLikes 1Problem Description
Your creating that awesome racer, but you need a lap timer system, here it is
Solution DescriptionVideo Solution:
Header File
#ifndef __HELLOWORLD_SCENE_H__ #define __HELLOWORLD_SCENE_H__ #include "cocos2d.h" class HelloWorld : public cocos2d::Layer { public: // there's no 'id' in cpp, so we recommend returning the class instance pointer static cocos2d::Scene* createScene(); // Here's a difference. Method 'init' in cocos2d-x returns bool, instead of returning 'id' in cocos2d-iphone virtual bool init(); // a selector callback void menuCloseCallback(cocos2d::Ref* pSender); // implement the "static create()" method manually CREATE_FUNC(HelloWorld); void TimerMethod(float dt); cocos2d::Label *label; float time; float laps[3]; int lapIndex; }; #endif // __HELLOWORLD_SCENE_H__
Implementation File
#include "HelloWorldScene.h" #include USING_NS_CC; Scene* HelloWorld::createScene() { // 'scene' is an autorelease object auto scene = Scene::create(); // 'layer' is an autorelease object auto layer = HelloWorld::create(); // add layer as a child to scene scene->addChild(layer); // return the scene return scene; } // on "init" you need to initialize your instance bool HelloWorld::init() { ////////////////////////////// // 1. super init first if ( !Layer::init() ) { return false; } Size visibleSize = Director::getInstance()->getVisibleSize(); Vec2 origin = Director::getInstance()->getVisibleOrigin(); ///////////////////////////// // 2. add a menu item with "X" image, which is clicked to quit the program // you may modify it. // add a "close" icon to exit the progress. it's an autorelease object auto closeItem = MenuItemImage::create( "CloseNormal.png", "CloseSelected.png", CC_CALLBACK_1(HelloWorld::menuCloseCallback, this)); closeItem->setPosition(Vec2(origin.x + visibleSize.width - closeItem->getContentSize().width/2 , origin.y + closeItem->getContentSize().height/2)); // create menu, it's an autorelease object auto menu = Menu::create(closeItem, NULL); menu->setPosition(Vec2::ZERO); this->addChild(menu, 1); ///////////////////////////// // 3. add your codes below... // add a label shows "Hello World" // create and initialize a label label = Label::createWithTTF("0", "fonts/Marker Felt.ttf", 24); // position the label on the center of the screen label->setPosition(Vec2(origin.x + visibleSize.width/2, origin.y + visibleSize.height - label->getContentSize().height)); // add the label as a child to this layer this->addChild(label, 1); time = 0; lapIndex = 0; this->schedule(schedule_selector(HelloWorld::TimerMethod), 0.01); return true; } void HelloWorld::TimerMethod(float dt) { time += dt; __String *timeToDisplay = __String::createWithFormat("%.2f", time); label->setString(timeToDisplay->getCString()); } void HelloWorld::menuCloseCallback(Ref* pSender) { if ( lapIndex < 3 ) { laps[lapIndex] = time; lapIndex++; log( "Lap %i: %.2f", lapIndex, time ); time = 0; } }
Login to reply