cocos2d-x 创建文字按钮

2015年01月30日 11:12 0 点赞 0 评论 更新于 2017-05-08 18:30

在 cocos2d-x 中,如何创建文字按钮呢?下面我们通过一段具体的程序来详细说明实现过程。

代码实现

#include "HelloWorldScene.h"
#include "SimpleAudioEngine.h"

using namespace cocos2d;
using namespace CocosDenshion;

CCScene* HelloWorld::scene()
{
// 'scene' 是一个自动释放对象
CCScene *scene = CCScene::create();
// 'layer' 是一个自动释放对象
HelloWorld *layer = HelloWorld::create();
// 将图层作为子对象添加到场景中
scene->addChild(layer);
// 返回场景
return scene;
}

// 在 "init" 方法中初始化实例
bool HelloWorld::init()
{
// 1. 首先调用父类的初始化方法
if (!CCLayer::init())
{
return false;
}

// 2. 添加一个带有 "X" 图像的菜单项,点击可退出程序
// 你可以对其进行修改
// 添加一个 "关闭" 图标以退出程序,它是一个自动释放对象
CCMenuItemImage *pCloseItem = CCMenuItemImage::create(
"CloseNormal.png",
"CloseSelected.png",
this,
menu_selector(HelloWorld::menuCloseCallback)
);
pCloseItem->setPosition(ccp(CCDirector::sharedDirector()->getWinSize().width - 20, 20));

// 创建菜单,它是一个自动释放对象
CCMenu* pMenu = CCMenu::create(pCloseItem, NULL);
pMenu->setPosition(CCPointZero);
this->addChild(pMenu, 1);

// 3. 在下面添加你的代码...
// 添加一个显示 "Hello World" 的标签
// 创建并初始化一个标签
CCLabelTTF* pLabel = CCLabelTTF::create("Hello World", "Thonburi", 34);
// 获取窗口大小
CCSize size = CCDirector::sharedDirector()->getWinSize();
// 将标签定位到屏幕中心
pLabel->setPosition(ccp(size.width / 2, size.height - 20));
// 将标签作为子对象添加到当前图层
this->addChild(pLabel, 1);

// 添加 "HelloWorld" 启动画面
CCSprite* pSprite = CCSprite::create("HelloWorld.png");
// 将精灵定位到屏幕中心
pSprite->setPosition(ccp(size.width / 2, size.height / 2));
// 将精灵作为子对象添加到当前图层
this->addChild(pSprite, 0);

// 设置字号
CCMenuItemFont::setFontSize(32);
// 设置字体
CCMenuItemFont::setFontName("Marker Felt");

// 添加文字按钮,点击实现缩放
CCMenuItemFont *font1 = CCMenuItemFont::create("hah", this, menu_selector(HelloWorld::menuCloseCallback1));
// 设置颜色
font1->setColor(ccc3(255, 0, 0));

// 添加选择按钮,点击实现 on 与 off 之间切换
CCMenuItemToggle *font2 = CCMenuItemToggle::createWithTarget(
this,
menu_selector(HelloWorld::menuCloseCallback2),
CCMenuItemFont::create("on"),
CCMenuItemFont::create("off"),
NULL
);
font2->setColor(ccc3(0, 255, 0));
// 设置默认显示,从零算起(此为 off)
font2->setSelectedIndex(1);

// 此步很关键,否则只是菜单项,但不能点击
CCMenu *newmenu = CCMenu::create(font1, font2, NULL);
newmenu->setPosition(ccp(size.width / 2, size.height / 2));
// 设置为竖排排列
newmenu->alignItemsVertically();
this->addChild(newmenu, 2);

num = 1;
return true;
}

void HelloWorld::menuCloseCallback1(CCObject *pSender)
{
CCMenuItemFont *font = (CCMenuItemFont*)pSender;
// hello 类的私有成员
num++;
num %= 2;
if (num == 1)
{
// 设置缩放
font->setScale(2);
}
else
{
font->setScale(0.5);
}
}

void HelloWorld::menuCloseCallback2(CCObject *pSender)
{
// 可在此处添加处理逻辑
}

void HelloWorld::menuCloseCallback(CCObject* pSender)
{
CCDirector::sharedDirector()->end();
#if (CC_TARGET_PLATFORM == CC_PLATFORM_IOS)
exit(0);
#endif
}

代码解释

1. 场景和图层的创建

scene 方法中,我们创建了一个场景 CCScene 和一个图层 HelloWorld,并将图层添加到场景中。

2. 初始化方法 init

  • 父类初始化:首先调用 CCLayer::init() 方法进行父类的初始化,如果初始化失败则返回 false
  • 关闭按钮:创建一个带有图片的关闭按钮 CCMenuItemImage,并将其添加到菜单中。
  • 标签和精灵:添加一个显示 "Hello World" 的标签 CCLabelTTF 和一个启动画面精灵 CCSprite
  • 文字按钮
  • CCMenuItemFont:创建一个文字按钮,点击后实现缩放效果。
  • CCMenuItemToggle:创建一个选择按钮,点击后在 "on" 和 "off" 之间切换。
  • 菜单设置:将文字按钮和选择按钮添加到菜单 CCMenu 中,并设置菜单的位置和排列方式。

3. 回调方法

  • menuCloseCallback1:处理文字按钮的点击事件,实现缩放效果。
  • menuCloseCallback2:处理选择按钮的点击事件,可在此处添加具体的处理逻辑。
  • menuCloseCallback:处理关闭按钮的点击事件,退出程序。

通过以上步骤,我们就可以在 cocos2d-x 中创建文字按钮了。运行代码后,你将看到相应的按钮效果。

作者信息

feifeila

feifeila

共发布了 570 篇文章