BeginScene.cpp 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118
  1. #include "BeginScene.h"
  2. #include "GameScene.h"
  3. #include "SimpleAudioEngine.h"
  4. #include "GameScene/Ball.h"
  5. #include "params.h"
  6. USING_NS_CC;
  7. Scene* BeginScene::createScene() {
  8. auto scene = Scene::createWithPhysics();
  9. Size visibleSize = Director::getInstance()->getVisibleSize();
  10. #if DEBUG
  11. scene->getPhysicsWorld()->setDebugDrawMask(PhysicsWorld::DEBUGDRAW_ALL);
  12. #endif
  13. auto layer = BeginScene::create();
  14. scene->addChild(layer);
  15. auto material = PHYSICSBODY_MATERIAL_DEFAULT;
  16. material.density = 1.0f;
  17. material.restitution = 1.0f;
  18. material.friction = 0.0f;
  19. // the edge of the screen
  20. auto body = PhysicsBody::createEdgeBox(visibleSize, material);
  21. auto edgeNode = Node::create();
  22. edgeNode->setPosition(Point(visibleSize.width/2,visibleSize.height/2));
  23. body->setDynamic(false);
  24. edgeNode->setPhysicsBody(body);
  25. scene->addChild(edgeNode);
  26. return scene;
  27. }
  28. bool BeginScene::init() {
  29. //////////////////////////////
  30. // 1. super init first
  31. if ( !Layer::init() )
  32. {
  33. return false;
  34. }
  35. auto visibleSize = Director::getInstance()->getVisibleSize();
  36. Vec2 origin = Director::getInstance()->getVisibleOrigin();
  37. // Adiona o fundo
  38. auto bg = cocos2d::LayerColor::create(COLOR_back);
  39. this->addChild(bg);
  40. auto menu_item_start = MenuItemFont::create(MSG_START, CC_CALLBACK_1(BeginScene::Play, this));
  41. menu_item_start->setFontNameObj(FONT);
  42. menu_item_start->setPosition(Point(visibleSize.width / 2, (visibleSize.height*0.25)));
  43. auto *menu = Menu::create(menu_item_start, NULL);
  44. menu->setPosition(Point(0, 0));
  45. this->addChild(menu, 10);
  46. for (int i = 0; i < 10; i++) {
  47. auto ball = Ball::create();
  48. ball->setPosition(visibleSize.width / 2, BALL_SIZE*2);
  49. ball->throwBall();
  50. this->addChild(ball);
  51. }
  52. auto core = DrawNode::create();
  53. core->drawDot(Vec2(0, 0), CORE_RADIUS*4, Color4F(COLOR_red));
  54. core->setPosition(Point(visibleSize.width / 2, (visibleSize.height*0.75)));
  55. this->addChild(core);
  56. auto physicsBody = PhysicsBody::createCircle(CORE_RADIUS*4, PhysicsMaterial(0.1f, 0.9f, 0.0f));
  57. physicsBody->setDynamic(false);
  58. core->addComponent(physicsBody);
  59. auto text = Label::createWithTTF(MSG_TITLE, FONT, 100);
  60. text->setPosition(core->getPosition());
  61. this->addChild(text);
  62. double last, diff;
  63. int level;
  64. UserDefault *userdata = UserDefault::getInstance();
  65. level = userdata->getIntegerForKey("level");
  66. last = userdata->getDoubleForKey("time");
  67. unsigned long int sec = time(NULL);
  68. diff = 3600 * LOSE_IS + last - sec;
  69. while (diff < 0 && level > 0) {
  70. last += 3600.0* ((double) LOSE_IS);
  71. level--;
  72. diff = 3600 * LOSE_IS + last - sec;
  73. }
  74. userdata->setDoubleForKey("time", last);
  75. userdata->setIntegerForKey("level", level);
  76. this->levels = 0; // todo!!!! level
  77. char level_text[256];
  78. if (level != 0) {
  79. sprintf(level_text,MSG_LEVEL_BACK, level, diff/3600.0);
  80. auto textlevel = Label::createWithTTF(level_text, FONT, 20);
  81. textlevel->setPosition(menu_item_start->getPositionX(), menu_item_start->getPositionY()-60);
  82. this->addChild(textlevel);
  83. }
  84. return true;
  85. }
  86. void BeginScene::Play(cocos2d::Ref *pSender) {
  87. auto scene = GameScene::createScene(this->levels);
  88. Director::getInstance()->replaceScene(scene);
  89. }