Cocos2d-x   发布时间:2022-05-02  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了Cocos2dx 3.0 实战之—— 重写《超级马里奥》其八 主菜单界面大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

一切之前还是说抱歉,因为本人的确实不会搞美工做的事情,所以素材的图片丑的要死。

先看此界面的效果:



然后源码是:

@H_557_1@menuScene.h

/**
* 主菜单场景的声明
*/
#ifndef __MENU_SCENE_H__
#define __MENU_SCENE_H__

#include "cocos2d.h"

USING_NS_Cc;
/**
* 定义一个MenuLayer类继承自Layer类
*/
class MenuLayer : public Layer
{
public:
	/**
	* 构造函数
	*/
	MenuLayer();
	/**
	* 析构函数
	*/
	virtual ~MenuLayer();
	/**
	* 创建当前场景并加入MenuLayer层
	*/
	static Scene* createScene();
	/**
	* 初始化MenuLayer层
	*/
	virtual bool init();
	/**
	 * 去主游戏场景
	 */
	void goToMainGameScene(Ref* pSender);
	/**
	* 创建MenuLayer层
	*/
	CREATE_FUNC(MenuLayer);
};
#endif

@H_557_1@menuScene.cpp

/**
 *  主菜单场景的实现
 */
#include "MenuScene.h"
#include "VisibleRect.h"

/**
* 构造函数,一般用来初始化变量
*/
MenuLayer::MenuLayer(){}

/**
* 析构函数,一般用来释放内存
*/
MenuLayer::~MenuLayer(){}

/**
* 创建场景,加入MenuLayer层
*/
Scene* MenuLayer::createScene()
{
	Scene* scene = Scene::create();

	MenuLayer *layer = MenuLayer::create();

	scene->addChild(layer);

	return scene;
}

/**
* 初始化 MenuLayer
*/
bool MenuLayer::init()
{
	if (!Layer::init())
	{
		return false;
	}
	//加载资源
	SpriteFrameCache::geTinstance()->addSpriteFramesWithFile("imageresource.plist","imageresource.png");

	//加入背景页
	Sprite *bg = Sprite::createWithSpriteFramename("menu_bg.png");
	bg->setPosition(VisibleRect::center());
	this->addChild(bg);

	//添加游戏名称包括闪光效果
	Sprite *gamename = Sprite::createWithSpriteFramename("title.png");
	Size clipSize = gamename->getContentSize();

	Sprite* spark = Sprite::createWithSpriteFramename("shark.png");
	spark->setPosition(-clipSize.width,0);

	//裁剪
	ClippingNode* clippingNode = ClippingNode::create();
	clippingNode->setAlphaThreshold(0);
	clippingNode->setContentSize(clipSizE);
	clippingNode->setPosition(VisibleRect::center() + Point(0,90));
	clippingNode->setStencil(gameName);
	clippingNode->addChild(gamename,1);
	clippingNode->addChild(spark,2);
	this->addChild(clippingNodE);

	//闪光的动作
	MoveTo* moveAction = MoveTo::create(2.0f,Point(clipSize.width,0));
	MoveTo* moveBACkAction = MoveTo::create(2.0f,Point(-clipSize.width,0));
	Sequence* seq = Sequence::create(moveAction,moveBACkAction,null);
	RepeatForever* repeatAction = RepeatForever::create(seq);
	spark->runAction(repeatAction); 

	//开始按钮
	Sprite *beginNomal = Sprite::createWithSpriteFramename("begin_normal.png");
	Sprite *beginPressed = Sprite::createWithSpriteFramename("begin_pressed.png");
	MenuItemSprite* startGameItem = MenuItemSprite::create(beginNomal,beginPressed,CC_CALLBACK_1(MenuLayer::goToMainGameScene,this));
	startGameItem->setPosition(VisibleRect::center().x,VisibleRect::center().y);
	startGameItem->setTag(10);

	//继续按钮
	Sprite *goOnNomal = Sprite::createWithSpriteFramename("go_on_normal.png");
	Sprite *goOnPressed = Sprite::createWithSpriteFramename("go_on_pressed.png");
	MenuItemSprite* goOnItem = MenuItemSprite::create(goOnNomal,goOnPressed,this));
	goOnItem->setPosition(VisibleRect::center().x,VisibleRect::center().y * 0.75f);
	goOnItem->setTag(11);

	//菜单
	Menu* menu = Menu::create(startGameItem,goOnItem,null);
	menu->setPosition(Point::ZERO);
	this->addChild(menu,1);
	
	return true;
}
/**
 * 去主游戏界面
 */
void MenuLayer::goToMainGameScene(Ref* pSender){
	Scene* scene = nullptr;
	Node* node = (Node*)pSender;
	int tag = node->getTag();
	switch (tag){
		case 10:{
			//重新开始的设置配置
			break;
		}
		case 11:{
			//继续关卡的数据配置
			break;
		}
	}
	//进入新场景,这里因为还没写所以先空着
	//if (scenE){
	//	Director::geTinstance()->replaceScene(TransitionFade::create(0.5,scenE));
	//}
}

然后别忘了在LoadScene.cpp里面加入以下代码用于场景切换


#include "MenuScene.h"


//加载完成去下一个场景
Scene* scene = MenuLayer::createScene();
Director::geTinstance()->replaceScene(scenE);

位置如图:



如此在加载图片资源之后就可以自动切换到主界面了。

大佬总结

以上是大佬教程为你收集整理的Cocos2dx 3.0 实战之—— 重写《超级马里奥》其八 主菜单界面全部内容,希望文章能够帮你解决Cocos2dx 3.0 实战之—— 重写《超级马里奥》其八 主菜单界面所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。