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

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

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

Регистрация: Dec 2010
Сообщений: 177
По умолчанию Смещение центра вращения клипа, не меняя его позиции.

Есть клип, графика внутри которого расположена в точке 0,0.
Когда я вращаю, то клип вращается не вокруг своего центра.
Как с помощью матрицы преобразования (или др. способом), сделать так,
чтобы клип оставался на своем месте, но центр координат сместился на середину
клипа по XY и клип вращался бы вокруг своего центра? Т.е. визуально клип,
как показывался, так и показывается на экране без изменений, но теперь вращался
бы вокруг своего центра.

Вариант клип в клипе не подходит, также мне нельзя внутри клипа сдвинуть графику,
чтобы она находилась посередке точки 0,0.

Старый 08.02.2011, 17:19
in4core вне форума Посмотреть профиль Отправить личное сообщение для in4core Найти все сообщения от in4core
  № 2  
Ответить с цитированием
in4core
 
Аватар для in4core

Регистрация: Mar 2009
Сообщений: 4,219
Записей в блоге: 14
Код AS3:
container.addChild(clip);
clip.x = -clip.width;
clip.y = -clip.height;
 
container.rotation = 90

Старый 08.02.2011, 17:35
alatar вне форума Посмотреть профиль Отправить личное сообщение для alatar Найти все сообщения от alatar
  № 3  
Ответить с цитированием
alatar
 
Аватар для alatar

блогер
Регистрация: Dec 2008
Адрес: Israel, Natanya
Сообщений: 4,740
Записей в блоге: 11
Для спрайта размером 50х50 и находящегося в координатах 100, 100
Код AS3:
var m:Matrix = new Matrix();
m.translate( -25, -25);
m.rotate(Math.PI * .25);
m.translate(25, 25);
m.translate(100, 100);
 
spr.transform.matrix = m;


Последний раз редактировалось alatar; 08.02.2011 в 17:38.
Старый 08.02.2011, 18:02
cleptoman вне форума Посмотреть профиль Отправить личное сообщение для cleptoman Найти все сообщения от cleptoman
  № 4  
Ответить с цитированием
cleptoman
 
Аватар для cleptoman

блогер
Регистрация: Mar 2007
Сообщений: 1,291
Записей в блоге: 5
Отправить сообщение для cleptoman с помощью ICQ
вот еще "тяжелый" вариант )

Код AS3:
var mc1:Sprite = this.getChildByName("mc") as Sprite; // это ваш мувик
var angleGrad:Number	 = mc1.rotation;// начальная позиция поворота в градусах
var center:Point = new Point(mc.x + mc1.width / 2,mc1.y + mc1.height / 2); // точка вокруг которой будем крутить
 
var radius:Number	= Math.sqrt((mc1.width / 2) * (mc1.width / 2) + (mc1.height / 2) * (mc1.height / 2));// растояние от точки вокруг которой будем крутить до точки регистрации мувика
var startRadAngle:Number = Math.acos(mc1.width / 2 / radius);// начальный угол между центром и точкой регистрации
function rotate(angle:Number):void{
	mc1.rotation = angle;//повернули мувик
	var angleRad:Number = angle * Math.PI / 180;// вычислили угол в радианах
	mc1.x			= center.x - radius * Math.cos(startRadAngle + angleRad);// сместили мувик на нужную величину по Х
	mc1.y			= center.y - radius * Math.sin(startRadAngle + angleRad);// сместили мувик на нужную величину по У
}
 
function _onEnterFrame(e:Event):void{
	rotate(angleGrad++);
}
addEventListener(Event.ENTER_FRAME,_onEnterFrame);
 
// вообще для класса сделать по хорошему отдельный сеттер/геттер а ля rotationAroundOwnCenter. 
// вообще, по хорошему лучше вообще так не делать, потому как вычислений многовато тяжелых
__________________
http://cleptoman.free-lance.ru
achivements: дважды благословлен на воровство. осеяный благодатью

Старый 08.02.2011, 18:05
in4core вне форума Посмотреть профиль Отправить личное сообщение для in4core Найти все сообщения от in4core
  № 5  
Ответить с цитированием
in4core
 
Аватар для in4core

Регистрация: Mar 2009
Сообщений: 4,219
Записей в блоге: 14
))) жесть

Старый 08.02.2011, 18:31
Alexmody вне форума Посмотреть профиль Отправить личное сообщение для Alexmody Найти все сообщения от Alexmody
  № 6  
Ответить с цитированием
Alexmody

Регистрация: Dec 2010
Сообщений: 177
alatar
Применил ваши преобразования, к сожалению объект странно перевернулся...подскажите что не так, ниже привел код:

Член-функция класса к которому применяем центровку матрицей:
visualOb - наш клип, у которого центруем точку смещения.
Код:
public function setRotCenter():void 
{
	var m:Matrix = new Matrix();
        m.translate( -visualOb.width/2, -visualOb.height/2);
        m.rotate(Math.PI * .25);
        m.translate(visualOb.width, visualOb.height);
        m.translate(visualOb.x, visualOb.y);
 
        visualOb.transform.matrix = m;
}

Старый 08.02.2011, 18:37
alatar вне форума Посмотреть профиль Отправить личное сообщение для alatar Найти все сообщения от alatar
  № 7  
Ответить с цитированием
alatar
 
Аватар для alatar

блогер
Регистрация: Dec 2008
Адрес: Israel, Natanya
Сообщений: 4,740
Записей в блоге: 11
Сдвинули не туда после поворота
Код AS3:
public function setRotCenter():void 
{
	var m:Matrix = new Matrix();
        m.translate( -visualOb.width/2, -visualOb.height/2);
        m.rotate(Math.PI * .25);
        m.translate(visualOb.width/2, visualOb.height/2);
        m.translate(visualOb.x, visualOb.y);
 
        visualOb.transform.matrix = m;
}

Старый 08.02.2011, 18:55
Alexmody вне форума Посмотреть профиль Отправить личное сообщение для Alexmody Найти все сообщения от Alexmody
  № 8  
Ответить с цитированием
Alexmody

Регистрация: Dec 2010
Сообщений: 177
alatar
Спасибо, ранее не работал с матрицей, сейчас посмотрел ее описание функций, стал ясен вышеприведенный код.
Но у меня стоит задача отцентровать центр смещения + применить к объекту твин вращения, чтобы объект твинился вращаясь вокруг своего центра, как это лучше реализовать? Сам твин обычный флешовый класс Tween.


Последний раз редактировалось Alexmody; 08.02.2011 в 18:57.
Старый 08.02.2011, 18:59
alatar вне форума Посмотреть профиль Отправить личное сообщение для alatar Найти все сообщения от alatar
  № 9  
Ответить с цитированием
alatar
 
Аватар для alatar

блогер
Регистрация: Dec 2008
Адрес: Israel, Natanya
Сообщений: 4,740
Записей в блоге: 11
В твине указать сеттер переменной (угол поворота). В сеттере вписать код с матрицей.

Старый 08.02.2011, 19:50
Alexmody вне форума Посмотреть профиль Отправить личное сообщение для Alexmody Найти все сообщения от Alexmody
  № 10  
Ответить с цитированием
Alexmody

Регистрация: Dec 2010
Сообщений: 177
//В твине указать сеттер
жаль что придется менять флешовый класс твинера, я глянул, там явной переменной angle нет...

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

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

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


 


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


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