我正在尝试将鼠标在屏幕上的位置转换为地图上的特定图块。使用下面的功能,我相信我是正确的,但是当我缩放时我无法正确缩放。任何想法为什么?
这是我正在使用的功能:
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;
}