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);
}
}
}