【问题标题】:libGDX connect two actors with linelibGDX 用线连接两个演员
【发布时间】:2015-12-08 02:00:16
【问题描述】:

我必须创建 2 个图像并将它们用线连接起来。当我移动一个演员时,显然正确的行尾必须让我的演员休息。我知道,我可以使用ShapeRenderer 并每次都重画那条线,但这是最好的主意吗?

ShapeRenderer sr = new ShapeRenderer();
    sr.setColor(Color.RED);
    sr.setProjectionMatrix(viewport.getCamera().combined);

    sr.begin(ShapeRenderer.ShapeType.Filled);
    sr.rectLine(vertex1.getCenterX(), vertex1.getCenterY(),
            vertex2.getCenterX(), vertex2.getCenterY(), 10);
    sr.end();

我已经创建了两个演员并管理拖动事件。现在我必须画出那条线。它应该是这样的

【问题讨论】:

    标签: java android graph libgdx actor


    【解决方案1】:

    如果 shaperender 适合您的风格,我不明白为什么这是个坏主意?

    如果你在演员后面画线,你只需要从演员 1 的中心画到演员 2。否则你必须计算从哪里开始。类似这样的伪代码:

    //Subtract vectors and normalize to get direction
    direction = origin1.sub(origin2);
    direction.nor();
    
    //Add the radius in the correct direction from the origin.
    startPoint = origin2.add(direction * actorRadius);
    endPoint = origin1.add(direction.rotate(180) * actorRadius);
    

    小心使用这样的向量。如果你不使用vector.cpy(),像上面这样的链接会改变原始向量。因此,如果您仍然需要原始原点,则必须执行 direction = origin1.cpy().sub(origin2); 现在方向保存向量的副本。

    【讨论】:

    • 由于性能原因,使用 shaperenderer 通常是个坏主意 - 它会增加您的批处理 flush() 调用,所以要小心这一点。当然不要在更新循环中创建 shaperenderer 的新实例!
    • @m.antkowicz 嗯,不知道。只用它来调试我自己,并且在我以前的应用程序中有很多行。从未注意到性能问题。
    • 你很幸运;)它当然取决于使用过的地图集等的数量 - 但通常要注意它
    猜你喜欢
    • 2015-02-04
    • 2012-11-15
    • 1970-01-01
    • 1970-01-01
    • 2014-12-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多