libgdx写游戏需要不同大小的字体。 每个BitmapFont需要对应的TextrueRegion,不能一个TextureRegion纹理创建多个不同大小的BitmapFont,否则容易乱。
package dy.android.cike.util;
import com.badlogic.gdx.files.FileHandle;
import com.badlogic.gdx.graphics.Color;
import com.badlogic.gdx.graphics.Texture;
import com.badlogic.gdx.graphics.g2d.BitmapFont;
import com.badlogic.gdx.graphics.g2d.TextureRegion;
import df.util.Util;
import df.util.engine.gdx.GdxFile;
import java.util.HashMap;
import java.util.Map;
/**
* Created by andrew on 14-6-23.
*/
public class FontUtil {
private static final String TAG = Util.toTAG(FontUtil.class);
public static final int CHAR_HEIGHT_16 = 16;
public static final int CHAR_HEIGHT_20 = 20;
public static final int CHAR_HEIGHT_26 = 26;
public static final int CHAR_HEIGHT_30 = 30;
public static final int CHAR_HEIGHT_34 = 34;
private String[] fontArray = new String[]{
"font/minijianyihei1.png",
"font/minijianyihei2.png",
"font/minijianyihei3.png",
"font/minijianyihei4.png",
"font/minijianyihei5.png",
"font/minijianyihei6.png",
"font/minijianyihei7.png",
"font/minijianyihei8.png",
};
private Map<Integer, BitmapFont> fontMap = new HashMap<Integer, BitmapFont>();
private static FontUtil instance;
private FontUtil() {
}
private BitmapFont font(int characterHeight, Color color) {
if (!fontMap.containsKey(characterHeight)) {
//todo: wulong 每个型号字体必须重新创建对应的纹理,缩放会出问题。
BitmapFont.BitmapFontData data = new BitmapFont.BitmapFontData(GdxFile.internal("font/minijianyihei.fnt"), false);
TextureRegion[] regionArray = new TextureRegion[fontArray.length];
for (int i = 0; i < fontArray.length; i++) {
FileHandle picHandle = GdxFile.internal(fontArray[i]);
regionArray[i] = new TextureRegion(new Texture(picHandle));
}
data.imagePaths = fontArray;
BitmapFont font = new BitmapFont(data, regionArray, true);
font.setScale((float)characterHeight / font.getXHeight());
fontMap.put(characterHeight, font);
}
fontMap.get(characterHeight).setColor(color);
return fontMap.get(characterHeight);
}
public static BitmapFont getFont(int characterHeight,Color color){
if (null == instance) {
instance = new FontUtil();
}
return instance.font(characterHeight, color);
}
}
使用方法:
BitmapFont font = FontUtil.getFont(FontUtil.CHAR_HEIGHT_16, Color.BLACK);