You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将vtkTextActor的原点从左下角改为左上角?

解决TextActor在不同视口尺寸下固定左下角的问题

确实需要在视口/窗口尺寸变化时更新位置,硬编码位置会因视口坐标体系变化导致适配失效,以下是具体实现方案:

1. 监听窗口尺寸变化事件

在LibGDX中,可通过给Gdx.graphics添加ResizeListener,或重写ApplicationListener的resize方法,捕获窗口/视口的尺寸变化。

2. 计算并更新TextActor的位置

由于TextActor没有setOrigin方法,需手动计算左下角锚点位置:

  • 先获取TextActor的宽高(调用getWidth()和getHeight())
  • 视口左下角基础坐标通常为(0,0),若使用FitViewport等带黑边的视口,需通过getViewport().getScreenX()和getScreenY()获取视口在屏幕上的偏移量
  • 最终位置公式:x = 视口左偏移 + 自定义左边距,y = 视口下偏移 + 自定义下边距

代码示例:

private Stage stage;
private TextActor textActor;
private Viewport viewport;

// 初始化阶段创建并添加TextActor
textActor = new TextActor("固定在左下角的文本");
stage.addActor(textActor);

// 添加窗口尺寸变化监听
Gdx.graphics.addResizeListener((width, height) -> {
    viewport.update(width, height, true);
    float leftMargin = 10;
    float bottomMargin = 10;
    float viewportX = viewport.getScreenX();
    float viewportY = viewport.getScreenY();
    // 设置TextActor左下角对齐的位置
    textActor.setPosition(viewportX + leftMargin, viewportY + bottomMargin);
});

3. 初始化时同步位置

初始化完成后需手动调用一次位置计算代码,避免初始状态下位置错误:

float leftMargin = 10;
float bottomMargin = 10;
float viewportX = viewport.getScreenX();
float viewportY = viewport.getScreenY();
textActor.setPosition(viewportX + leftMargin, viewportY + bottomMargin);

补充优化

若TextActor是自定义Actor子类,不建议重写act方法做位置更新——act每一帧都会执行,而监听resize事件仅在尺寸变化时触发,后者性能更优。

内容的提问来源于stack exchange,提问作者QThelp

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.20 15:08:08