【问题标题】:Keep actor size while zooming缩放时保持演员大小
【发布时间】:2023-03-28 09:48:01
【问题描述】:

我正在尝试在地图上绘制用户位置指示器(即演员),无论透视相机视野如何,因此在缩放时演员的大小将保持不变。

我尝试了以下代码但没有成功:

userActorContainer.setScale(camera.fieldOfView/150,camera.fieldOfView/150);

编辑 1: 好的,我已经使用单独的SpriteBatch 来渲染用户位置指示器,现在尺寸问题已解决,但正如我预测的那样,演员的位置完全错误(不适合背景缩放的地图)。这是我的代码:

在构造函数中:

    camera.update();
    firstProjectionMatrix = new Matrix4();
    firstProjectionMatrix.set(camera.combined);

在渲染方法中:

    testBatch.setTransformMatrix(camera.view);
    testBatch.setProjectionMatrix(firstProjectionMatrix);
    testBatch.begin();
    pinsGroup.draw(testBatch, 1);
    testBatch.end();

【问题讨论】:

    标签: android libgdx opengl-es-2.0


    【解决方案1】:

    只需将此演员添加到另一个舞台 - 然后您可以使用地图在舞台上执行缩放,这不会影响您的演员

        Stage mapStage, actorStage;
    
        ...
    
        //render method
        mapStage.handleZoom(); //you zooming handling here
        mapStage.act();
        mapStage.draw();
    
        actorStage.act();
        actorStage.draw();
    

    请注意,您还可以在 actorStage 上使用其他类型的视口/相机,这也很有帮助


    如果您不使用 Scene2D,您还可以在 indicator 渲染之前创建第二个相机并将其 .combined 设置为 spriteBatch 的投影矩阵,甚至可以仅为指示器创建新的 SpriteBatch渲染目的,如

        SpriteBatch batch, indicatorBatch;
    
        ...
    
        //render()
        camera.update();
    
        batch.setProjectionMatrix(camera.combined);
    
        batch.begin();
        //rendering map etc...
        batch.end();
    
        indicatorBatch.begin();
        //rendering indicator
        indicatorBatch.end();    
    

    EDIT - 要在缩放相机后处理位置,您应该使用camera project and unproject 方法。 You can also read more here.

    【讨论】:

    • 但我不想使用舞台!
    • 那么您是否使用 SpriteBatch 来渲染您的演员/地图等?
    • @AlirezaHosseini 如果你不想使用Stage,你为什么要使用Actors?
    • 演员不强制带舞台!我使用 actor 是因为它的结构非常好,而且它的动作特性也很好。
    • @AlirezaHosseini 这不是强制性的,但ActorStage 一起使用。它都是Scene2D 场景图的一部分。它已经为你处理了很多事情,所以如果没有Stage,我真的看不出使用Actor 的理由。你能告诉我你这样做的原因吗?
    猜你喜欢
    • 2014-08-19
    • 2019-01-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-19
    • 2015-02-12
    • 1970-01-01
    相关资源
    最近更新 更多