创建/渲染 scene2d 舞台后重置视口

2024-04-08

在我的游戏中,我正在绘制一个 scene2dStage使用自定义世界坐标系。

然后,我想绘制一个调试 UI,上面包含一些文本(例如 FPS),但只需使用屏幕坐标,即文本位于屏幕右上角的位置。我的主要渲染方法如下所示:

@Override
public void render(float delta) {
    Gdx.gl.glClearColor(1, 0, 0, 1);
    Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);

    gameStage.act(delta);
    gameStage.draw();

    debugInfo.render(delta);
}

The Stage设置自定义视口:

public GameStage(GameDimensions dimensions, OrthographicCamera camera) {
    // mapWith will be smaller than screen width
    super(new FitViewport(dimensions.mapWidth, dimensions.mapHeight, camera));
    ...
}

The DebugInfo渲染代码如下所示:

public DebugInfo() {
    Matrix4 mat = new Matrix4();
    mat.setToOrtho2D(0, 0, Gdx.graphics.getWidth(), Gdx.graphics.getHeight());
    batch.setProjectionMatrix(mat);
}

@Override
public void render(float delta) {
    batch.begin();
    font.setScale(2f);
    drawText("FPS " + Gdx.graphics.getFramesPerSecond());
    batch.end();
}

private void drawText(String text) {
    final BitmapFont.TextBounds textBounds = font.getBounds(text);
    textPos.x = Gdx.graphics.getWidth() - textBounds.width - MARGIN;
    textPos.y = Gdx.graphics.getHeight() - MARGIN;
    textPos.z = 0;
    font.draw(batch, text, textPos.x, textPos.y);
}

问题是,即使我没有参考舞台的世界系统或其相机,而是严格使用像素值和相应的投影矩阵,文本也会出现在舞台视口的右上角,即smaller比屏幕。我希望它看起来与屏幕角落的舞台分离。

我可以将问题归结为创建Stage实例本身;停下来画它是不够的。我实际上必须删除对super(new FitViewport(...))以防止这种情况发生。

这让我相信我需要以某种方式重置渲染管道的视口before我渲染 UI 叠加层吗?我该怎么做呢?


我的第一个答案是错误的。现在,当我研究过Viewport源代码我可以看到它使用OpenGL的GLViewPort http://docs.gl/es2/glViewport事实上它会影响所有后续的绘制调用。所以你必须打电话glViewport在渲染你的东西之前使用适当的尺寸:

