Cocos2d3.0RC2 官方给我们提供了很多例子,这里我们学习Label,字体包官方的工程中是有的,我这里也传了一份:http://download.csdn.net/detail/qqmcy/7245621
LabelAtlasTest
bool HelloWorld::init()
{
//
// 1. super init first
if ( !Layer::init() )
{
return false;
}
Size visibleSize = Director::getInstance()->getVisibleSize();
Point origin = Director::getInstance()->getVisibleOrigin();
auto label1 = LabelAtlas::create("LabelAtLas Test", "tuffy_bold_italic-charmap.plist");
addChild(label1, 0, 0);
label1->setPosition(Point(10, 100));
label1->setOpacity(200);
auto label2 = LabelAtlas::create("678904327423567", "tuffy_bold_italic-charmap.plist");
addChild(label2,0,1);
label2->setPosition(Point(10, 200));
label2->setOpacity(132);
_time = 0;
schedule(schedule_selector(HelloWorld::step));
return true;
}
void HelloWorld::step(float dt)
{
_time += dt;
char string[12] = {0};
sprintf(string, "%2.2f Test",_time);
auto label1 = (LabelAtlas*)getChildByTag(0);
label1->setString(string);
auto label2 = (LabelAtlas*)getChildByTag(1);
sprintf(string, "%d",(int)_time);
label2->setString(string);
}
LabelAtlasColorTest
bool HelloWorld::init()
{
//
// 1. super init first
if ( !Layer::init() )
{
return false;
}
Size visibleSize = Director::getInstance()->getVisibleSize();
Point origin = Director::getInstance()->getVisibleOrigin();
auto label1 = LabelAtlas::create("LabelAtLas Test", "tuffy_bold_italic-charmap.png",48,64,' ');
addChild(label1, 0, 0);
label1->setPosition(Point(10, 100));
label1->setOpacity(200);
auto label2 = LabelAtlas::create("678904327423567", "tuffy_bold_italic-charmap.png",48,64,' ');
addChild(label2,0,1);
label2->setPosition(Point(10, 200));
label2->setOpacity(132);
label2->setColor(Color3B::GREEN);
auto fade = FadeOut::create(1.0f);
auto fade_in = fade->reverse();
auto cb = CallFunc::create(CC_CALLBACK_0(HelloWorld::actionFinishCallback, this));
auto seq = Sequence::create(fade,fade_in,cb, NULL);
auto repeat = RepeatForever::create(seq);
label2->runAction(repeat);
schedule(schedule_selector(HelloWorld::step));
_time = 0;
return true;
}
void HelloWorld::actionFinishCallback()
{
CCLOG("Action finished");
}
void HelloWorld::step(float dt)
{
_time += dt;
char string[12] = {0};
sprintf(string, "%2.2f Test",_time);
auto label1 = (LabelAtlas*)getChildByTag(0);
label1->setString(string);
auto label2 = (LabelAtlas*)getChildByTag(1);
sprintf(string, "%d", (int)_time);
label2->setString( string );
}
LabelTTFAlignment
bool HelloWorld::init()
{
//
// 1. super init first
if ( !Layer::init() )
{
return false;
}
auto s = Director::getInstance()->getWinSize();
auto ttf0 = LabelTTF:: create("Alignment 0\nnew line", "Helvetica", 32,Size(256, 32),TextHAlignment::LEFT);
ttf0->setPosition(Point(s.width / 2, s.height / 6 * 2));
ttf0->setAnchorPoint(Point::ANCHOR_MIDDLE);
this->addChild(ttf0);
auto ttf1 = LabelTTF:: create("Alignment 0\nnew line", "Helvetica", 32,Size(256, 32),TextHAlignment::CENTER);
ttf1->setPosition(Point(s.width / 2, s.height / 6 * 3));
ttf1->setAnchorPoint(Point::ANCHOR_MIDDLE);
this->addChild(ttf1);
auto ttf2 = LabelTTF:: create("Alignment 0\nnew line", "Helvetica", 32,Size(256, 32),TextHAlignment::RIGHT);
ttf2->setPosition(Point(s.width / 2, s.height / 6 * 4));
ttf2->setAnchorPoint(Point::ANCHOR_MIDDLE);
this->addChild(ttf2);
_time = 0;
return true;
}
效果:
LabelBMFont
bool HelloWorld::init()
{
//
// 1. super init first
if ( !Layer::init() )
{
return false;
}
auto col = LayerColor::create(Color4B(128, 128, 128, 255));
addChild(col, -10);
auto label1 = LabelBMFont::create("Test", "bitmapFontTest2.fnt");
label1->setAnchorPoint(Point::ANCHOR_BOTTOM_LEFT);
addChild(label1, 0, 10);
auto fade = FadeOut::create(1.0f);
auto fade_in = fade->reverse();
auto seq = Sequence::create(fade,fade_in, NULL);
auto repeat = RepeatForever::create(seq);
label1->runAction(repeat);
auto label2 = LabelBMFont::create("Testedddddd", "bitmapFontTest2.fnt");
label2->setPosition(Point(100, 200));
label2->setAnchorPoint(Point::ANCHOR_MIDDLE);
label2->setColor(Color3B::RED);
addChild(label2, 0, 11);
auto tint = Sequence::create(TintTo::create(1, 255, 0, 0),TintTo::create(1, 0, 255, 0),TintTo::create(1, 0, 0, 255), NULL);
label2->runAction(RepeatForever::create(tint));
auto label3 = LabelBMFont::create("ghjkl", "bitmapFontTest2.fnt");
label3->setAnchorPoint(Point::ANCHOR_TOP_RIGHT);
addChild(label3, 0, 12);
label3->setPosition(Point(720, 100));
schedule(schedule_selector(HelloWorld::step));
return true;
}
void HelloWorld::step(float dt)
{
_time += dt;
//std::string string;
char string[15] = {0};
sprintf(string, "%2.2f Test j", _time);
//string.format("%2.2f Test j", _time);
auto label1 = (LabelBMFont*) getChildByTag(10);
label1->setString(string);
auto label2 = (LabelBMFont*) getChildByTag(11);
label2->setString(string);
auto label3 = (LabelBMFont*) getChildByTag(12);
label3->setString(string);
}
效果:
bool HelloWorld::init()
{
//
// 1. super init first
if ( !Layer::init() )
{
return false;
}
auto label = LabelBMFont::create("Bitmap Font Atlas", "bitmapFontTest.fnt");
addChild(label);
auto s = Director::getInstance()->getWinSize();
label->setPosition(Point(s.width / 2, s.height / 2));
label->setAnchorPoint(Point::ANCHOR_MIDDLE);
auto rotate = RotateBy::create(2, 360);
auto rot_4ever = RepeatForever::create(rotate);
auto scale = ScaleBy::create(2, 1.5f);
auto scale_back = scale->reverse();
auto scale_seq = Sequence::create(scale,scale_back, NULL);
auto scale_4ever = RepeatForever::create(scale_seq);
auto jump = JumpBy::create(0.5f, Point::ZERO, 60, 1);
auto jump_4ever = RepeatForever::create(jump);
auto fade_out = FadeOut::create(1);
auto fade_in = FadeIn::create(1);
auto seq = Sequence::create(fade_out,fade_in, NULL);
auto fade_4ever = RepeatForever::create(seq);
label->runAction(fade_4ever);
auto label2 = LabelBMFont::create("00.0", "bitmapFontTest.fnt");
addChild(label2, 0, 13);
label2->setPosition(Point(s.width / 2, 80));
label2->runAction(rot_4ever->clone());
schedule(schedule_selector(HelloWorld::step),0.1f);
return true;
}
void HelloWorld::step(float dt)
{
_time += dt;
//std::string string;
char string[15] = {0};
sprintf(string, "%2.2f Test j", _time);
//string.format("%2.2f Test j", _time);
auto label1 = (LabelBMFont*) getChildByTag(13);
label1->setString(string);
}
效果:
bitmapFontTest4.fnt
auto label = LabelBMFont::create("dfghjk", "bitmapFontTest4.fnt");
addChild(label);
auto s = Director::getInstance()->getWinSize();
label->setPosition( Point(s.width/2, s.height/2) );
label->setAnchorPoint( Point::ANCHOR_MIDDLE );
bitmapFontTest5.fnt
auto s = Director::getInstance()->getWinSize();
LabelBMFont* label = NULL;
label = LabelBMFont::create("FaFeFiFoFu", "bitmapFontTest5.fnt");
addChild(label);
label->setPosition( Point(s.width/2, s.height/2+50) );
label->setAnchorPoint( Point::ANCHOR_MIDDLE ) ;
label = LabelBMFont::create("fafefifofu", "bitmapFontTest5.fnt");
addChild(label);
label->setPosition( Point(s.width/2, s.height/2) );
label->setAnchorPoint( Point::ANCHOR_MIDDLE );
label = LabelBMFont::create("aeiou", "bitmapFontTest5.fnt");
addChild(label);
label->setPosition( Point(s.width/2, s.height/2-50) );
label->setAnchorPoint( Point::ANCHOR_MIDDLE );
auto s = Director::getInstance()->getWinSize();
LabelBMFont* label = nullptr;
label = LabelBMFont::create("Blue", "bitmapFontTest5.fnt");
label->setColor( Color3B::BLUE );
addChild(label);
label->setPosition( Point(s.width/2, s.height/4) );
label->setAnchorPoint( Point::ANCHOR_MIDDLE );
label = LabelBMFont::create("Red", "bitmapFontTest5.fnt");
addChild(label);
label->setPosition( Point(s.width/2, 2*s.height/4) );
label->setAnchorPoint( Point::ANCHOR_MIDDLE );
label->setColor( Color3B::RED );
label = LabelBMFont::create("G", "bitmapFontTest5.fnt");
addChild(label);
label->setPosition( Point(s.width/2, 3*s.height/4) );
label->setAnchorPoint( Point::ANCHOR_MIDDLE );
label->setColor( Color3B::GREEN );
label->setString("Green");
for( int i=0 ; i < 100;i ++ )
{
char str[6] = {0};
sprintf(str, "-%d-", i);
auto label = LabelBMFont::create(str, "bitmapFontTest.fnt");
addChild(label);
auto s = Director::getInstance()->getWinSize();
auto p = Point( CCRANDOM_0_1() * s.width, CCRANDOM_0_1() * s.height);
label->setPosition( p );
label->setAnchorPoint(Point::ANCHOR_MIDDLE);
}
Size s;
// Left
auto label1 = Label::createWithBMFont("bitmapFontTest3.fnt", " Multi line\nLeft");
label1->setAnchorPoint(Point(0,0));
addChild(label1, 0, 12);
s = label1->getContentSize();
CCLOG("content size: %.2fx%.2f", s.width, s.height);
// Center
auto label2 = Label::createWithBMFont( "bitmapFontTest3.fnt", "Multi line\nCenter");
addChild(label2, 0, 13);
s= label2->getContentSize();
CCLOG("content size: %.2fx%.2f", s.width, s.height);
// right
auto label3 = Label::createWithBMFont("bitmapFontTest3.fnt", "Multi line\nRight\nThree lines Three");
label3->setAnchorPoint(Point(1, 1));
addChild(label3, 0, 14);
s = label3->getContentSize();
CCLOG("content size: %.2fx%.2f", s.width, s.height);
label1->setPosition(Point(50, 50));
label2->setPosition(Point(100, 400));
label3->setPosition(Point(300, 300));
auto s = Director::getInstance()->getWinSize();
// LabelBMFont
auto label1 = Label::createWithBMFont("konqa32.fnt", "TESTING RETINA DISPLAY");
addChild(label1);
label1->setPosition(Point(s.width/2, s.height/2));
auto s = Director::getInstance()->getWinSize();
auto layer = LayerColor::create(Color4B(128, 128, 128, 255));
addChild(layer, -10);
// LabelBMFont
auto label1 = Label::createWithBMFont("futura-48.fnt", "TESTING RETINA DISPLAY");
addChild(label1);
label1->setPosition(Point(s.width/2, s.height/2));
bool HelloWorld::init()
{
//
// 1. super init first
if ( !Layer::init() )
{
return false;
}
auto listener = EventListenerTouchAllAtOnce::create();
listener->onTouchesBegan = CC_CALLBACK_2(HelloWorld::onTouchesBegan, this);
listener->onTouchesMoved = CC_CALLBACK_2(HelloWorld::onTouchesMoved, this);
listener->onTouchesEnded = CC_CALLBACK_2(HelloWorld::onTouchesEnded, this);
_eventDispatcher->addEventListenerWithSceneGraphPriority(listener, this);
auto size = Director::getInstance()->getWinSize();
this->_labelShouldRetain = Label::createWithBMFont("markerFelt.fnt", LongSentencesExample,TextHAlignment::CENTER,size.width / 1.5);
this->_labelShouldRetain->retain();
this->_arrowsBarShouldRetain = Sprite::create("arrowsBar.png");
this->_arrowsBarShouldRetain->retain();
this->_arrowsShouldRetain = Sprite::create("arrows.png");
this->_arrowsShouldRetain->retain();
MenuItemFont::setFontSize(20);
auto longSentences = MenuItemFont::create("Long Flowing Sentences", CC_CALLBACK_1(HelloWorld::stringChanged, this));
auto lineBreaks = MenuItemFont::create("Short Sentences With Intentional Line Breaks", CC_CALLBACK_1(HelloWorld::stringChanged, this));
auto mixed = MenuItemFont::create("Long Sentences Mixed With Intentional Line Breaks", CC_CALLBACK_1(HelloWorld::stringChanged, this));
auto stringMenu = Menu::create(longSentences,lineBreaks,mixed, NULL);
stringMenu->alignItemsVertically();
longSentences->setColor(Color3B::RED);
_lastSentenceItem = longSentences;
longSentences->setTag(LongSentences);
lineBreaks->setTag(LineBreaks);
mixed->setTag(Mixed);
MenuItemFont::setFontSize(30);
auto left = MenuItemFont::create("Left", CC_CALLBACK_1(HelloWorld::alignmentChanged, this));
auto center = MenuItemFont::create("Center", CC_CALLBACK_1(HelloWorld::alignmentChanged, this));
auto right = MenuItemFont::create("Right", CC_CALLBACK_1(HelloWorld::alignmentChanged, this));
auto alignmentMenu = Menu::create(left,center,right, NULL);
center->setColor(Color3B::RED);
_lastAlignmentItem = center;
left->setTag(LeftAlign);
center->setTag(CenterAlign);
right->setTag(RightAlign);
this->_labelShouldRetain->setPosition(Point(size.width / 2, size.height / 2));
this->_arrowsBarShouldRetain->setVisible(false);
float arrowsWidth = (ArrowsMax - ArrowsMin) * size.width;
this->_arrowsBarShouldRetain->setScaleX(arrowsWidth / this->_arrowsBarShouldRetain->getContentSize().width);
this->snapArrowsToEdge();
stringMenu->setPosition(Point(size.width/2, size.height - menuItemPaddingCenter));
alignmentMenu->setPosition(Point(size.width/2, menuItemPaddingCenter+15));
this->addChild(this->_labelShouldRetain);
this->addChild(this->_arrowsBarShouldRetain);
this->addChild(this->_arrowsShouldRetain);
this->addChild(stringMenu);
this->addChild(alignmentMenu);
return true;
}
void HelloWorld::stringChanged(cocos2d::Ref *sender)
{
auto item = (MenuItemFont*)sender;
item->setColor(Color3B::RED);
this->_lastAlignmentItem->setColor(Color3B::WHITE);
this->_lastAlignmentItem = item;
switch(item->getTag())
{
case LongSentences:
this->_labelShouldRetain->setString(LongSentencesExample);
break;
case LineBreaks:
this->_labelShouldRetain->setString(LineBreaksExample);
break;
case Mixed:
this->_labelShouldRetain->setString(MixedExample);
break;
default:
break;
}
this->snapArrowsToEdge();
}
void HelloWorld::snapArrowsToEdge()
{
this->_arrowsShouldRetain->setPosition(Point(this->_labelShouldRetain->getPosition().x + this->_labelShouldRetain->getContentSize().width/2,
this->_labelShouldRetain->getPosition().y));
}
void HelloWorld::onTouchesBegan(const std::vector<Touch*>& touches, cocos2d::Event *event)
{
auto touch = touches[0];
auto location = touch->getLocationInView();
if (this->_arrowsShouldRetain->getBoundingBox().containsPoint(location))
{
_drag = true;
this->_arrowsBarShouldRetain->setVisible(true);
}
}
void HelloWorld::onTouchesEnded(const std::vector<Touch*>& touches, cocos2d::Event *event)
{
_drag = false;
this->snapArrowsToEdge();
this->_arrowsBarShouldRetain->setVisible(false);
}
void HelloWorld::onTouchesMoved(const std::vector<Touch*>& touches, cocos2d::Event *event)
{
if (! _drag)
{
return;
}
auto touch = touches[0];
auto location = touch->getLocationInView();
auto winSize = Director::getInstance()->getWinSize();
this->_arrowsShouldRetain->setPosition(Point(MAX(MIN(location.x, ArrowsMax*winSize.width), ArrowsMin*winSize.width),
this->_arrowsShouldRetain->getPosition().y));
float labelWidth = fabs(this->_arrowsShouldRetain->getPosition().x - this->_labelShouldRetain->getPosition().x) * 2;
this->_labelShouldRetain->setMaxLineWidth(labelWidth);
}
void HelloWorld::alignmentChanged(cocos2d::Ref *sender)
{
auto item = static_cast<MenuItemFont*>(sender);
item->setColor(Color3B::RED);
this->_lastAlignmentItem->setColor(Color3B::WHITE);
this->_lastAlignmentItem = item;
switch(item->getTag())
{
case LeftAlign:
this->_labelShouldRetain->setAlignment(TextHAlignment::LEFT);
break;
case CenterAlign:
this->_labelShouldRetain->setAlignment(TextHAlignment::CENTER);
break;
case RightAlign:
this->_labelShouldRetain->setAlignment(TextHAlignment::RIGHT);
break;
default:
break;
}
this->snapArrowsToEdge();
}
LabelTTFLongLineWrapping
auto size = Director::getInstance()->getWinSize();
TTFConfig ttfConfig("arial.ttf",14);
auto label1 = Label::createWithTTF(ttfConfig, LongSentencesExample, TextHAlignment::CENTER,size.width);
label1->setPosition( Point(size.width/2, size.height/2) );
label1->setAnchorPoint(Point(0.5, 1.0));
addChild(label1);
auto size = Director::getInstance()->getWinSize();
// Long sentence
TTFConfig ttfConfig("wt021.ttf",18,GlyphCollection::DYNAMIC);
std::string text = FileUtils::getInstance()->getStringFromFile("commonly_used_words.txt");
auto label = Label::createWithTTF(ttfConfig,text, TextHAlignment::CENTER, size.width);
label->setPosition( Point(size.width/2, size.height/2) );
addChild(label);