开发者

C# XNA 4.0 Getting scaled rotated sprite position in window

I have some problems with collision. I want to ge coords of a sprite that can be rotated scaled or whatever. It's similiar to Riemers guide, but he's getting a collision of two sprites and I only need those points where alpha is zero.

Better see source:

 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;
    }

With color is pretty easy, but here is the part where I get points:

 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);
        }

And for matrix I'm using this:

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

Sprite is rectangular but i get circular movement: I'm rotating it (rotation += 0,5), adding gravity and making it collide with some y value:

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

And I get that it rotates as a circle colliding a line, but not as a rectangle.

Is this normal? Maybe I need some fixes in source?


"That method is supposed to get a position of a pixel (in sprite) that is not transperent but is rotated, scaled (depending on sprite)."

You need to have a look at this: http://create.msdn.com/en-US/education/catalog/tutorial/collision_2d_perpixel_transformed

This is a great article about 2D collisions in XNA and has an example method that performs 2D collision detection for a Scaled & Rotated set of sprites.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