小编kra*_*ari的帖子

如何在旋转的矩形上执行剪裁?

所以我有这个Panel类.这有点像一个窗口,你可以调整大小,关闭,添加按钮,滑块等.就像你们中的任何人都记得的那样,就像Morrowind中的状态屏幕一样.我想要的行为是,当一个精灵在面板边界之外时它不会被绘制,如果它部分在外部,则只绘制内部部分.所以它现在做的是首先获得一个表示面板边界的矩形,一个精灵矩形,它找到两者之间相交的矩形然后将该交集转换为精灵矩形的局部坐标并使用对于源矩形.它的工作原理和我觉得代码一样聪明,我无法感觉到有更好的方法来做到这一点.此外,通过此设置,我无法为我的2D相机使用全局变换矩阵,"世界"中的所有内容都必须通过相机参数进行绘制.无论如何,这是我的代码:
交叉点:

     public static Rectangle? Intersection(Rectangle rectangle1, Rectangle rectangle2)
     {
        if (rectangle1.Intersects(rectangle2))
        {
            if (rectangle1.Contains(rectangle2))
            {
                return rectangle2;
            }
            else if (rectangle2.Contains(rectangle1))
            {
                return rectangle1;
            }
            else
            {
                int x = Math.Max(rectangle1.Left, rectangle2.Left);
                int y = Math.Max(rectangle1.Top, rectangle2.Top);
                int height = Math.Min(rectangle1.Bottom, rectangle2.Bottom) - Math.Max(rectangle1.Top, rectangle2.Top);
                int width = Math.Min(rectangle1.Right, rectangle2.Right) - Math.Max(rectangle1.Left, rectangle2.Left);
                return new Rectangle(x, y, width, height);
            }
        }
        else
        {
            return null;
        }
     }
Run Code Online (Sandbox Code Playgroud)

并实际绘制在面板上:

    public void DrawOnPanel(IDraw sprite, SpriteBatch spriteBatch)
    {
        Rectangle panelRectangle …
Run Code Online (Sandbox Code Playgroud)

xna

5
推荐指数
1
解决办法
893
查看次数

标签 统计

xna ×1