Я пытаюсь перевести положение мыши на экране в конкретную плитку на карте. Используя приведенную ниже функцию, я считаю, что нахожусь в правильном направлении, однако я не могу заставить ее правильно масштабироваться при увеличении. Есть идеи, почему?
Вот функция, которую я использую:
Vector2 TranslationVectorFromScreen(Vector2 toTranslate)
{
Vector2 output = new Vector2();
toTranslate -= offset; // Offset is the map's offset if the view has been changed
toTranslate.X /= tileBy2; // tileBy2 is half of the each tile's (sprite) size
toTranslate.Y /= tileBy4; // tileBy2 is a quarter of the each tile's (sprite) size
output.X = (toTranslate.X + toTranslate.Y) / 2;
output.Y = (toTranslate.X - toTranslate.Y) / 2;
return output;
}
Согласно моей отладочной информации, X и Y увеличиваются, когда я перемещаю мышь вдоль линий плитки, однако все их значения неверны, потому что масштаб не учитывается. Я пытался включить масштаб в приведенную выше функцию, но везде, где я добавляю его, кажется, что это только усугубляет ситуацию. Для справки: масштаб хранится как число с плавающей запятой, где 1.0f означает отсутствие масштабирования (на всякий случай).
Вот скриншот на случай, если он поможет пролить свет:
Изменить:
При изменении функции на приведенную ниже число по-прежнему увеличивается в тех же точках (т. е. увеличивается на 1 или уменьшается на 1 вдоль соответствующей оси на плитку), однако результаты по-прежнему кажутся слишком масштабными. Например, если результаты равны 100, 100, при увеличении масштаба они могут измениться на 50, 50, даже если указатель мыши находится над той же плиткой.
Новая функция:
Vector2 TranslationVectorFromScreen(Vector2 toTranslate)
{
Vector2 output = new Vector2();
toTranslate -= offset;
toTranslate.X /= (tileBy2 * scale); // here are the changes
toTranslate.Y /= (tileBy4 * scale); //
output.X = (toTranslate.X + toTranslate.Y) / 2;
output.Y = (toTranslate.X - toTranslate.Y) / 2;
return output;
}