初学试试看cocos2dx的TestCPP框架(8)---AtlasTestScene(LabelTest)
来源:互联网 发布:h5软件 编辑:程序博客网 时间:2024/05/16 08:22
十四、Atlas1类里面有个成语变量CCTextureAtlas* m_textureAtlas,先用CCTextureAtlas::create创建,然后用UpdateQuad更新。
m_textureAtlas = CCTextureAtlas::create(s_AtlasTest, 3); m_textureAtlas->retain(); CCSize s = CCDirector::sharedDirector()->getWinSize(); // // Notice: u,v tex coordinates are inverted // ccV3F_C4B_T2F_Quad quads[] = { { {{0,0,0},ccc4(0,0,255,255),{0.0f,1.0f},}, // bottom left {{s.width,0,0},ccc4(0,0,255,0),{1.0f,1.0f},}, // bottom right {{0,s.height,0},ccc4(0,0,255,0),{0.0f,0.0f},}, // top left {{s.width,s.height,0},{0,0,255,255},{1.0f,0.0f},}, // top right }, { {{40,40,0},ccc4(255,255,255,255),{0.0f,0.2f},}, // bottom left {{120,80,0},ccc4(255,0,0,255),{0.5f,0.2f},}, // bottom right {{40,160,0},ccc4(255,255,255,255),{0.0f,0.0f},}, // top left {{160,160,0},ccc4(0,255,0,255),{0.5f,0.0f},}, // top right }, { {{s.width/2,40,0},ccc4(255,0,0,255),{0.0f,1.0f},}, // bottom left {{s.width,40,0},ccc4(0,255,0,255),{1.0f,1.0f},}, // bottom right {{s.width/2-50,200,0},ccc4(0,0,255,255),{0.0f,0.0f},}, // top left {{s.width,100,0},ccc4(255,255,0,255),{1.0f,0.0f},}, // top right }, }; for( int i=0;i<3;i++) { m_textureAtlas->updateQuad(&quads[i], i); }
这里说说_ccV3F_C4B_T2F_Quad的结构,他由4个ccV3F_C4B_T2F组成。
//! 4 ccVertex3FTex2FColor4Btypedef struct _ccV3F_C4B_T2F_Quad{ //! top left ccV3F_C4B_T2F tl; //! bottom left ccV3F_C4B_T2F bl; //! top right ccV3F_C4B_T2F tr; //! bottom right ccV3F_C4B_T2F br;} ccV3F_C4B_T2F_Quad;
typedef struct _ccV3F_C4B_T2F{ //! vertices (3F) ccVertex3F vertices; // 12 bytes// char __padding__[4]; //! colors (4B) ccColor4B colors; // 4 bytes// char __padding2__[4]; // tex coords (2F) ccTex2F texCoords; // 8 bytes} ccV3F_C4B_T2F;
每一个_ccV3F_C4B_T2F由3部分构成,分别是顶点(通俗说就是屏幕上的位置),颜色,纹理坐标(通俗说就是读进来图片的位置,通常在0-1之间)。比如要取左上角1/4的图案,就是。注意顺序ABCD.
这个类重载了draw,然后再里面drawQuads就行了。具体纹理坐标说明看参考资料。
十五、这个类里面有5个新函数。分别是
CCLabelTTF* CCLabelTTF::create(const char *string, const char *fontName, float fontSize,
const CCSize &dimensions, CCTextAlignment hAlignment,
CCVerticalTextAlignment vAlignment)
参数分别为,设置内容, 字体名字,字体大小,块大小,水平对齐,垂直对齐。
alignItemsVerticallyWithPadding 设置间隔距离。
retain 防止自动释放内存,产生野指针。
CCString::createWithFormat("Alignment %s %s", vertical, horizontal)->getCString();这是CCString格式化字符串的函数,getCString返回const char*;
十六、这个类里面仅需注意"需要转义\"和CCLabelTTF第四个参数不够大的时候,会有部分文字没法显示。
十七、十八、分别测试在CCLabelTTF和CCLableBMFont里面使用中文,仅需注意的是文件使用utf8格式。
十九、BitmapFontMultiLineAlignment这个类里面重载了
void BitmapFontMultiLineAlignment::ccTouchesEnded(cocos2d::CCSet *pTouches, cocos2d::CCEvent *pEvent)void BitmapFontMultiLineAlignment::ccTouchesMoved(cocos2d::CCSet *pTouches, cocos2d::CCEvent *pEvent)void BitmapFontMultiLineAlignment::ccTouchesBegan(cocos2d::CCSet *pTouches, cocos2d::CCEvent *pEvent)
第一次接触到的比较常用的代码就是判断点击是否在这个标签上。
void BitmapFontMultiLineAlignment::ccTouchesBegan(cocos2d::CCSet *pTouches, cocos2d::CCEvent *pEvent){ CCTouch *touch = (CCTouch *)pTouches->anyObject(); CCPoint location = touch->getLocationInView(); if (this->m_pArrowsShouldRetain->boundingBox().containsPoint(location)) { m_drag = true; this->m_pArrowsBarShouldRetain->setVisible(true); }}
还有一个就是更改字符串宽度。
this->m_pLabelShouldRetain->setWidth(labelWidth);
二十、利用CCLabelTTF 的setColor设置红色的Label,然后用CCFadeOut、CCFadeIn配合CCSequence创建出CCFiniteTimeAction。最后利用CCRepeatForever构成永久循环。
二十一、注意一下 CCLabelBMFont *label2 = CCLabelBMFont::create("And this is Geneva", "fonts/geneva-32.fnt", kCCLabelAutomaticWidth, kCCTextAlignmentLeft, ccp(0, 128));最后一个参数是(ccp(0, 128);
二十二、CCDictionary的方法直接从文件中读取数据。createWithContentOfFile("xxx.xml");大概代码如下。
CCDictionary *strings = CCDictionary::createWithContentsOfFile("fonts/strings.xml"); const char *chinese = ((CCString*)strings->objectForKey("chinese1"))->m_sString.c_str(); const char *japanese = ((CCString*)strings->objectForKey("japanese"))->m_sString.c_str(); const char *spanish = ((CCString*)strings->objectForKey("spanish"))->m_sString.c_str();二十三、后期再设置CCLabelBMFont
CCLabelBMFont* bmFont = new CCLabelBMFont(); bmFont->init(); bmFont->autorelease(); bmFont->setFntFile("fonts/helvetica-32.fnt"); bmFont->setString("It is working!");
二十四、后期设置CCLabelTTF
CCLabelTTF* font = new CCLabelTTF(); font->init(); font->autorelease(); font->setFontName("Marker Felt"); font->setFontSize(48); font->setString("It is working!");
二十五、测试一下全部的英文字符显示。
二十六、测试对齐方式kCCTextAlignmentLeft、kCCTextAlignmentCenter、kCCTextAlignmentRight。类似
CCLabelTTF* ttf0 = CCLabelTTF::create("Alignment 0\nnew line", "Helvetica", 12, CCSizeMake(256, 32), kCCTextAlignmentLeft);
二十七、重写了draw函数。然后在里面获取label1的大小。
CCSize lableSize = label1->getContentSize();//设置矩阵的坐标CCPoint vertices[] = { ..........};ccDrawPloy(vertices, 4, true);
参考资料:
Android OpenGL es 纹理坐标设定与贴图规则:http://blog.csdn.net/cjkwin/article/details/6016224
- 初学试试看cocos2dx的TestCPP框架(8)---AtlasTestScene(LabelTest)
- 初学试试看cocos2dx的TestCPP框架(6)---AtlasTestScene(LabelTest)
- 初学试试看cocos2dx的TestCPP框架(7)---AtlasTestScene(LabelTest)
- 初学试试看cocos2dx的TestCPP框架(1)
- 初学试试看cocos2dx的TestCPP框架(2) --CCApllication
- 初学试试看cocos2dx的TestCPP框架(3)--scene
- 初学试试看cocos2dx的TestCPP框架(4)---CCSkewTo、CCSkewBy
- 初学试试看cocos2dx的TestCPP框架(5)---sceneTest
- 初学试试看cocos2dx的TestCPP框架(9)---TextInputTestScene
- 初学试试看cocos2dx的TestCPP框架(10)---TouchesTest
- 初学试试看cocos2dx的TestCPP框架(11)---MenuTestScene
- 初学试试看cocos2dx的TestCPP框架(2) --CCApllication
- [cocos2dx]TestCpp框架源码分析
- Android手机上跑起cocos2dx TestCpp
- Cocos2dx中的TestCPP运行Box2dTest
- 生成cocos2dx 2.2.6 TestCpp例子 android工程遇到的问题(2)
- 生成cocos2dx 2.2.6 TestCpp例子 android工程遇到的问题(1)
- 生成cocos2dx 2.2.6 TestCpp例子 android工程遇到的问题(3)
- RHEL6.4 安装Broadcom BCM4313无线网卡[修正版]
- Android学习笔记----18_在SQLite中使用事务
- SQLDBDIR目录详解
- 玩转Google开源C++单元测试框架Google Test系列(gtest)(总)
- 2013年03月12日 工作总结
- 初学试试看cocos2dx的TestCPP框架(8)---AtlasTestScene(LabelTest)
- javascript中的submit与onsubmit事件
- IOS autorelease详解
- Memcached提升web数据操作读写性能
- Music
- Microsoft Access、MySQL 以及 SQL Server 所使用的数据类型和范围。
- vmware设置centOS上网
- android学习之获取联系人原理(姓名和电话)详解
- 把bugfree改成我想要的