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

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

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

Регистрация: Jul 2007
Адрес: Гражданин Российской Федерации
Сообщений: 1,122
Отправить сообщение для KiL33 с помощью ICQ
По умолчанию Вращение объекта по центру

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

test.swf   (24.7 Кб)


Код AS3:
import flash.events.MouseEvent;
import flash.display.Sprite;
import flash.text.TextField;
import com.greensock.TweenMax;
 
stage.addEventListener(MouseEvent.MOUSE_DOWN, onDown);
var obj:Sprite;
 
var btn:Sprite = simpleButton();
addChild(btn);
btn.addEventListener(MouseEvent.CLICK, initRotate);
btn.x = (stage.stageWidth/2) - (btn.width/2);
btn.y = 200;
 
function initRotate(e:MouseEvent):void {
 
	if(obj != null) TweenMax.to(obj, 1, {rotation:90});
}
 
function onDown(e:MouseEvent):void {
	if(e.target is Sprite) return;
 
	obj = new Sprite();
	addChild(obj)
	obj.x = mouseX;
	obj.y = mouseY;
 
	stage.addEventListener(MouseEvent.MOUSE_UP, onUp);
	stage.addEventListener(MouseEvent.MOUSE_MOVE, onMove);
 
}
 
 
function onMove(e:MouseEvent):void {
 
	obj.graphics.clear();
	obj.graphics.beginFill(0x0);
	obj.graphics.drawRect(0, 0, obj.mouseX, obj.mouseY);
 
}
 
function onUp(e:MouseEvent):void {
 
	stage.removeEventListener(MouseEvent.MOUSE_UP, onUp);
	stage.removeEventListener(MouseEvent.MOUSE_MOVE, onMove);
 
}
 
 
function simpleButton():Sprite {
 
	var sp:Sprite = new Sprite();
	sp.buttonMode = true;
	sp.graphics.beginFill(0xCCCCCC);
	sp.graphics.drawRect(0,0,100,20);
	sp.graphics.endFill();
	var txt:TextField = new TextField();
	sp.addChild(txt);
	txt.mouseEnabled = false;
	txt.text = "ROTATE";
	txt.autoSize = "left"
	txt.x = (sp.width/2) - (txt.width/2);
	return sp;
}
Вложения
Тип файла: swf test.swf (24.7 Кб, 360 просмотров)

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

Регистрация: Dec 2010
Адрес: Ярославль
Сообщений: 1,255
Нужно положить объект в контейнер и сдвинуть координаты на минус половину длины и ширины.
Вращать контейнер.

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

Регистрация: Jul 2007
Адрес: Гражданин Российской Федерации
Сообщений: 1,122
Отправить сообщение для KiL33 с помощью ICQ
Т.е. при отпускании мыши сдвигать созданный объект, который внутри контейнера?
Тогда приходится такой мазохизм делать

Код AS3:
obj.x = -obj.width/2
obj.y = -obj.height/2
 
cont.x = cont.x+(obj.width/2);
cont.y = cont.y+(obj.height/2);
Чтобы при сдвиге объекта он не смещался, приходится в обратную сторону смещать сам контейнер. Как то не очень. Может я не так понял?

Старый 14.01.2016, 13:52
illuzor вне форума Посмотреть профиль Отправить личное сообщение для illuzor Найти все сообщения от illuzor
  № 4  
Ответить с цитированием
illuzor
 
Аватар для illuzor

Регистрация: Dec 2010
Адрес: Ярославль
Сообщений: 1,255
Всё так.
Ещё вариант - задействовать матрицу

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

модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
http://flasher.ru/forum/showpost.php...1&postcount=18
__________________
Reality.getBounds(this);

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

блогер
Регистрация: Dec 2008
Адрес: Israel, Natanya
Сообщений: 4,740
Записей в блоге: 11
http://www.flasher.ru/forum/blog.php?b=704
__________________
משיח לא בא
משיח גם לא מטלפן

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

Регистрация: Jul 2007
Адрес: Гражданин Российской Федерации
Сообщений: 1,122
Отправить сообщение для KiL33 с помощью ICQ
alatar, круто. Но у меня вся анимация c использованием твинов, как в таком случае использовать подход с матрицей, не знаю.

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

блогер
Регистрация: Dec 2008
Адрес: Israel, Natanya
Сообщений: 4,740
Записей в блоге: 11
твинеру всё равно что анимировать вы можете передать ему любую функцию, которая будет принимать "анимируемое" значение.
__________________
משיח לא בא
משיח גם לא מטלפן

Старый 15.01.2016, 09:00
KiL33 вне форума Посмотреть профиль Отправить личное сообщение для KiL33 Найти все сообщения от KiL33
  № 9  
Ответить с цитированием
KiL33
 
Аватар для KiL33

Регистрация: Jul 2007
Адрес: Гражданин Российской Федерации
Сообщений: 1,122
Отправить сообщение для KiL33 с помощью ICQ
Так то оно так.
Не могу понять, как применить ваш метод.

Я делаю

Код AS3:
var m:Matrix = mc.transform.matrix;
var mtx:Matrix = rotateAroundTo(m, new Point(координаты пивота), new Point(координаты объекта));
 
TweenMax.to(mc, 1, {x:mtx.tx, y:mtx.ty, rotation:90});
Не?)

Объект улетает в сторону.

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

блогер
Регистрация: Dec 2008
Адрес: Israel, Natanya
Сообщений: 4,740
Записей в блоге: 11
Координаты, передаваемые в функцию должены быть в локальных координатах объекта, который необходимо повернуть. Углы, если используются, должны быть в радианах.
А дальше, например так.
Код AS3:
TweenPlugin.activate([TransformMatrixPlugin]);
...
var targetMatrix:Matrix = rotateAroundTo(mc.transform.matrix, mc.globalToLocal(pivot), mc.globalToLocal(координаты куда необходимо повернуться))ж
 
TweenMax.to(mc, 1, {transformMatrix:targetMatrix})
__________________
משיח לא בא
משיח גם לא מטלפן

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

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

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


 


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


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