您的位置:首页 > 移动开发 > Cocos引擎

Cocos2d-x 自己对某场景思路整理

2016-03-11 00:30 393 查看
摘要:

在这个场景中,菜单项目MenuItem有三个,主要是返回按钮(右上角的×)和向左向右翻的两个箭头。

在该场景初始化成员函数中,首先从TEXTURE Package中打包好的文件中加载图片的缓存(创建精灵),然后设置背景精灵的位置,并把该背景精灵添加到该MJLayer层中;

然后,秘籍技能界面,同样是基于打包好的缓存来加载图片,以此创建相应精灵,注意使用的API,设置位置等;

注意:interface_1->setVisible(true);为什么这里设置成了true,flag有什么作用,箭头按钮是翻页的

flag = true;

// 切换按钮

flag = true;
// 切换按钮
auto nextRightItem = MenuItemSprite::create(
Sprite::createWithSpriteFrame(SpriteFrameCache::getInstance()->getSpriteFrameByName("PageTurnNormal.png")),
Sprite::createWithSpriteFrame(SpriteFrameCache::getInstance()->getSpriteFrameByName("PageTurnSelected.png")),
[&](Ref* ref){
PLAYEFFECT;
if (flag)
{
interface_2->setVisible(true);
flag = false;
}
else
{
interface_2->setVisible(false);
flag = true;
}
});


最后,创建好的MenuItem精灵等要加载到Menu菜单中,调用的API为auto menu = Menu::create(closeItem, nextRightItem, nextLeftItem, NULL);

注意:不熟系的类成员函数,或者各种宏定义,只要不懂都要查看下★定义★



include "cocos2d.h"
#include "extensions/cocos-ext.h"
#include "MJLayer.h"
#include "GlobalDefine.h"
#include "StartLayer.h"

using namespace cocos2d::extension;
using namespace cocos2d;

Scene* MJLayer::createScene()
{
Scene* scene = Scene::create();//
Layer* layer = MJLayer::create();
scene->addChild(layer);
return scene;
}

bool MJLayer::init()
{
if (!Layer::init())//
return false;
// 背景
spriteBG = Sprite::createWithSpriteFrame(SpriteFrameCache::getInstance()->getSpriteFrameByName("CheatsBackground.png"));

spriteBG->setPosition(WINSIZE.width / 2, WINSIZE.height / 2);

this->addChild(spriteBG);

// 秘籍技能界面
interface_1 = Sprite::createWithSpriteFrame(SpriteFrameCache::getInstance()->getSpriteFrameByName("CheatsInterface1.png"));
interface_2 = Sprite::createWithSpriteFrame(SpriteFrameCache::getInstance()->getSpriteFrameByName("CheatsInterface2.png"));
interface_1->setPosition(WINSIZE.width / 2, WINSIZE.height / 2 - 10);
interface_1->setVisible(true);
interface_2->setPosition(WINSIZE.width / 2, WINSIZE.height / 2 - 10);
interface_2->setVisible(false);
spriteBG->addChild(interface_1);
spriteBG->addChild(interface_2);

// 关闭按钮
//static MenuItemSprite * create(Node* normalSprite, Node* selectedSprite, Node* disabledSprite = nullptr);
auto closeItem = MenuItemSprite::create(
Sprite::createWithSpriteFrame(SpriteFrameCache::getInstance()->getSpriteFrameByName("OffNormal.png")),
Sprite::createWithSpriteFrame(SpriteFrameCache::getInstance()->getSpriteFrameByName("OffSelected.png")),
[](Ref *ref){
PLAYEFFECT;
Director::getInstance()->replaceScene(StartLayer::createScene()); }
);

closeItem->setPosition(WINSIZE.width - 164, WINSIZE.height - 132);
flag = true;

// 切换按钮
auto nextRightItem = MenuItemSprite::create(
Sprite::createWithSpriteFrame(SpriteFrameCache::getInstance()->getSpriteFrameByName("PageTurnNormal.png")),
Sprite::createWithSpriteFrame(SpriteFrameCache::getInstance()->getSpriteFrameByName("PageTurnSelected.png")),
[&](Ref* ref){
PLAYEFFECT;
if (flag)
{
interface_2->setVisible(true);
flag = false;
}
else
{
interface_2->setVisible(false);
flag = true;
}
});

nextRightItem->setPosition(WINSIZE.width-55, WINSIZE.height/2 -14);
// 点击切换按钮
auto nor = Sprite::createWithSpriteFrame(SpriteFrameCache::getInstance()->getSpriteFrameByName("PageTurnNormal.png"));
nor->setFlippedX(true);
auto sel = Sprite::createWithSpriteFrame(SpriteFrameCache::getInstance()->getSpriteFrameByName("PageTurnSelected.png"));
sel->setFlippedX(true);

auto nextLeftItem = MenuItemSprite::create(
Sprite::createWithSpriteFrame(SpriteFrameCache::getInstance()->getSpriteFrameByName("PageTurnNormal.png")),
Sprite::createWithSpriteFrame(SpriteFrameCache::getInstance()->getSpriteFrameByName("PageTurnSelected.png")),
[&](Ref *ref){
PLAYEFFECT;
if (flag)
{
interface_1->setVisible(true);
flag = false;
}
else
{
interface_1->setVisible(false);
flag = true;
}
});
nextRightItem->setPosition(55, WINSIZE.height / 2 - 14);

auto menu = Menu::create(closeItem, nextRightItem, nextLeftItem, NULL);
menu->setPosition(Point::ZERO);
return true;
}

REF: 代码参考jikexueyuan.com视频教程,整理by:IFuMI
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: