使用 libgdx 在运行时用文本生成纹理

2023-12-23

我正在开发一个电话文字游戏。昨天,我决定使用 libgdx 切换到 OpenGL,以尝试提高图形性能和电池使用率 + 瞄准更多平台。

字母图块在 2D 画布上绘图的方式是每个字母图块都会为自己创建一个位图。我会:

  1. 从背景位图创建一个新的可变位图。
  2. 在新位图上绘制字母。
  3. 应用其他图块特定效果。
  4. 为每一帧绘制新的位图

使用 libgdx 实现我想要的效果的最佳方法是什么?

  1. 我应该采取类似的方法吗?如果是这样,怎么办?我尝试使用像素图,但不知道如何绘制字体。
  2. 我应该创建一个包含 A-Z 所需所有图块的 spritesheet 并直接使用它吗?当我调整瓷砖背景的设计时有点乏味。
  3. 我应该做一些完全不同的事情吗?

Answer

显然,最终的代码不应每次都从文件中加载,因为这会对性能造成巨大影响,但这里为任何试图实现相同结果的其他人提供了工作示例代码。

    // load the background into a pixmap
    Pixmap tile = new Pixmap(Gdx.files.getFileHandle(
            "someFile.png", FileType.Internal));

    // load the font
    FileHandle handle = Gdx.files.getFileHandle("someFont.fnt",
            FileType.Internal);
    BitmapFont font = new BitmapFont(handle);

    // get the glypth info
    BitmapFontData data = font.getData();
    Pixmap fontPixmap = new Pixmap(Gdx.files.internal(data.imagePaths[0]));
    Glyph glyph = data.getGlyph(getLetterToDraw().charAt(0));

    // draw the character onto our base pixmap
    tile.drawPixmap(fontPixmap, (TILE_WIDTH - glyph.width) / 2, (TILE_HEIGHT - glyph.height) / 2,
            glyph.srcX, glyph.srcY, glyph.width, glyph.height);

    // save this as a new texture
    texture = new Texture(tile);

引用:您可以创建一个BitmapFontData实例及使用BitmapFontData.getImagePath()加载一个Pixmap含有glyphs。然后您可以使用BitmapFontData.getGlyph获取特定字形的位置Pixmap,您可以将其与Pixmap.drawPixmap()做你想做的事。来源:libgdx 问题 691:将 BitmapFont 绘制到 Pixmap/Texture http://code.google.com/p/libgdx/issues/detail?id=691


你得到的路径是BitmapFontData并使用文件句柄创建一个新的 Pixmap 到路径:

Pixmap(文件句柄文件)

从给定文件创建一个新的 Pixmap 实例。

Source: 像素图API http://libgdx.badlogicgames.com/nightlies/docs/api/com/badlogic/gdx/graphics/Pixmap.html

Use Gdx.files.internal(pathfromBitmapFontData)作为文件句柄,你就得到了包含所有 Glyps 的像素图。

Pixmap p = new Pixmap(Gdx.files.internal(myBitmapFontData.getImagePath()))

试试是不是内部的!可能不是内部文件我不知道


Pixmap p = new Pixmap(myFont.getData().getFontFile());

这也应该有效

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 libgdx 在运行时用文本生成纹理 的相关文章

  • Java new Date() 打印

    刚刚学习 Java 我知道这可能听起来很愚蠢 但我不得不问 System out print new Date 我知道参数中的任何内容都会转换为字符串 最终值是 new Date 返回对 Date 对象的引用 那么它是如何打印这个的呢 Mo
  • 如何使用 Java 和 Selenium WebDriver 在 C 目录中创建文件夹并需要将屏幕截图保存在该目录中?

    目前正在与硒网络驱动程序和代码Java 我有一种情况 我需要在 C 目录中创建一个文件夹 并在该文件夹中创建我通过 selenium Web 驱动程序代码拍摄的屏幕截图 它需要存储在带有时间戳的文件夹中 如果我每天按计划运行脚本 所有屏幕截
  • Java - 将节点添加到列表的末尾?

    这是我所拥有的 public class Node Object data Node next Node Object data Node next this data data this next next public Object g
  • 在 java 类和 android 活动之间传输时音频不清晰

    我有一个android活动 它连接到一个java类并以套接字的形式向它发送数据包 该类接收声音数据包并将它们扔到 PC 扬声器 该代码运行良好 但在 PC 扬声器中播放声音时会出现持续的抖动 中断 安卓活动 public class Sen
  • 如何找到给定字符串的最长重复子串

    我是java新手 我被分配寻找字符串的最长子字符串 我在网上研究 似乎解决这个问题的好方法是实现后缀树 请告诉我如何做到这一点或者您是否有任何其他解决方案 请记住 这应该是在 Java 知识水平较低的情况下完成的 提前致谢 附 测试仪字符串
  • Final字段的线程安全

    假设我有一个 JavaBeanUser这是从另一个线程更新的 如下所示 public class A private final User user public A User user this user user public void
  • JAXb、Hibernate 和 beans

    目前我正在开发一个使用 Spring Web 服务 hibernate 和 JAXb 的项目 1 我已经使用IDE hibernate代码生成 生成了hibernate bean 2 另外 我已经使用maven编译器生成了jaxb bean
  • Android MediaExtractor seek() 对 MP3 音频文件的准确性

    我在使用 Android 时无法在eek 上获得合理的准确度MediaExtractor 对于某些文件 例如this one http www archive org download emma solo librivox emma 01
  • 多个 Maven 配置文件激活多个 Spring 配置文件

    我想在 Maven 中构建一个环境 在其中我想根据哪些 Maven 配置文件处于活动状态来累积激活多个 spring 配置文件 目前我的 pom xml 的相关部分如下所示
  • 加速代码 - 3D 数组

    我正在尝试提高我编写的一些代码的速度 我想知道从 3d 整数数组访问数据的效率如何 我有一个数组 int cube new int 10 10 10 我用价值观填充其中 然后我访问这些值数千次 我想知道 由于理论上所有 3d 数组都存储在内
  • 控制Android的前置LED灯

    我试图在用户按下某个按钮时在前面的 LED 上实现 1 秒红色闪烁 但我很难找到有关如何访问和使用前置 LED 的文档 教程甚至代码示例 我的意思是位于 自拍 相机和触摸屏附近的 LED 我已经看到了使用手电筒和相机类 已弃用 的示例 但我
  • 反射找不到对象子类型

    我试图通过使用反射来获取包中的所有类 当我使用具体类的代码 本例中为 A 时 它可以工作并打印子类信息 B 扩展 A 因此它打印 B 信息 但是当我将它与对象类一起使用时 它不起作用 我该如何修复它 这段代码的工作原理 Reflection
  • JavaMail 只获取新邮件

    我想知道是否有一种方法可以在javamail中只获取新消息 例如 在初始加载时 获取收件箱中的所有消息并存储它们 然后 每当应用程序再次加载时 仅获取新消息 而不是再次重新加载它们 javamail 可以做到这一点吗 它是如何工作的 一些背
  • Spring Data JPA 应用排序、分页以及 where 子句

    我目前正在使用 Spring JPA 并利用此处所述的排序和分页 如何通过Spring data JPA通过排序和可分页查询数据 https stackoverflow com questions 10527124 how to query
  • 从 127.0.0.1 到 2130706433,然后再返回

    使用标准 Java 库 从 IPV4 地址的点分字符串表示形式获取的最快方法是什么 127 0 0 1 到等效的整数表示 2130706433 相应地 反转所述操作的最快方法是什么 从整数开始2130706433到字符串表示形式 127 0
  • Google App Engine 如何预编译 Java?

    App Engine 对应用程序的 Java 字节码使用 预编译 过程 以增强应用程序在 Java 运行时环境中的性能 预编译代码的功能与原始字节码相同 有没有详细的信息这是做什么的 我在一个中找到了这个谷歌群组消息 http groups
  • Java列表的线程安全

    我有一个列表 它将在线程安全上下文或非线程安全上下文中使用 究竟会是哪一个 无法提前确定 在这种特殊情况下 每当列表进入非线程安全上下文时 我都会使用它来包装它 Collections synchronizedList 但如果不进入非线程安
  • 静态变量的线程安全

    class ABC implements Runnable private static int a private static int b public void run 我有一个如上所述的 Java 类 我有这个类的多个线程 在里面r
  • 在 Maven 依赖项中指定 jar 和 test-jar 类型

    我有一个名为 commons 的项目 其中包含运行时和测试的常见内容 在主项目中 我添加了公共资源的依赖项
  • JGit 检查分支是否已签出

    我正在使用 JGit 开发一个项目 我设法删除了一个分支 但我还想检查该分支是否已签出 我发现了一个变量CheckoutCommand但它是私有的 private boolean isCheckoutIndex return startCo

随机推荐

  • jQuery 选择器与 React 可以吗?

    我知道混合 jQuery 和 ReactJS 是不可取的 因为 ReactJS 不知道 jQuery 对 DOM 所做的任何修改 但是 如果您仅使用 jQuery 轻松便捷地查询 DOM 和查找节点 而将所有 DOM 编辑工作留给 Reac
  • 关于Python中numpy数组如何存储的一些困惑

    在 Python 中使用数据类型 numpy 数组时 我遇到了一些困惑 问题1 我在 python 解释器中执行以下脚本 gt gt gt import numpy as np gt gt gt L 1000 2000 3000 gt gt
  • 带参数的 Docker ENTRYPOINT shell 形式

    当我有一个包含以下行的 Docker 映像 Spring Boot 微服务 时 ENTRYPOINT java org springframework boot loader JarLauncher 我可以使用例如启动容器 docker r
  • 安装 pywin32 时出现问题

    我正在尝试为 Python 2 6 安装 pywin32 我安装了 python 但它不在常规的 c 驱动器中 而是在 d 驱动器上 pywin32 安装程序找不到它 我无法提供它的自定义路径 我查了一下 python文件夹就是路径 这个问
  • 优化SQL Server WHERE子句条件中的CASE WHEN语句

    我正在重写我的 sql 以减少执行成本 并想知道是否有一种有效的方法来编写 WHERE 条件中使用的以下 CASE WHEN 语句 SELECT l tg FROM RefTable tg InputTbl l WHERE tg areas
  • 如何从 Spark 中的数组列中选择字段的子集?

    假设我有一个 DataFrame 如下 case class SubClass id String size Int useless String case class MotherClass subClasss Array SubClas
  • java 密钥库文件限制

    我为我的 PFX 证书创建了一个密钥库文件 PKCS 12 http en wikipedia org wiki PKCS12 但我需要知道密钥库文件 JKS 中可以存储多少个密钥 我目前正在加载证书 如下所示 KeyStore oStor
  • 如何防止UIWebView视频获取远程控制事件

    我在 iOS 应用程序中使用 UIWebView 来播放 YouTube 视频 但为了提供本机体验 我使用 UIKit 实现了播放控件 所以UIWebView仅用于显示视频 我也实现了 remoteControlReceivedWithEv
  • 使用 SpriteKit 的 TextureAtlas 并通过 Xcode 命令行构建时,iOS 应用程序崩溃

    我们使用iOS 7中新的SpriteKit框架来开发小游戏 为了构建和分发游戏的新版本 我们使用构建和部署服务器 该服务器使用 Xcode5 的命令行工具 当我们使用一个纹理图集 https developer apple com libr
  • 交换公共文件夹的电子邮件地址列表

    如何获取 Exchange 公用文件夹的所有电子邮件地址的列表 我会自己回复 会接受最好的回复 虽然您作为自己的答案发布的内容可行 但阅读您正在使用的方法和对象的文档以了解它们的局限性会有所帮助 如果您多次调用此代码 您最终会遇到内存泄漏
  • 从文档目录中删除指定文件

    我想从我的应用程序文档目录中删除图像 我编写的删除图像的代码是 void removeImage NSString fileName fileManager NSFileManager defaultManager paths NSSear
  • Firestore离线数据:合并写入、离线持久化的最大时间

    https firebase google com docs firestore manage data enable offline https firebase google com docs firestore manage data
  • 使用 CSS 将元素居中的最不可怕的方法是什么?

    我的 html 看起来像这样
  • 电子表格 onEdit 功能:使其适用于未登录的用户

    我想在输入更改后自动对谷歌电子表格列进行自动排序 我通过下面的代码实现了这一点并且它有效 Question 有没有办法让代码适用于访问该工作表的每个人 登录和未登录 现在 当我登录时 它只对我有用 我想知道这一点 因为我读到函数 onEdi
  • 有条件分割一个巨大的文件

    我有一个非常大的文件 gt 5 亿行 我想根据其中一列的前 3 个字符将其拆分为几个较小的文件 它看起来像这样 其中第 1 列和第 2 列的每个元素都是唯一的 A0A023GPI8 A0A023GPI8 1 232300 102792362
  • 是否有可能“盗用”会话变量(我不想知道如何)

    我目前正在用 php 做一个网站 我们使用 Session 变量来存储每个用户的权限级别 例如 如果你们中的任何一个人访问该网站 您将自动获得一个值为 member 的会话变量 我要问的是 攻击者是否有可能进入网站并将会话变量的值修改为 a
  • 输出 pandas 分组数据框而不聚合

    假设我有一个 pandas DF 其中列名称为 A B C A B C a1 b11 c11 a1 b12 c12 a2 b21 c21 a2 b22 c22 我可以按 A 分组 但是我可以得到 A B C a1 b11 b12 c11 c
  • Qt 创建者:c++:对 Class::Function 的未定义引用

    我正在 Qt 创建器中创建两个 C 项目 第一个是Application project另一个是unit test project 这两个项目分别运行良好 然而 当将两者联系在一起时 我遇到了一些问题 我包括 INCLUDEPATH app
  • 使用 Outlook VBA 区分可见和不可见附件

    要求是将附件上传到服务器 但是 我们只想上传出现在 Outlook 的 消息 行 见下图 中的内容 而不是电子邮件正文中的其他内容 由于 Outlook 本身知道应在行中显示哪个附件 因此必须有用于在内部区分它们的信息 那么 我怎样才能在我
  • 使用 libgdx 在运行时用文本生成纹理

    我正在开发一个电话文字游戏 昨天 我决定使用 libgdx 切换到 OpenGL 以尝试提高图形性能和电池使用率 瞄准更多平台 字母图块在 2D 画布上绘图的方式是每个字母图块都会为自己创建一个位图 我会 从背景位图创建一个新的可变位图 在