本文主要是介绍libgdx中文输出、bitmapFont输出中文、bitmapFont输出文字、输出字体文字,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
libgdx中文输出、bitmapFont输出中文、bitmapFont输出文字、输出字体文字
libgdx中文输出、bitmapFont输出中文、bitmapFont输出文字、输出字体文字。jdk17+
2023年11月1日14:08:44最新、
转自:https://lingkang.top/archives/libgdx-zhong-wen-shu-chu
Maven依赖
<properties><maven.compiler.source>17</maven.compiler.source><maven.compiler.target>17</maven.compiler.target><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><gdx.version>1.12.0</gdx.version></properties><dependencies><!-- https://mvnrepository.com/artifact/com.badlogicgames.gdx/gdx --><dependency><groupId>com.badlogicgames.gdx</groupId><artifactId>gdx</artifactId><version>${gdx.version}</version></dependency><!-- https://mvnrepository.com/artifact/com.badlogicgames.gdx/gdx-backend-lwjgl3 --><dependency><groupId>com.badlogicgames.gdx</groupId><artifactId>gdx-backend-lwjgl3</artifactId><version>${gdx.version}</version></dependency><!-- https://mvnrepository.com/artifact/com.badlogicgames.gdx/gdx-platform --><dependency><groupId>com.badlogicgames.gdx</groupId><artifactId>gdx-platform</artifactId><version>${gdx.version}</version><classifier>natives-desktop</classifier></dependency><!-- https://mvnrepository.com/artifact/com.badlogicgames.gdx/gdx-freetype --><dependency><groupId>com.badlogicgames.gdx</groupId><artifactId>gdx-freetype</artifactId><version>${gdx.version}</version></dependency><!-- https://mvnrepository.com/artifact/com.badlogicgames.gdx/gdx-freetype-platform --><dependency><groupId>com.badlogicgames.gdx</groupId><artifactId>gdx-freetype-platform</artifactId><version>${gdx.version}</version><classifier>natives-desktop</classifier></dependency><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.13.2</version></dependency><!-- https://mvnrepository.com/artifact/org.slf4j/slf4j-api --><dependency><groupId>org.slf4j</groupId><artifactId>slf4j-api</artifactId><version>2.0.9</version></dependency><!-- https://mvnrepository.com/artifact/org.slf4j/slf4j-simple --><dependency><groupId>org.slf4j</groupId><artifactId>slf4j-simple</artifactId><version>2.0.9</version></dependency><!-- https://mvnrepository.com/artifact/org.projectlombok/lombok --><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>1.18.30</version><scope>provided</scope></dependency></dependencies><build><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><version>3.8.1</version><configuration><source>17</source><target>17</target><!-- 编译后保持方法形参名称不变 --><!--<compilerArgs><arg>-parameters</arg></compilerArgs>--></configuration></plugin></plugins></build><repositories><repository><id>tencent</id><name>tencent</name><layout>default</layout><url>http://mirrors.cloud.tencent.com/nexus/repository/maven-public/</url><snapshots><enabled>false</enabled></snapshots><releases><enabled>true</enabled></releases></repository><repository><id>nexus</id><name>Nexus</name><layout>default</layout><url>https://s01.oss.sonatype.org/content/repositories/snapshots</url><snapshots><enabled>true</enabled></snapshots><releases><enabled>true</enabled></releases></repository><repository><id>aliyunmaven</id><url>https://maven.aliyun.com/repository/public</url><releases><enabled>true</enabled></releases><snapshots><enabled>false</enabled></snapshots></repository></repositories>
代码调用
protected BitmapFont bitmapFont; //加载 仿宋字体FreeTypeFontGenerator generator = new FreeTypeFontGenerator(new FileHandle("C:\\Windows\\Fonts\\simfang.ttf"));bitmapFont = new SmartBitmapFont(generator,50);// 绘制bitmapFont.draw(batch, "欢迎", 0, 300);// 左下角起点,向上300个高度
通过重写 BitmapFont
进行读取字体输出
package top.lingkang.yzcy.utils;import com.badlogic.gdx.graphics.Color;
import com.badlogic.gdx.graphics.Pixmap;
import com.badlogic.gdx.graphics.Pixmap.Format;
import com.badlogic.gdx.graphics.Texture;
import com.badlogic.gdx.graphics.g2d.BitmapFont;
import com.badlogic.gdx.graphics.g2d.TextureRegion;
import com.badlogic.gdx.graphics.g2d.freetype.FreeType;
import com.badlogic.gdx.graphics.g2d.freetype.FreeType.Face;
import com.badlogic.gdx.graphics.g2d.freetype.FreeType.SizeMetrics;
import com.badlogic.gdx.graphics.g2d.freetype.FreeTypeFontGenerator;
import com.badlogic.gdx.graphics.g2d.freetype.FreeTypeFontGenerator.FreeTypeBitmapFontData;
import com.badlogic.gdx.graphics.g2d.freetype.FreeTypeFontGenerator.FreeTypeFontParameter;
import com.badlogic.gdx.graphics.g2d.freetype.FreeTypeFontGenerator.GlyphAndBitmap;
import com.badlogic.gdx.utils.GdxRuntimeException;import java.lang.reflect.Field;/*** 对BitmapFont进行改写,让文字获取直接从字体中获取* 调用方式:* <pre>* protected BitmapFont bitmapFont; <br/>* //加载 仿宋字体* FreeTypeFontGenerator generator = new FreeTypeFontGenerator(new FileHandle("C:\\Windows\\Fonts\\simfang.ttf"));* <br/> <br/>* bitmapFont = new SmartBitmapFont(generator,50);** <br/>* bitmapFont.draw(batch, "欢迎", 0, 300);// 左下角起点,向上300个高度* </pre>*/
public class SmartBitmapFont extends BitmapFont {// 不应该在此对此进行 dispose ,让上层进行 disposeprivate FreeTypeFontGenerator generator;private FreeTypeBitmapFontData data;private FreeTypeFontParameter parameter;public SmartBitmapFont(FreeTypeFontGenerator generator, int fontSize) {if (generator == null)throw new GdxRuntimeException("lazyBitmapFont global generator must be not null to use this constructor.");this.generator = generator;FreeTypeFontParameter param = new FreeTypeFontParameter();param.size = fontSize;this.parameter = param;this.data = new LazyBitmapFontData(generator, fontSize, this);try {Field f = getClass().getSuperclass().getDeclaredField("data");f.setAccessible(true);f.set(this, data);} catch (Exception e) {e.printStackTrace();}genrateData();}private void genrateData() {Face face = null;try {Field field = generator.getClass().getDeclaredField("face");field.setAccessible(true);face = (Face) field.get(generator);} catch (Exception e) {e.printStackTrace();return;}// set general font dataSizeMetrics fontMetrics = face.getSize().getMetrics();// Set space glyph.Glyph spaceGlyph = data.getGlyph(' ');if (spaceGlyph == null) {spaceGlyph = new Glyph();spaceGlyph.xadvance = (int) data.scaleX;//spaceWidthspaceGlyph.id = (int) ' ';data.setGlyph(' ', spaceGlyph);}if (spaceGlyph.width == 0)spaceGlyph.width = (int) (spaceGlyph.xadvance + data.padRight);// set general font datadata.flipped = parameter.flip;data.ascent = FreeType.toInt(fontMetrics.getAscender());data.descent = FreeType.toInt(fontMetrics.getDescender());data.lineHeight = FreeType.toInt(fontMetrics.getHeight());// determine x-heightfor (char xChar : data.xChars) {if (!face.loadChar(xChar, FreeType.FT_LOAD_DEFAULT))continue;data.xHeight = FreeType.toInt(face.getGlyph().getMetrics().getHeight());break;}if (data.xHeight == 0)throw new GdxRuntimeException("No x-height character found in font");for (char capChar : data.capChars) {if (!face.loadChar(capChar, FreeType.FT_LOAD_DEFAULT))continue;data.capHeight = FreeType.toInt(face.getGlyph().getMetrics().getHeight());break;}// determine cap heightif (data.capHeight == 1)throw new GdxRuntimeException("No cap character found in font");data.ascent = data.ascent - data.capHeight;data.down = -data.lineHeight;if (parameter.flip) {data.ascent = -data.ascent;data.down = -data.down;}}@Overridepublic void dispose() {setOwnsTexture(true);super.dispose();data.dispose();}class LazyBitmapFontData extends FreeTypeBitmapFontData {private FreeTypeFontGenerator generator;private int fontSize;private SmartBitmapFont font;private int page = 1;public LazyBitmapFontData(FreeTypeFontGenerator generator, int fontSize, SmartBitmapFont lbf) {this.generator = generator;this.fontSize = fontSize;this.font = lbf;}public Glyph getGlyph(char ch) {Glyph glyph = super.getGlyph(ch);if (glyph == null)glyph = generateGlyph(ch);return glyph;}protected Glyph generateGlyph(char ch) {GlyphAndBitmap gab = generator.generateGlyphAndBitmap(ch, fontSize, false);if (gab == null || gab.bitmap == null)// 未找到文字字符: chreturn null;Pixmap map = gab.bitmap.getPixmap(Format.RGBA8888, Color.WHITE, 9);TextureRegion rg = new TextureRegion(new Texture(map));map.dispose();font.getRegions().add(rg);gab.glyph.page = page++;super.setGlyph(ch, gab.glyph);setGlyphRegion(gab.glyph, rg);return gab.glyph;}}
}
效果
这篇关于libgdx中文输出、bitmapFont输出中文、bitmapFont输出文字、输出字体文字的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!