如何将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
相关产品推荐
相关产品推荐

