一、创建文件~

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)效果图~

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)效果图~

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)上效果图

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的搭建的更多相关文章

  1. cocos2dx游戏开发——捕鱼达人mini版学习笔记(一)——FishAchor的搭建

    一.创建文件· FishAchor.h还有FishAchor.cpp. 主要就是创建每种鱼的类,方便以后的取用~,很多是重复性的操作,然后我们是mini版,暂时也就加入大概6钟鱼就好= =,然后我们现 ...

  2. 《Cocos2d-x游戏开发实战精解》学习笔记4--实战一个简单的钢琴

    上一节学习了使用Cocos2d-x播放音乐的方法,但是那种方法一般只适合于播放较大的音乐,而一般比较短小的音乐(如游戏中的打斗.按键音效等)则要通过playEffect来播放.本节使用该方法以及之前学 ...

  3. 《Cocos2d-x游戏开发实战精解》学习笔记3--在Cocos2d-x中播放声音

    <Cocos2d-x游戏开发实战精解>学习笔记1--在Cocos2d中显示图像 <Cocos2d-x游戏开发实战精解>学习笔记2--在Cocos2d-x中显示一行文字 之前的内 ...

  4. 《Cocos2d-x游戏开发实战精解》学习笔记1--在Cocos2d中显示图像

    Cocos2d-x中的图像是通过精灵类来显示的.在Cocos2d-x中游戏中的每一个角色.怪物.道具都可以理解成是一个精灵,游戏背景作为一种特殊的单位将其理解成是一个精灵也没有什么不妥.在源文件本章目 ...

  5. cocos2dx游戏开发——别踩白块学习笔记(二)——经典模式的实现

    一.创建GameScene以及GameLayer 就是简单创建一个Scene而已,在此就不多说啦~,可以参照我的打飞机的学习笔记(2). 二.添加一个开始栏 很简单,就是调用Block中的create ...

  6. 《Cocos2d-x游戏开发实战精解》学习笔记2--在Cocos2d-x中显示一行文字

    在Cocos2d-x中要显示文字就需要用到Label控件.在3.x版本的Cocos2d中,舍弃了之前版本所使用的LabelTTF.LabelAtlas.LabelBMFont 3个用于显示文字的类,而 ...

  7. cocos2dx游戏开发——别踩白块学习笔记(一)——Block类

    一.Block类介绍 当然啦,Block类在这个游戏里就是必需品= =,因为整体都是由这个搞出来的,所以我们可以把游戏需要实现的功能都放在这里. 主要有下面这些功能(经典模式): 1.创建一个Bloc ...

  8. 【原】Learning Spark (Python版) 学习笔记(二)----键值对、数据读取与保存、共享特性

    本来应该上周更新的,结果碰上五一,懒癌发作,就推迟了 = =.以后还是要按时完成任务.废话不多说,第四章-第六章主要讲了三个内容:键值对.数据读取与保存与Spark的两个共享特性(累加器和广播变量). ...

  9. PMBOK(第五版)学习笔记二-十大知识领域(P87)

    五大项目管理过程组:启动.规划.执行.监控.收尾过程组 十大知识领域是:项目整合管理.项目范围管理.项目时间管理.项目成本管理.项目质量管理.项目人力资源管理.项目沟通管理.项目风险管理.项目采购管理 ...

随机推荐

  1. NoClassDefFoundError: org/hibernate/annotations/common/reflection/ReflectionManager 解决方法

    差一个jar包, 将hibernate-commons-annotations.jar加入到classpath中

  2. WCF报 当前已禁用此服务的元数据发布的错误

    这是 Windows© Communication Foundation 服务. 当前已禁用此服务的元数据发布. 如果具有该服务的访问权限,则可以通过完成下列步骤来修改 Web 或应用程序配置文件以便 ...

  3. Linux 解压命令tar的理解

    今天回顾了下tar 这个打包工具的一些常用参数 选项与参数: -c :创建打包文件,可搭配 -v 来察看过程中被打包的档名(filename) -t :察看打包文件的内容含有哪些档名,重点在察看『档名 ...

  4. HNU 12826 Balloons Colors

    题目链接:http://acm.hnu.cn/online/?action=problem&type=show&id=12826&courseid=268 #include&l ...

  5. [Effective JavaScript 笔记]第41条:将原型视为实现细节

    对象原型链 一个对象给其使用者提供了轻量.简单.强大的操作集.使用者与一个对象最基本的交互是获取其属性值和调用其方法.这些操作不是特别在意属性存储在原型继承结构的哪个位置.随着时间推移,实现对象时可能 ...

  6. MYSQL注入天书之HTTP头部介绍

    Background-5 HTTP头部介绍 在利用抓包工具进行抓包的时候,我们能看到很多的项,下面详细讲解每一项. HTTP头部详解 1. Accept:告诉WEB服务器自己接受什么介质类型,*/* ...

  7. Dmaven.multiModuleProjectDirectory system propery is not set.

    eclipse中使用maven插件的时候,运行run as maven build的时候报错-Dmaven.multiModuleProjectDirectory system propery is ...

  8. onfiguration problem: Unable to locate Spring NamespaceHandler for XML schema namespace [http://www.springframework.org/schema/security]

    org.springframework.beans.factory.parsing.BeanDefinitionParsingException: Configuration problem: Una ...

  9. Java和PyPy速度对比

    Java和PyPy运行同一段代码,对比结果. Java代码: package javatest; import java.text.DecimalFormat; import java.util.Da ...

  10. Html5 History API解析

    浏览器前进与回退操作 在传统的浏览器中我们只能通过调用window.history对象的 forward() . back() 或 go(number|url) 方法来进行页面的前进.回退或跳转到某一 ...