cocos2d-xなので、CCLabelBMFontを使ってるのですが、widthに合わせて文字がちっちゃくなったりしないので、
文字数オーバーすると画面からはみ出たりでめんどくさいです。
というわけで、widthを制限して超えると縮むラベルを作りました。
見づらいけど、全文記載します。
ScaleLabelBMFont.h
#ifndef __ScaleLabelBMFont__NODE_H__ #define __ScaleLabelBMFont__NODE_H__ #include "cocos2d.h" USING_NS_CC; class ScaleLabelBMFont : public CCLabelBMFont { public: static ScaleLabelBMFont* create(const char *str, const char *fntFile, float limitWidth, float currentScale); virtual bool init(const char *str, const char *fntFile, float limitWidth, float currentScale); virtual void updateLabel(); CC_SYNTHESIZE(float, _limitWidth, LimitWidth); CC_SYNTHESIZE(float, _currentScale, CurrentScale); }; #endif // __ScaleLabelBMFont__NODE_H__
ScaleLabelBMFont.cpp
#include "ScaleLabelBMFont.h" ScaleLabelBMFont* ScaleLabelBMFont::create(const char *str, const char *fntFile, float limitWidth, float currentScale) { ScaleLabelBMFont * pRet = new ScaleLabelBMFont(); if (pRet && pRet->init(str, fntFile, limitWidth, currentScale)) { pRet->autorelease(); } else { CC_SAFE_DELETE(pRet); } return pRet; } bool ScaleLabelBMFont::init(const char *str, const char *fntFile, float limitWidth, float currentScale) { if ( !CCLabelBMFont::initWithString(str, fntFile) ) { return false; } _limitWidth = limitWidth; _currentScale = currentScale; setScale(_currentScale); return true; } void ScaleLabelBMFont::updateLabel() { CCLabelBMFont::updateLabel(); if ((getContentSize().width * _currentScale) > _limitWidth) { float scaleX = _limitWidth / getContentSize().width; if (getScaleX() != scaleX) { setScaleX(scaleX); } } }