public void Draw(SpriteBatch spriteBatch)
{
for (int x = 0; x < width; x++)
{
for (int y = 0; y < height; y++)
{
Vector2 mouseCoord = GetMouseTilePosition();
if (mouseCoord.X > 0)
{
spriteBatch.Draw(selection, tileRect = new Rectangle((int)mouseCoord.X * 64, (int)mouseCoord.Y * 64, 64, 64),
Color.White);
}
spriteBatch.Draw(tiles[index[x,y]].texture, tileRect = new Rectangle(x * 64, y * 64, 64, 64),
Color.White);
}
}
}
public Vector2 GetMouseTilePosition()
{
for (int x = 0; x < width; x++)
{
for (int y = 0; y < height; y++)
{
if (IsMouseInsideTile(x, y))
{
return new Vector2(x, y);
}
}
}
return new Vector2(-1, -1);
}
public bool IsMouseInsideTile(int x, int y)
{
MouseState MS = Mouse.GetState();
return (MS.X >= x * 64 && MS.X <= (x + 1) * 64 &&
MS.Y >= y * 64 && MS.Y <= (y + 1) * 64);
}
Это очень интенсивный процессор. Есть ли лучший способ сделать этот код? Также у меня есть камера, как я могу изменить это на коэффициент, поэтому я получаю фактическую позицию мыши.Выбор текстуры на плитах, вызывающих проблемы с производительностью
Непонятно, что вы пытаетесь сделать. Что такое 'width' и' height'? Почему вы вызываете 'GetMouseTilePosition' (который перебирает * каждую * координату) на * каждую итерацию * в' Draw'? В принципе, да, я абсолютно уверен, что есть * намного более быстрые способы сделать это, но трудно давать предложения без дополнительного контекста. –
Я просто не включил весь мой код. width = 17 height = 15. Мне сказали использовать GetMouseTilePosition в моем последнем вопросе, так что да, поэтому я использую это – Corey
. Если честно, этот код выглядит довольно неэффективным для начала. Пока не совсем ясно, чего вы пытаетесь достичь. –