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

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

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему  
Старый 14.01.2016, 02:46
PainKiller вне форума Посмотреть профиль Отправить личное сообщение для PainKiller Найти все сообщения от PainKiller
  № 1  
Ответить с цитированием
PainKiller
 
Аватар для PainKiller

блогер
Регистрация: Sep 2011
Адрес: Москва
Сообщений: 533
Записей в блоге: 4
По умолчанию Изометрия: Позиционирование крупных объектов на тайловой сетке

Очень давно я не писал тут, решил вспомнить прошлое))
Никогда не работал с изометрией, только когда то очень давно разбирался с тьюториалом на demiart'e
основные свои знания по этому предмету я почерпнул оттуда. Недавно решил ковырнуть сей предмет снова и сразу споткнулся на таком моменте - как позиционировать на тайловой сетке крупные предметы (крупные в смысле состоящие из нескольких тайлов).
В приведенном тьюториале для позиционирования однотайловых кубиков по клику используется такой код:
Код AS3:
private function onWorldClick(event:MouseEvent):void
{
			var box:DrawnIsoBox = new DrawnIsoBox( TILE_SIZE, Math.random() * 0xffffff,  BUILDING_HEIGHT);
			var pos:Point3D = IsoUtils.screenToIso(new Point(_world.mouseX, _world.mouseY));
 
			pos.x = Math.round(pos.x / TILE_SIZE) * TILE_SIZE;
			pos.y = Math.round(pos.y / TILE_SIZE) * TILE_SIZE;
			pos.z = Math.round(pos.z / TILE_SIZE) * TILE_SIZE;
 
			box.position = pos;
			_world.addChildToWorld(box);
 
}
На всякий случай привожу функцию пересчета координат в iso из тьюториала
Код AS3:
     /**
		 * Из двухмерного пространства в трехмерное, высота у равна нулю.
		 * @arg point точка в двухмерном пространстве.
		 */
		public static function screenToIso(point:Point):Point3D
		{
			var xpos:Number = point.y + point.x * .5;
			var ypos:Number = 0;
			var zpos:Number = point.y - point.x * .5;
			return new Point3D(xpos, ypos, zpos);
		}
и он прекрасно работает, и четко вписывает кубик в основание тайла по координатам клика мыши. Но если задать размер кубика в виде size * TILE_SIZE (допустим размером 2 на 2 тайла) то я получаю такую картину:


У синего объекта, размером 2х2 экранные координаты выставлены в 0, 0 (т.е. он должен вписываться в крайний верхний квадрат 2х2 тайлов) но наблюдается смещение которое меняется в зависимости от размера объекта. Бьюсь уже весь вечер и формулу нащупать не получается, даже непонятно какая из этих двух функций виновата, и даже не знаю что почитать.

Заранее спасибо за помощь, проект прикрепляю (сделан в FB 4.7)
Миниатюры
Нажмите на изображение для увеличения
Название: iso.png
Просмотров: 456
Размер:	7.7 Кб
ID:	31966  
Вложения
Тип файла: zip iso.zip (68.1 Кб, 57 просмотров)

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

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

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


 


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


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