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

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

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Закрытая тема
Старый 14.04.2009, 21:22
Mur4ik вне форума Посмотреть профиль Отправить личное сообщение для Mur4ik Найти все сообщения от Mur4ik
  № 1  
Mur4ik
ветеран форума

Регистрация: Sep 2008
Сообщений: 717
Записей в блоге: 4
Отправить сообщение для Mur4ik с помощью ICQ
По умолчанию программное изменение точки регистрации

Собственно сам вопрос в теме:
Как программно изменить точку регистрации спрайта, мувиклипа и т.д,
не добавляя его в другой и соответственно смещая внутри него.

Может как то матрицами или еще как нибудь?

Вообще удивительно что нет родных методов для этого, в IDE ведь можно это делать при создании, а при создании программно всегда в TL.
__________________
trace("Остановите Землю, я сойду!!!");

Старый 14.04.2009, 23:00
Gaen вне форума Посмотреть профиль Отправить личное сообщение для Gaen Найти все сообщения от Gaen
  № 2  
Gaen
strange mood
 
Аватар для Gaen

модератор форума
Регистрация: Jul 2004
Адрес: Питер
Сообщений: 1,653
Записей в блоге: 1
Отправить сообщение для Gaen с помощью ICQ Отправить сообщение для Gaen с помощью Skype™
Нет никакой точки регистрации, есть только центр координат. Хотите сместить центр координат относительно содержимого спрайта - сместите содержимое относительно центра координат.
__________________
тонкий тролль, осеянный благодатью

Старый 14.04.2009, 23:05
iNils вне форума Посмотреть профиль Отправить личное сообщение для iNils Посетить домашнюю страницу iNils Найти все сообщения от iNils
  № 3  
iNils
Негуру
 
Аватар для iNils

администратор
Регистрация: Jan 2000
Адрес: Кёнигсберг in Moscow
Сообщений: 21,879
Записей в блоге: 7
Цитата:
в IDE ведь можно это делать при создании
Нельзя. Это псевдо точка, сколько бы вы ее не меняли, программно всегда все идет только от точки координат.
Все остальное через смещение.
__________________
(и)Нильс.ru | Плагины для FlashDevelop

Старый 15.04.2009, 02:26
Mur4ik вне форума Посмотреть профиль Отправить личное сообщение для Mur4ik Найти все сообщения от Mur4ik
  № 4  
Mur4ik
ветеран форума

Регистрация: Sep 2008
Сообщений: 717
Записей в блоге: 4
Отправить сообщение для Mur4ik с помощью ICQ
Если только смещением - значит будем смещением
Спасибо...

Но, допустим есть у меня спрайт с кучей вложений, как мне его повернуть или отмасштабировать относительно центра спрайта или какой либо произвольной точки? Неужели смещать предварительно все элементы внутри него относительно нужной точки?
__________________
trace("Остановите Землю, я сойду!!!");


Последний раз редактировалось Mur4ik; 15.04.2009 в 02:43.
Старый 15.04.2009, 02:41
iNils вне форума Посмотреть профиль Отправить личное сообщение для iNils Посетить домашнюю страницу iNils Найти все сообщения от iNils
  № 5  
iNils
Негуру
 
Аватар для iNils

администратор
Регистрация: Jan 2000
Адрес: Кёнигсберг in Moscow
Сообщений: 21,879
Записей в блоге: 7
Цитата:
Как же нельзя? Если я при создании клипа укажу точку регистрации в центре,
Вы путаете теплое с мягким. Это тоже самое, что создать клип и рисовать квадрат в нем не в области (0,0,100,100), а в (-50,-50,100,100). И это не точка регистрации, а центр координат. Вы его задали и больше менять не можете.
__________________
(и)Нильс.ru | Плагины для FlashDevelop

Старый 15.04.2009, 03:34
Mur4ik вне форума Посмотреть профиль Отправить личное сообщение для Mur4ik Найти все сообщения от Mur4ik
  № 6  
