C#XNA 4.0在窗口中获得缩放旋转的精灵位置

时间:2011-06-07 10:26:45

标签: c# xna 2d collision

碰撞时我遇到了一些问题。我想要一个可以旋转缩放或其他任何精灵的精灵。这与Riemers指南类似,但他正在与两个精灵相撞,我只需要那些alpha为零的点。

最好看一下来源:

 public Color[,] TextureTo2DArray(Texture2D texture) // to get color array
    {
        Color[] colors1D = new Color[texture.Width * texture.Height];
        texture.GetData(colors1D);

        Color[,] colors2D = new Color[texture.Width, texture.Height];
        for (int x = 0; x < texture.Width; x++)
            for (int y = 0; y < texture.Height; y++)
                colors2D[x, y] = colors1D[x + y * texture.Width];

        return colors2D;
    }

颜色很容易,但这里是获得分数的部分:

 public Vector2 TexturePos(Color[,] Color, Matrix matrix)
        {

            int width1 = Color.GetLength(0);
            int height1 = Color.GetLength(1);


            for (int x = 0; x < width1; x++)
            {
                for (int y = 0; y < height1; y++)
                {
                    Vector2 pos1 = new Vector2(x, y);

                    if (Color[x, y].A > 0)
                    {
                        Vector2 screenPos = Vector2.Transform(pos1, matrix);
                        return screenPos;
                    }
                }
            }

            return new Vector2(-1, -1);
        }

对于矩阵我正在使用它:

        Matrix matrix =
            Matrix.CreateTranslation(new Vector3(origin, 0)) * 
            Matrix.CreateRotationZ(MathHelper.ToRadians(rotation))*
            Matrix.CreateScale(scale) * 
            Matrix.CreateTranslation(new Vector3(pos, 0));

精灵是矩形但我得到圆周运动:我正在旋转它(旋转+ = 0.5),增加重力并使其与某个y值碰撞:

Pos.Y += 5;
if (Position.Y >= 200)
BoxPos.Y -= 5;

我认为它会像一个圆圈相撞一条线而旋转,而不是一个矩形。

这是正常的吗?也许我需要在源代码中修改一些?

1 个答案:

答案 0 :(得分:0)

“该方法应该获得一个像素(在精灵中)的位置,该位置不是transperent但是被旋转,缩放(取决于精灵)。”

你需要看看这个: http://create.msdn.com/en-US/education/catalog/tutorial/collision_2d_perpixel_transformed

这是一篇关于XNA中2D碰撞的精彩文章,并且有一个示例方法可以对Scaled&amp; amp;旋转的精灵集。