cocos2d-x 实现图片加文字菜单

本文介绍了如何在cocos2d-x中创建带有文字和图片背景的菜单项,以满足多语言支持的需求。作者分享了自己封装的方法,尽管简单且未考虑字体宽度和响应事件,但为读者提供了一个初步的实现思路。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近开始了ios的新项目, 一些关于cocos2d-x的学习, 这里记录点个人的理解和体会, 希望对大家有用。

  cocos2d-x中的菜单项想必大家应该用的都比较熟了, 最近项目中刚好需要用到多语言支持和字库问题, 所以有这样的一个需求要做文字与图片背景的叠加,作为一个CCMenuItem响应事件。 类似这样的按钮

找了下cocos2d-x没找到合适的(如果有多谢大家指出来), 这里自己封装了个。

class CCMenuItemImageFont : public CCMenuItemSprite
{
public:
    CCMenuItemImageFont(){};
    ~CCMenuItemImageFont(){};
    
    static CCMenuItemImageFont* itemWithTarget(const char* text, const char* fontFile, const char * menubg, CCObject* target, SEL_MenuHandler selector);
};

/** 通过BMFont和CCSprite创建菜单项
// text : 显示文本内容
// fontFile : BMFont 字库文件路径
// menubg : 菜单背景图片(暂未做背景拉伸,大家自由发挥)
// target,selector 回调函数
*/
CCMenuItemImageFont* CCMenuItemImageFont::itemWithTarget(const char* text, const char* fontFile, const char * menubg, CCObject* target, SEL_MenuHandler selector)
{
    //为了代码可读性, 未做安全检测
    CCMenuItemImageFont *imagFont = new CCMenuItemImageFont();
    CCSprite *sprite = CCSprite::spriteWithSpriteFrameName(menubg);
    CCLabelBMFont *font = CCLabelBMFont::labelWithString(text, fontFile);
    
    CCSize size = sprite->getContentSize();

    //初始化一块texture区域, 大小为背景图片尺寸, 这里可以考虑缩放适应字的宽度。
    CCRenderTexture *texture = CCRenderTexture::renderTextureWithWidthAndHeight(size.width  , size.height,kCCTexture2DPixelFormat_RGBA8888);
    
    //这里不清楚的可以详细看下CCRenderTexture.h里面的定义
    texture->begin();
    
    //must setposition before call visit
    sprite->setPosition(ccp(size.width/2 , size.height/2));
    sprite->visit();
    
    font->setPosition(ccp(size.width/2 , size.height/2));
    font->visit();
    texture->end();
    
    //这里可能有点争议, CCRenderTexture本身会addchild()当前sprite, 所以要先移除掉, 然后再add菜单。
    texture->removeChild(texture->getSprite(), false);
    imagFont->initFromNormalSprite(texture->getSprite(), NULL, NULL, target, selector);
    
    return imagFont;
}

这里只是粗糙的实现了下 ,没有考虑字体的宽度,响应事件等等。 第一次发正式博文, 如果不妥谢谢指正。
不知道咋整的, 代码竟然这颜色~~~


评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值