碰撞时我遇到了一些问题。我想要一个可以旋转缩放或其他任何精灵的精灵。这与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;
我认为它会像一个圆圈相撞一条线而旋转,而不是一个矩形。
这是正常的吗?也许我需要在源代码中修改一些?
答案 0 :(得分:0)
“该方法应该获得一个像素(在精灵中)的位置,该位置不是transperent但是被旋转,缩放(取决于精灵)。”
你需要看看这个: http://create.msdn.com/en-US/education/catalog/tutorial/collision_2d_perpixel_transformed
这是一篇关于XNA中2D碰撞的精彩文章,并且有一个示例方法可以对Scaled&amp; amp;旋转的精灵集。