|
|
« Предыдущая тема | Следующая тема » |
Опции темы | Опции просмотра |
|
|
|||||
Регистрация: Apr 2010
Сообщений: 170
|
Всем доброго дня!
Ни одна формула не заработала как надо. Первая формула рассчитывала строки не верно. Тыкаю в клетку 4, а она показывает 14. Вторая формула была не точна. Тыкаю на одну и ту же клетку, но в разные места, и значения целые были разные. А третья формула показывает значение строки 800, когда тыкаю к строку 0. Сейчас попробую сам пересчитать всё это с листочком и ручкой, а пока считаю, дам Вам информацию для размышления. Все тайлы карты я рисую в один большой Bitmap. Для его рассчёта я определяю положения крайних точек: // Рассчитываем размер изображения var imageWidth:uint=0; var imageHeight:uint=0; var mapX1:int=0; var mapY1:int=0; var mapX2:int=0; var mapY2:int=0; mapX1=(0*Game.fieldWidth/2)-((map.mapRows-1)*Game.fieldWidth/2); mapY1=(0*Game.fieldHeight/2)+(0*Game.fieldHeight/2); mapX2=((map.mapColumns-1)*Game.fieldWidth/2)-(0*Game.fieldWidth/2)+Game.fieldWidth; mapY2=((map.mapColumns-1)*Game.fieldHeight/2)+((map.mapRows-1)*Game.fieldHeight/2)+Game.fieldHeight; imageWidth=(-1*mapX1)+mapX2; imageHeight=mapY1+mapY2; var bitmapData:BitmapData=new BitmapData(imageWidth,imageHeight,true,0); for(var j:uint=0;j<map.mapRows;j++) { for(var i:uint=0;i<map.mapColumns;i++) { var matrix:Matrix=new Matrix(); matrix.translate((-1*mapX1)+(i*Game.fieldWidth/2)-(j*Game.fieldWidth/2),(i*Game.fieldHeight/2)+(j*Game.fieldHeight/2)); bitmapData.draw(mapLoad.GetData(map.fieldObjects[j * map.mapColumns + i].id),matrix); } } bitmap=new Bitmap(bitmapData); Теперь на этот Bitmap я вешаю событие мышки MOUSE_DOWN и определяю координаты куда мы тыкнули через localX и localY. Как реализовать обратное преобразование? Добавлено через 26 минут Вот для размышления. Красный прямоугольник - это Bitmap, по которому мышкой тыкаем. |
|
|||||
Регистрация: Nov 2010
Сообщений: 150
|
Цитата:
Лошадь пусть размышляет - у нее голова большая. Вот, если интересно, когда-то начинал делать проект с изометрией, формулы отличаются, но рабочие. |
|
|||||
Регистрация: Apr 2010
Сообщений: 170
|
Есть рисунок, на который должны быть выведены изометрические тайлы. Количество колонок и столбцов на карте задано:
Ширина и высота тайлов задана: Рассчитывается размер изображения со всеми выведенными тайлами: var imageWidth:uint=0; var imageHeight:uint=0; var mapX1:int=0; var mapY1:int=0; var mapX2:int=0; var mapY2:int=0; mapX1=(0*Game.fieldWidth/2)-((map.mapRows-1)*Game.fieldWidth/2); mapY1=(0*Game.fieldHeight/2)+(0*Game.fieldHeight/2); mapX2=((map.mapColumns-1)*Game.fieldWidth/2)-(0*Game.fieldWidth/2)+Game.fieldWidth; mapY2=((map.mapColumns-1)*Game.fieldHeight/2)+((map.mapRows-1)*Game.fieldHeight/2)+Game.fieldHeight; imageWidth=(-1*mapX1)+mapX2; imageHeight=mapY1+mapY2; offsetScreenX=-1*mapX1; var bitmapData:BitmapData=new BitmapData(imageWidth,imageHeight,true,0); for(var j:uint=0;j<map.mapRows;j++) { for(var i:uint=0;i<map.mapColumns;i++) { var matrix:Matrix=new Matrix(); matrix.translate(offsetScreenX+(i*Game.fieldWidth/2)-(j*Game.fieldWidth/2),(i*Game.fieldHeight/2)+(j*Game.fieldHeight/2)); bitmapData.draw(mapLoad.GetData(map.fieldObjects[j * map.mapColumns + i].id),matrix); } } bitmap=new Bitmap(bitmapData); При этом каждый тайл ограничен прямоугольной областью: Но все они лежат в картинке: На картинку подписано событие MOUSE_DOWN. Нужно определить столбец и строку тайла, на который тыкнули мышкой. Есть какие-то идеи? |
|
|||||
Регистрация: Nov 2010
Сообщений: 150
|
Вы пример то хоть смотрели. Там есть общая формула преобразования из экранных координат в изометрические. А по изометрическим координатам, зная шаг сетки, определить строку и столбец думаю труда не составит.
|
|
|||||
Регистрация: Apr 2010
Сообщений: 170
|
Stitch512
Посмотрел. Даже скопировал функцию перевода. Но не помогло((( |
|
|||||
Регистрация: Feb 2012
Сообщений: 1,540
|
hitTestPoint? Узнать какой тайл под мышкой...
|
|
|||||
Регистрация: Nov 2010
Сообщений: 150
|
Цитата:
Добавлено через 1 минуту Цитата:
|
|
|||||
блогер
Регистрация: Oct 2005
Адрес: Днепродзержинск - город Брежнева и других логопедов
Сообщений: 1,421
Записей в блоге: 4
|
По-моему во 2-м и 3-м посте просто потеряли 2-ку. Всё справа ещё умножить на 2. Должно сработать. Если нет, то проверьте и нарисуйте на ваших картинках, где находится screenX и screenY, если x = y = 0. Должна быть точка в верхнем углу.
__________________
Бобры отвечают на вопросы не потому, что знают на них ответы; они отвечают потому, что их спрашивают. |
Часовой пояс GMT +4, время: 04:34. |
|
« Предыдущая тема | Следующая тема » |
|
|