@Override
public void render(float delta) {
    Gdx.gl.glViewport(0, 0, Gdx.graphics.getWidth(), Gdx.graphics.getHeight());
    batch.begin();
    font.setScale(2f);
    drawText("FPS " + Gdx.graphics.getFramesPerSecond());
    batch.end();
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

创建/渲染 scene2d 舞台后重置视口 的相关文章

  • Android 主机意图过滤器通配符

    是否可以在 android host 属性上使用通配符 就像是 android host site com android pathPattern android pathPrefix m android scheme http gt Or
  • 已发布的 Flutter 应用程序在启动时崩溃

    编辑 此问题的解决方案是将您的 flutter 版本升级到较新的 dev 版本 then 1 7 0 您还可以上传单独的 APK 版本 但我个人不喜欢这个选项 请确保您没有从 flutter github 开发存储库下载 错误的构建 因为那
  • 关闭 Android 中的飞行模式

    如果 num gt 50 我想关闭飞行模式 我实现了这段代码 来自在 Android 中切换飞行模式 https stackoverflow com questions 5533881 toggle airplane mode in and
  • Android KeyBoard.Key 禁用图标 预览特殊键?

    我通过实现 KeyboardView OnKeyboardActionListener 接口来自定义自己的软键盘 按下按键时 将显示预览弹出窗口 我的问题是如何禁用 SHIFT 和 DELETE 等特殊键的预览弹出窗口 我尝试将 andro
  • 应用程序实例是否始终在任何活动之前创建?

    在 Android 中 您可以通过扩展 Application 类并在 Manifest 中声明名称来提供您自己的 Application 类实现 我的问题是 这个实现是否总是在初始活动之前创建 或者活动可以在应用程序实例有时间创建之前启动
  • Android Studio:lambda 不起作用[重复]

    这个问题在这里已经有答案了 当尝试使用 lambda 表达式时 我遇到了一些 Gradle 构建错误 错误 41 100 错误 source 1 7 不支持 lambda 表达式 使用 source 8 或更高版本来启用 lambda 表达
  • 如何将 EditText 传递给另一个活动?

    Intent intent new Intent this Name class intent putExtra key et getText toString startActivity intent Intent intent getI
  • 如何使用 adb 在设备上安装现有的 Android 应用程序?

    在开发过程中 我使用类似的东西 adb s 192 168 1 77 5555 uninstall com myApp app adb s 192 168 1 77 5555 install path to android debug ap
  • Google Firebase - 如何删除崩溃报告?

    我最终失明了吗 还是没有明显的方法可以通过 Google Firebase Web 控制台删除 Firebase 崩溃报告 我的 Android 应用程序已成功记录报告 但现在出现大量 开发崩溃 占用了我在控制台中的大部分视图 这使得找到实
  • 如何将画廊意图中的“打开”更改为“完成”?

    我使用以下意图打开画廊来选择多个图像和视频 Intent intent new Intent intent setType image video intent putExtra Intent EXTRA ALLOW MULTIPLE tr
  • 为什么按钮上的 maxWidth 不起作用以及如何解决它?

    我的布局上有两个按钮 在大屏幕设备 平板电脑 上我想限制它们的宽度 这样它们看起来就不会很荒谬 我希望使用 maxWidth 属性 但它显然在我的场景中没有任何作用 这是布局定义 按钮使用布局的整个宽度 忽略 maxWidth 中的任何值
  • 监听什么来检测 Android 中的请勿打扰模式更改?

    我希望我的应用程序在手机设置为请勿打扰模式 仅限闹钟 仅限优先级或完全静音 时显示通知 通过聆听 这效果非常好android media RINGER MODE CHANGED在快速设置中检查此模式并在已选择的选项卡中选择模式时 但是 当选
  • 没有调用addToBackStack,片段仍然添加到backstack,为什么?

    我正在制作我的片段更换器助手类 但我遇到了一些问题 我称之为FragmentChanger 它有一个fragmentContainer 这是一个ViewGroup 其中包含我想展示的所有片段 我已经做了我自己的replace Fragmen
  • Android模拟器分配内存失败8

    当我尝试从 Eclipse 运行 WXGA800 模拟器时 出现如下错误 Failed to allocate memory 8 This application has requested the Runtime to terminate
  • 不显示 WRITE_EXTERNAL_STORAGE 的权限对话框

    I want to download a file using DownloadManager And DownloadManager wants to WRITE EXTERNAL STORAGE permission I have in
  • 内部存储的安全性如何?

    我需要的 对于 Android 我需要永久保存数据 但也能够编辑 并且显然是读取 它 用户不应访问此数据 它可以包含诸如高分之类的内容 用户不得对其进行编辑 我的问题 我会 并且已经 使用过Internal Storage 但我不确定它实际
  • Android:确定 2.2 及更高版本上的摄像头数量

    我的应用程序需要在 Android 2 2 及更高版本上运行 我需要一种方法来确定可用摄像机的数量 有很多帖子解决了这个问题 但我找不到一个有效的 一种解决方案是简单地检测操作系统版本 任何 2 2 版本的设备都仅限于 1 个摄像头 即使该
  • Android - iphone 风格 tabhost [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 通过powershell运行ADB命令

    所以我尝试通过 powershell 脚本运行一些 ADB 命令 这是我正在尝试做的一个简单示例 adb shell echo in adb shell su root echo you are now root ls cd data da
  • 如何以编程方式创建活动转换?

    我想以编程方式创建一个动画 以从触摸屏点启动具有缩放效果的活动 接下来我模拟缩放输入效果

随机推荐

  • 我也可以在客户端使用 Coffeescript 吗?

    有没有办法在客户端使用CoffeeScript 有两种方法 将 CoffeeScript 编译为 JavaScript 并像部署任何 JavaScript 文件一样部署它 或者 Use coffee script js https coff
  • Xamarin WKWebView 接受自签名证书

    我在网上看到过各种例子说明如何接受它们 但我总是得到发生 SSL 错误 无法与服务器建立安全连接 我要注意的是 该方法肯定被调用 在 iOS 8 4 模拟器和 iOS 11 实际设备上运行 因此未调用的方法不是这里的问题 到目前为止我已经尝
  • 主要 JavaScript 框架/库列表 [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我开始更深入地研究 JavaScript 开发 并希望减少时间去探索必须使用哪些工具来完成这项工作 我正在寻找一些网站 其中所有主要的 J
  • 用于生成唯一链接的 Rails 插件?

    我的应用程序中有很多地方需要生成带有唯一标记的链接 foo com g6Ce7sDygw 或其他 每个链接可能与一些会话数据相关联 并将用户带到一些特定的控制器 操作 有谁知道有一个 gem 插件可以做到这一点 它很容易实现 但会更干净 无
  • 无法通过 cloudformation yaml 创建 AWS::ECS::Service,模型验证失败

    在创建期间AWS ECS Service通过 cloudformation 我收到错误 Model validation failed 该错误与以下内容有关 HealthCheckGracePeriodSeconds和一些其他属性 错误详细
  • generateCertificate() 时出现证书异常

    我正在开发我的 Android 应用程序 我正在尝试生成X509证书来自我的证书文件流的实例 但是得到CertificateException 这是我的简单代码 import java security cert CertificateEx
  • withColumn() 中的 PySpark list() 只能工作一次,然后 AssertionError: col 应该是 Column

    我有一个 DataFrame 其中有 6 个字符串列 名为 Spclty1 Spclty6 另外 6 个字符串列名为 StartDt1 StartDt6 我想将它们压缩并折叠成如下所示的列 Spclty1 StartDt1 Spclty6
  • 究竟是什么在管理光束中的水印?

    Beam 的强大功能来自于它先进的窗口功能 但它也有点令人困惑 在本地测试中看到一些奇怪的情况 我使用rabbitmq作为输入源 其中消息并不总是得到ackd 并修复了不总是关闭的窗口 我开始挖掘 StackOverflow 和 Beam
  • C# 对带有换行符的文本字符串进行编码

    我有一个字符串正在写入响应的输出流 保存此文档并在 Notepad 或 WordPad 中打开它后 我会在预期的位置得到格式良好的换行符 但是当我使用常规的旧 Windows 记事本打开此文档时 我会得到一个带有 方形符号 的长文本字符串
  • Clearcase 中的派生对象

    我想问一下 ClearCase 中的派生对象到底是什么以及如何工作 另外我想问是否有其他程序具有相同的功能 因为在 Git MKS 或 IBM Rational Team Concert 中我找不到类似的东西 它是否已经过时了 这与动态视图
  • 如何在 JavaScript 中逐行循环换行符分隔的 json?

    我的项目中有一个 JSON 文件 如下所示 id 707860 name Hurzuf country UA coord lon 34 283333 lat 44 549999 id 519188 name Novinki country
  • SQL查询6度分离用于网络分析

    我正在使用 D3 js 构建网络分析 以在我的应用程序中显示连接的电话号码 分隔度可达六度 用于查找初始连接的 SQL postgres 如下 相当简单 然而 我对如何修改它以遍历六个级别的连接然后停止感到困惑 SELECT player
  • 更改输入焦点上的 div 颜色

    我正在尝试改变的颜色div带信s div class search container div
  • 将多个同名资源添加到 Xcode for iPhone

    是否可以在资源组中使用图像的双重名称 谢谢 您可以拥有多个同名资源 只要 1 它们不在同一目录中 并且 2 您已通过引用将资源添加到您的 Xcode 项目中 1 因为任何目录都不能包含两个同名的文件 2 因为 Xcode 尊重通过引用添加的
  • 如何检查数组中的所有元素是否为零? [复制]

    这个问题在这里已经有答案了 我想知道除了nil数组中的值 arr nil nil nil nil gt true arr nil 45 nil nil gt false 可以有任何类型的任何值 不仅45 Use the Enumerable
  • win-7 cmd 上的 GNU awk,不会将输出重定向到文件

    如果相关的话 我直接从sourceforge中的GNU指向源下载了GNU awk V 3 1 6 我正在使用 Windows 版 wget 获取 URL 页面 处理传入的文件后 我将其减少为单行 我必须从中提取一个键值 这是一个相当长的字符
  • 在起订量中重置模拟验证?

    设置如下 public interface IFoo void Fizz Test public void A var foo new Mock
  • C 字符串文字所需的转义字符

    我有一个以零结尾的字符串 char s 我正在生成 C 源代码 在运行时 并且我想输出一个表示 s 的字符串文字 它将在生成的 C 程序中生成与 s 相同的字符串 我使用的算法是 Output Foreach char c in s if
  • 使用 ASP.Net,是否有一种编程方式来截取浏览器内容的屏幕截图?

    我有一个 ASP Net 应用程序 根据需要的功能 用户希望能够截取屏幕截图 虽然我知道这可以模拟 但如果有一种方法可以获取 URL 或当前呈现的页面 并将其转换为可以存储在服务器上的图像 那就太好了 这疯了吗 有办法做到吗 如果有的话 有
  • 创建/渲染 scene2d 舞台后重置视口

    在我的游戏中 我正在绘制一个 scene2dStage使用自定义世界坐标系 然后 我想绘制一个调试 UI 上面包含一些文本 例如 FPS 但只需使用屏幕坐标 即文本位于屏幕右上角的位置 我的主要渲染方法如下所示 Override publi