|
|
« Предыдущая тема | Следующая тема » |
Опции темы | Опции просмотра |
|
|
|||||
Регистрация: Nov 2009
Адрес: в златоглавой
Сообщений: 745
|
Перевод реальных координат мыши в координаты искажённого объекта (flash.geom.Matrix)
Есть сетка квадратных тайлов, мы делаем её "изометрической": поворачиваем на 45°, скейлим по 'y' на 0.8, задаём необходимые координаты.
Затем, нужно получить старые координаты вершин (как будто сетка не была повёрнута). Кликаем поочерёдно по вершинам, по CLICK выполняем функцию: var mtrx:Matrix = new Matrix(); mtrx.translate(-grid.x, -grid.y); // сдвигаем назад на ноль mtrx.scale(1, 1.2); // скейлим обратно в бОльшую сторону mtrx.rotate(-Math.PI/4); // поворачиваем обратно на 45° var pnt:Point = mtrx.transformPoint(new Point(mouseX, mouseY)); // получаем здесь нужную нам точку Результаты кликов по зелёным вершинам: Ширина клетки = 50 пикселей, считает ПОЧТИ правильно. Откуда выпадает эта ошибка-погрешность? Что я не учёл? Чтобы было понятнее: Клики должны выдавать:
__________________
Нормально делай — нормально будет! |
|
|||||
Попробуйте умножать текущие координаты точки на обратную матрицу трансформации, получите начальные координаты точки.
__________________
interplanety |
|
|||||
Регистрация: Nov 2009
Адрес: в златоглавой
Сообщений: 745
|
Цитата:
Получаются вообще другие цифры. Если можно, уточните кодом.
__________________
Нормально делай — нормально будет! |
|
|||||
Регистрация: Mar 2007
Сообщений: 319
|
я думаю имелось ввиду
var mtrx:Matrix = grid.transform.matrix; mtrx.invert(); var pnt:Point = mtrx.transformPoint(new Point(mouseX, mouseY)); |
|
|||||
Регистрация: Nov 2010
Сообщений: 497
|
Цитата:
Обратный масштаб в оригинальном коде выбран неправильно: Цитата:
Всегда, когда идет увеличение/уменьшение на X процентов, нужно учитывать, от исходной или от целевой величины идут проценты. Т.е. фраза "А меньше Б на 20%" совершенно не означает, что "Б больше А на 20%". |
|
|||||
Цитата:
// спрайт. поместим в точку 10,10 var TS:Sprite = new Sprite(); addChild(TS); TS.x = 10; TS.y = 10; // начальная точка var CP:Point = new Point(TS.x, TS.y); trace(CP); // (x=10, y=10) // допустим переместили спрайт в точку 100,100 var M:Matrix = new Matrix(); M.tx = 100; M.ty = 100; trace(M); // (a=1, b=0, c=0, d=1, tx=100, ty=100) var M0:Matrix = TS.transform.matrix; M0.concat(M); TS.transform.matrix = M0; // текущая точка CP = new Point(TS.x, TS.y); trace(CP); // (x=110, y=110) // Как получить начальную координату - взять обратную матрицу var M1:Matrix = M.clone(); M1.invert(); trace(M1); // (a=1, b=0, c=0, d=1, tx=-100, ty=-100) // кординаты начальной точки var PP:Point = M1.transformPoint(CP); trace(PP); // (x=10, y=10)
__________________
interplanety |
Часовой пояс GMT +4, время: 10:07. |
|
« Предыдущая тема | Следующая тема » |
Опции темы | |
Опции просмотра | |
|
|