【问题标题】:Monogame XNA transform matrix for a single object?单个对象的 Monogame XNA 变换矩阵?
【发布时间】:2015-05-26 13:32:24
【问题描述】:

我已经阅读了一些解释 XNA/Monogame 变换矩阵的教程。问题是这些矩阵被应用于

SpriteBatch.Begin(...matrix);

这意味着所有的 Draw 代码都将被转换。 如何将转换矩阵应用于单个可绘制对象?在我的情况下,我想转换滚动背景,使其自动换行。

SpriteBatch.Draw(.. this has no transform matrix parameter?);

【问题讨论】:

    标签: c# matrix xna monogame


    【解决方案1】:

    如果您只想对某些绘图调用使用特定的 spritebatch 开始调用,您可以根据需要开始一个新的调用。

    例如

    SpriteBatch.Begin(...matrix);
    
    //Draw stuff with matrix
    
    SpriteBatch.End();
    
    SpriteBatch.Begin();
    
    //do the rest of the drawing
    
    SpriteBatch.End();
    

    这通常用于在适当的位置、缩放和旋转处使用“相机”矩阵绘制一堆对象,然后调用另一个 spritebatch.Begin 在顶部绘制平面、静态 UI 等。

    【讨论】:

    • 谢谢。我还读到你不应该在每个 Draw 循环中调用多个 spriteBatch.Begin... :-) 我要试试这个!
    • 您绝对应该将其保持在最低限度。根据我的经验,调用它两次对性能的影响并不明显。您的案例将在很大程度上取决于您的游戏的重量以及运行它的硬件类型。如果您必须摆脱第二个开始/结束块,您可以在扩展的 .Draw() 重载中手动应用转换。您还可以在 begin 调用中调整一些其他参数。我建议只在第二个开始结束对性能造成严重影响时才弄乱这些东西。
    • 但我没有看到 Draw() 包含转换矩阵的重载方法?有一个原点向量,但不一样。当我的纹理在屏幕外变形时,我需要将其包裹起来。
    • 我的意思是您可以应用单个元素,例如 x/y 比例、旋转、源和目标矩形等。对于环绕您必须使用着色器效果或破解具有多个绘制的东西电话和一些数学。我仍然认为你应该使用两个 spritebatch 调用,它不应该给你的游戏带来太多负担。
    猜你喜欢
    • 2018-04-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-02-01
    • 1970-01-01
    • 2013-11-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多