Mur4ik
ветеран форума

Регистрация: Sep 2008
Сообщений: 717
Записей в блоге: 4
Отправить сообщение для Mur4ik с помощью ICQ
я уже исправился

Вопрос теперь как применить трансформацию к объекту относительно произвольной точки, так чтоб не дергать все объекты внутри него?
__________________
trace("Остановите Землю, я сойду!!!");

Старый 15.04.2009, 10:15
Cybo вне форума Посмотреть профиль Отправить личное сообщение для Cybo Найти все сообщения от Cybo
  № 7  
Cybo

Регистрация: Nov 2001
Адрес: Казань
Сообщений: 118
Код AS3:
pivotX=50;
pivotY=50;
transMatrix = _target.transform.matrix;
transMatrix.translate(-pivotX, -pivotY);
transMatrix.rotate(value);
transMatrix.translate(pivotX, pivotY);
target.transform.matrix = transMatrix;

Старый 15.04.2009, 11:51
Psycho Tiger вне форума Посмотреть профиль Отправить личное сообщение для Psycho Tiger Найти все сообщения от Psycho Tiger
  № 8  
Psycho Tiger
 
Аватар для Psycho Tiger

блогер
Регистрация: Jun 2005
Адрес: Господи пожалуйста не Новосибирск
Сообщений: 6,598
Записей в блоге: 17
Поместить содержимое внутри в контейнер, его двигать и вертеть родителя.

Старый 15.04.2009, 16:19
Mur4ik вне форума Посмотреть профиль Отправить личное сообщение для Mur4ik Найти все сообщения от Mur4ik
  № 9  
Mur4ik
ветеран форума

Регистрация: Sep 2008
Сообщений: 717
Записей в блоге: 4
Отправить сообщение для Mur4ik с помощью ICQ
Psycho Tiger, это не есть выход, помещать основной объект внутрь другого контейнера или перебирать всех детей и смещать их. Накладно очень будет в некоторых случаях....

Вообщем поковырявшись пришел к такому решению, может кому пригодится.
Код AS3:
// Масштаб относительно произвольной точки $point
public static function relativeScale($dob:DisplayObjectContainer, $scaleX:Number, $scaleY:Number, $point:Point):void
{ 
	var mtrx:Matrix=$dob.transform.matrix;
	mtrx.tx -= $point.x;
	mtrx.ty -= $point.y;
	mtrx.scale($scaleX, $scaleY);
	mtrx.tx += $point.x;
	mtrx.ty += $point.y;
	$dob.transform.matrix = mtrx;
}
 
// Поворот относительно произвольной точки $point
public static function relativeRotate($dob:DisplayObjectContainer, $angle:Number, $point:Point):void
{
      var mtrx:Matrix=$dob.transform.matrix;
      mtrx.tx -= $point.x;
      mtrx.ty -= $point.y;
      mtrx.rotate($angle * (Math.PI / 180));
      mtrx.tx += $point.x;
      mtrx.ty += $point.y;
      $dob.transform.matrix=mtrx;
}
Спасибо, Cybo, чуток бы пораньше
__________________
trace("Остановите Землю, я сойду!!!");


Последний раз редактировалось Mur4ik; 15.04.2009 в 16:22.
Старый 15.04.2009, 17:08
BlooDHounD вне форума Посмотреть профиль Отправить личное сообщение для BlooDHounD Посетить домашнюю страницу BlooDHounD Найти все сообщения от BlooDHounD
  № 10  
BlooDHounD
стервочка (я мужик)
 
Аватар для BlooDHounD

блогер
Регистрация: Mar 2004
Адрес: Борисов
Сообщений: 3,161
Записей в блоге: 22
Mur4ik, мне говорили, что если перед всеми аргументами писать два значка $, то флэш начинает быстрее работать, а если три, то он вообще начинает летать

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

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

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


 


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


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