Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему  
Старый 02.03.2012, 13:34
s3dworld вне форума Посмотреть профиль Отправить личное сообщение для s3dworld Найти все сообщения от s3dworld
  № 11  
Ответить с цитированием
s3dworld

Регистрация: Apr 2010
Сообщений: 170
Всем доброго дня!

Ни одна формула не заработала как надо. Первая формула рассчитывала строки не верно. Тыкаю в клетку 4, а она показывает 14. Вторая формула была не точна. Тыкаю на одну и ту же клетку, но в разные места, и значения целые были разные. А третья формула показывает значение строки 800, когда тыкаю к строку 0. Сейчас попробую сам пересчитать всё это с листочком и ручкой, а пока считаю, дам Вам информацию для размышления.

Все тайлы карты я рисую в один большой Bitmap. Для его рассчёта я определяю положения крайних точек:

Код AS3:
// Рассчитываем размер изображения
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);
Теперь у меня есть область для заполнения тайлов. И в цикле я её заполняю:

Код AS3:
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);
Как видите, я к каждому тайлу прибавляю по оси X значение, обратное началу моего квадрата, так, чтобы тайлы выводились правильно (а то бы они начали рисоваться с самого левого края изображения, а надо почти от середины). Именно это обратное значение я и запоминаю как смещение:

Код AS3:
offsetScreenX=-1*mapX1;
Теперь на этот Bitmap я вешаю событие мышки MOUSE_DOWN и определяю координаты куда мы тыкнули через localX и localY. Как реализовать обратное преобразование?

Добавлено через 26 минут
Вот для размышления. Красный прямоугольник - это Bitmap, по которому мышкой тыкаем.


Создать новую тему   Часовой пояс GMT +4, время: 02:46.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


Часовой пояс GMT +4, время: 02:46.


Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.