enchant.jsの enchant.ui.MutableText を拡張してみました。
・フォントテクスチャをコンストラクタで指定できるように。(コンストラクタで座標指定は削除)
・スケール(scaleX scaleY)に対応。
参考までにペタリ。
var MyMutableText = enchant.Class.create(enchant.Sprite, { /*! コンストラクタ @param fontTexture テクスチャ @param fontTextureUnitSize テクスチャの1文字のサイズ */ initialize: function(fontTexture, fontTextureUnitSize) { enchant.Sprite.call(this, 0, 0); this.fontSize = fontTextureUnitSize ? fontTextureUnitSize : 16; // テクスチャの1文字サイズ this.widthItemNum = 16; // テクスチャの1列に何文字格納されてるか this.x = 0; this.y = 0; this.m_fontTexture = fontTexture; this._imageAge = Number.MAX_VALUE; this.text = ''; if (arguments[2]) { this.row = Math.floor(arguments[2] / this.fontSize); } }, /** * ラベルの内容を書き換える関数 * @param txt */ setText: function(txt) { var i, x, y, wNum, charCode, charPos; var fontDstWidth = this.fontSize * this.scaleX; var fontDstHeight = this.fontSize * this.scaleY; this._text = txt; var newWidth; if (!this.returnLength) { this.width = Math.min(fontDstWidth * this._text.length, enchant.Game.instance.width); } else { this.width = Math.min(this.returnLength * fontDstWidth, enchant.Game.instance.width); } this.height = fontDstHeight * (Math.ceil(this._text.length / this.row) || 1); // if image is to small or was to big for a long time create new image if(!this.image || this.width > this.image.width || this.height > this.image.height || this._imageAge > 300) { this.image = new enchant.Surface(this.width, this.height); this._imageAge = 0; } else if(this.width < this.image.width || this.height < this.image.height) { this._imageAge++; } else { this._imageAge = 0; } this.image.context.clearRect(0, 0, this.width, this.height); for (i = 0; i < txt.length; i++) { charCode = txt.charCodeAt(i); if (charCode >= 32 && charCode <= 127) { charPos = charCode - 32; } else { charPos = 0; } x = charPos % this.widthItemNum; y = (charPos / this.widthItemNum) | 0; this.image.draw( this.m_fontTexture, // テクスチャ x * this.fontSize, y * this.fontSize, // 入力xy this.fontSize, this.fontSize, // 入力wh (i % this.row) * fontDstWidth, ((i / this.row) | 0) * fontDstHeight, // 出力xy fontDstWidth, fontDstHeight ); // 出力wh } }, /** * ラベルの内容 * @type {String} */ text: { get: function() { return this._text; }, set: function(txt) { this.setText(txt); } }, /** * @type {Number} */ row: { get: function() { return this.returnLength || this.width / this.fontSize; }, set: function(row) { this.returnLength = row; this.text = this.text; } } });