cocos2dx游戏开发——捕鱼达人mini版学习笔记(二)——MainMenu的搭建

时间:2021-06-22 16:18:55

一、创建文件~

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, );
}

记得最后要加入到init里面去哦~

(3)效果图~

cocos2dx游戏开发——捕鱼达人mini版学习笔记(二)——MainMenu的搭建

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 - ));
auto startGameMenu = Menu::create(startGameMenuItem, sceneChooseMenuItem, NULL); //Set the posiiton of menu
startGameMenu->setPosition(Point(visibleSize.width / 2.0f, visibleSize.height / 1.35f-));
startGameFont->setPosition(Point(visibleSize.width / 2.0f, visibleSize.height / 1.35f-));
sceneChooseFont->setPosition(Point(visibleSize.width / 2.0f, visibleSize.height / 1.35f-)); //Add the menu into the scene
this->addChild(startGameMenu, );
this->addChild(startGameFont, );
this->addChild(sceneChooseFont, );

(2)效果图~

cocos2dx游戏开发——捕鱼达人mini版学习笔记(二)——MainMenu的搭建

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(, ));
this->addChild(paopaoLeft, ); //Create the bubble on the lower right corner
auto paopaoRight = createPaopao(Vec2(visibleSize.width, ));
this->addChild(paopaoRight, );
}

(3)上效果图

cocos2dx游戏开发——捕鱼达人mini版学习笔记(二)——MainMenu的搭建

4、上鱼群~

(1)鱼群的动作的创建~

a.一群小鱼~

ActionInterval* MainMenuLayer::createFishMoveAction(FishActor *fish)
{ //Let the matrix of fishes move back and forth
return RepeatForever::create(
Sequence::create(
MoveTo::create(, Point(fish->getPositionX() - , fish->getPositionY())), CallFunc::create(CC_CALLBACK_0(MainMenuLayer::turnBack, this, fish)),
MoveTo::create(, Point(fish->getPositionX() + , 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(, Point(fish->getPositionX() - , fish->getPositionY())), CallFunc::create(CC_CALLBACK_0(MainMenuLayer::marlinTurnBack, this, fish)),
MoveTo::create(, Point(fish->getPositionX() + , 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 = ; fishIndex < ; 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( - visibleSize.width / * (fishIndex + ), visibleSize.height / ));
angelFishActor->setPosition(Vec2( - visibleSize.width / * (fishIndex + ), visibleSize.height / * ));
croakerFishActor->setPosition(Vec2( - visibleSize.width / * (fishIndex + ), visibleSize.height / * ));
amphiprionFishActor->setPosition(Vec2( - visibleSize.width / * (fishIndex + ), visibleSize.height / * ));
breamFishActor->setPosition(Vec2( - visibleSize.width / * (fishIndex + ), visibleSize.height / * )); 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, );
this->addChild(angelFishActor, );
this->addChild(croakerFishActor, );
this->addChild(amphiprionFishActor, );
this->addChild(breamFishActor, );
} auto marlin = FishActor::createWithType(FishActor::FishActorType::MarlinsFish);
marlin->setVisible(false);
marlin->setPosition(Vec2(, visibleSize.height / ));
marlin->runAction(MainMenuLayer::createMarlinMoveAction((MarlinsFishActor*)marlin));
this->addChild(marlin, );
}

(3)上效果图~

cocos2dx游戏开发——捕鱼达人mini版学习笔记(二)——MainMenu的搭建