一、创建文件~
MainMenuScene.h MainMenuScene.cpp MainMenuLayer.h MainMenuLayer.cpp
那个场景的搭建就不多说了,那个我的打飞机还有别踩白块的学习笔记里有~
二、How to do?
1、initBackground(),创建背景~
(1)在init中先获得屏幕的大小,还有加入图片进入缓存
visibleSize = Director::getInstance()->getVisibleSize(); origin = Director::getInstance()->getVisibleOrigin(); //add texture to cache SpriteFrameCache::getInstance()->addSpriteFramesWithFile("MainMenu/UI_GameMenuText_cn-hd.plist"); SpriteFrameCache::getInstance()->addSpriteFramesWithFile("MainMenu/UI_GameStartMenuLayer-hd.plist"); SpriteFrameCache::getInstance()->addSpriteFramesWithFile("MainMenu/FishActor-Small-hd.plist"); SpriteFrameCache::getInstance()->addSpriteFramesWithFile("MainMenu/FishActor-Marlin-hd.plist");
(2)实现方法~
void MainMenuLayer::initBackground() { //set background auto ui_background = Sprite::create("MainMenu/ui_background_normal-hd.png"); ui_background->setAnchorPoint(Vec2::ZERO); ui_background->setPosition(Vec2::ZERO); this->addChild(ui_background); //Set game logo auto ui_Logo = Sprite::create("MainMenu/main_ui_title_cn-hd.png"); ui_Logo->setPosition(Vec2(visibleSize.width / 2.0f, visibleSize.height / 1.35f)); this->addChild(ui_Logo, 2); }
记得最后要加入到init里面去哦~
(3)效果图~
2、加入按钮~
(1)方法实现~
//Create the start button of the game auto startGameBtn = Sprite::createWithSpriteFrameName("ui_button_box02_02.png"); auto startGameBtnPush = Sprite::createWithSpriteFrameName("ui_button_box02_01.png"); auto startGameFont = Sprite::createWithSpriteFrameName("ui_2p_010.png"); //Create the scene choose button auto sceneChooseBtn = Sprite::createWithSpriteFrameName("ui_button_box01_02.png"); auto sceneChooseBtnPush = Sprite::createWithSpriteFrameName("ui_button_box01_01.png"); auto sceneChooseFont = Sprite::createWithSpriteFrameName("button_other_014.png"); //Create the menu auto startGameMenuItem = MenuItemSprite::create(startGameBtn, startGameBtnPush, CC_CALLBACK_1(MainMenuLayer::startGameEvent, this)); auto sceneChooseMenuItem = MenuItemSprite::create(sceneChooseBtn, sceneChooseBtnPush, CC_CALLBACK_1(MainMenuLayer::sceneChoose, this)); sceneChooseMenuItem->setPosition(Point(startGameMenuItem->getPosition().x, startGameMenuItem->getPosition().y - 140)); auto startGameMenu = Menu::create(startGameMenuItem, sceneChooseMenuItem, NULL); //Set the posiiton of menu startGameMenu->setPosition(Point(visibleSize.width / 2.0f, visibleSize.height / 1.35f-230)); startGameFont->setPosition(Point(visibleSize.width / 2.0f, visibleSize.height / 1.35f-220)); sceneChooseFont->setPosition(Point(visibleSize.width / 2.0f, visibleSize.height / 1.35f-370)); //Add the menu into the scene this->addChild(startGameMenu, 2); this->addChild(startGameFont, 3); this->addChild(sceneChooseFont, 3);
(2)效果图~
3、加入泡泡~
(1)粒子效果的加入~
ParticleSystemQuad* MainMenuLayer::createPaopao(Vec2 position) { //Create the paraticle of bubble auto paopao = ParticleSystemQuad::create("MainMenu/lizhi_qipao.plist"); //Set the bubble position type form the ground paopao->setPositionType(ParticleSystemQuad::PositionType::RELATIVE); paopao->setPosition(position); paopao->setScale(2.0f); return paopao; }
在这里大家看到粒子特效的文件是已经完成的,存在一个plist文件里面而已,所以我们以后可以通过一些辅助的软件进行制作,
(2)创建泡泡
void MainMenuLayer::initBubble() { auto paopaoLeft = createPaopao(Vec2(0, 0)); this->addChild(paopaoLeft, 4); //Create the bubble on the lower right corner auto paopaoRight = createPaopao(Vec2(visibleSize.width, 0)); this->addChild(paopaoRight, 4); }
(3)上效果图
4、上鱼群~
(1)鱼群的动作的创建~
a.一群小鱼~
ActionInterval* MainMenuLayer::createFishMoveAction(FishActor *fish) { //Let the matrix of fishes move back and forth return RepeatForever::create( Sequence::create( MoveTo::create(12, Point(fish->getPositionX() - 1300, fish->getPositionY())), CallFunc::create(CC_CALLBACK_0(MainMenuLayer::turnBack, this, fish)), MoveTo::create(8, Point(fish->getPositionX() + 1000, fish->getPositionY())), CallFunc::create(CC_CALLBACK_0(MainMenuLayer::turnBack, this, fish)), NULL)); }
void MainMenuLayer::turnBack(Node* sender) { if (sender->getRotation() == 0.0f) { sender->setRotation(180.00f); } else { sender->setRotation(0.00f); } }
上面就是创建一个鱼从右游到左,再从左移到右的动画~
b、大鱼
大鱼的动画就是看到的只有从左到右~
ActionInterval* MainMenuLayer::createMarlinMoveAction(MarlinsFishActor *fish) { //Let the marlin fis move behind the matrix of fishes return RepeatForever::create( Sequence::create( MoveTo::create(12, Point(fish->getPositionX() - 1300, fish->getPositionY())), CallFunc::create(CC_CALLBACK_0(MainMenuLayer::marlinTurnBack, this, fish)), MoveTo::create(8, Point(fish->getPositionX() + 1000, fish->getPositionY())), CallFunc::create(CC_CALLBACK_0(MainMenuLayer::marlinTurnBack, this, fish)), NULL)); }
void MainMenuLayer::marlinTurnBack(Node *sender) { if (sender->getRotation() == 0.0f) { sender->setVisible(true); sender->setRotation(180.00f); } else { sender->setVisible(false); sender->setRotation(0.00f); } }
(2)上鱼群
void MainMenuLayer::fishActorsInital() { //Create fishes for (int fishIndex = 0; fishIndex < 7; fishIndex++) {//同种类鱼的条数 auto smallFishActor = FishActor::createWithType(FishActor::FishActorType::SmallFish); auto angelFishActor = FishActor::createWithType(FishActor::FishActorType::AngelFish); auto croakerFishActor = FishActor::createWithType(FishActor::FishActorType::Croaker); auto amphiprionFishActor = FishActor::createWithType(FishActor::FishActorType::Bream); auto breamFishActor = FishActor::createWithType(FishActor::FishActorType::SmallFish); //Set the position of the fishes like a matrix smallFishActor->setPosition(Vec2(2000 - visibleSize.width / 10 * (fishIndex + 1), visibleSize.height / 6)); angelFishActor->setPosition(Vec2(2000 - visibleSize.width / 10 * (fishIndex + 1), visibleSize.height / 6 * 2)); croakerFishActor->setPosition(Vec2(2000 - visibleSize.width / 10 * (fishIndex + 1), visibleSize.height / 6 * 3)); amphiprionFishActor->setPosition(Vec2(2000 - visibleSize.width / 10 * (fishIndex + 1), visibleSize.height / 6 * 4)); breamFishActor->setPosition(Vec2(2000 - visibleSize.width / 10 * (fishIndex + 1), visibleSize.height / 6 * 5)); smallFishActor->runAction(createFishMoveAction(smallFishActor)); angelFishActor->runAction(createFishMoveAction(angelFishActor)); croakerFishActor->runAction(createFishMoveAction(croakerFishActor)); amphiprionFishActor->runAction(createFishMoveAction(amphiprionFishActor)); breamFishActor->runAction(createFishMoveAction(breamFishActor)); //Add the fishes into the scene this->addChild(smallFishActor, 1); this->addChild(angelFishActor, 1); this->addChild(croakerFishActor, 1); this->addChild(amphiprionFishActor, 1); this->addChild(breamFishActor, 1); } auto marlin = FishActor::createWithType(FishActor::FishActorType::MarlinsFish); marlin->setVisible(false); marlin->setPosition(Vec2(1000, visibleSize.height / 2)); marlin->runAction(MainMenuLayer::createMarlinMoveAction((MarlinsFishActor*)marlin)); this->addChild(marlin, 1); }
(3)上效果图~