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

摘要:

在这个场景中,菜单项目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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值