У меня есть некоторые проблемы со столкновением.Я хочу получить координаты спрайта, который можно вращать в масштабе или как угодно.Это похоже на руководство Riemers, но он сталкивается с двумя спрайтами, и мне нужны только те точки, где альфа равна нулю.
Лучше увидеть источник:
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;
И я получаю, что он вращается как окружность, сталкивающаяся с линией, но не как прямоугольник.
Это нормально?Может быть, мне нужны исправления в источнике?