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

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

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 31.10.2012, 07:48
gin_sea вне форума Посмотреть профиль Отправить личное сообщение для gin_sea Найти все сообщения от gin_sea
  № 1  
Ответить с цитированием
gin_sea
[+6 30.10.12]

Регистрация: Jul 2005
Сообщений: 35
По умолчанию rotationX поворачивает два одинаковых мувика на разные углы

На сцене два мувиклипа, которые поворачиваются при нажатии кнопки с помощью метода rotationX. Но почему-то клипы поваричаваются не синхронно, каждый на свой угол, хотя rotationX инкрементируется на одну и ту же величину. Не подскажите в чем дело?
На сцене два мувиклипа, с instance name bla1 и bla2, а также кнопка, при нажатии на которую выполняется следующая функция:

Код AS3:
function rot (e:MouseEvent):void
{
bla1.rotationX+=10;
bla2.rotationX+=10;
}

Старый 31.10.2012, 09:35
Hauts вне форума Посмотреть профиль Отправить личное сообщение для Hauts Посетить домашнюю страницу Hauts Найти все сообщения от Hauts
  № 2  
Ответить с цитированием
Hauts
 
Аватар для Hauts

блогер
Регистрация: Feb 2008
Адрес: Россия, Новосибирск, Академгородок
Сообщений: 2,113
Записей в блоге: 1
Отправить сообщение для Hauts с помощью ICQ Отправить сообщение для Hauts с помощью Skype™
Меняйте не rotationX, а просто rotation. rotationX поворачивает объект в трехмерном пространстве, поэтому из-за того, что объекты расположены в разных местах, они и по-разному выглядят.

Представьте, что вы смотрите на стол, на котором стоят две книги, повернутые относительно стола на один и тот же угол, — книги будут зрительно выглядеть отлично друг от друга.
__________________
hauts.ru

Старый 31.10.2012, 10:50
gin_sea вне форума Посмотреть профиль Отправить личное сообщение для gin_sea Найти все сообщения от gin_sea
  № 3  
Ответить с цитированием
gin_sea
[+6 30.10.12]

Регистрация: Jul 2005
Сообщений: 35
Цитата:
Сообщение от Hauts Посмотреть сообщение
Меняйте не rotationX, а просто rotation. rotationX поворачивает объект в трехмерном пространстве, поэтому из-за того, что объекты расположены в разных местах, они и по-разному выглядят.

Представьте, что вы смотрите на стол, на котором стоят две книги, повернутые относительно стола на один и тот же угол, — книги будут зрительно выглядеть отлично друг от друга.
Мне и нужно поворачивать объект в трехмерном пространстве, а не на плоскости. Хочу добиться того, чтобы объекты поворачивались синхронно.

Старый 31.10.2012, 11:24
Hauts вне форума Посмотреть профиль Отправить личное сообщение для Hauts Посетить домашнюю страницу Hauts Найти все сообщения от Hauts
  № 4  
Ответить с цитированием
Hauts
 
Аватар для Hauts

блогер
Регистрация: Feb 2008
Адрес: Россия, Новосибирск, Академгородок
Сообщений: 2,113
Записей в блоге: 1
Отправить сообщение для Hauts с помощью ICQ Отправить сообщение для Hauts с помощью Skype™
Ну так наверное и нужно было это уточнить в самом начале.

Возможно поможет установка центра проекции в точку между двумя клипами.

Код AS3:
var pp:PerspectiveProjection = new PerspectiveProjection();
pp.projectionCenter = new Point(stage.stageWidth/2, stage.stageHeight/2);
container.transform.perspectiveProjection = pp;
Добавлено через 14 минут
Накидал пример, изучайте:
Код AS3:
import flash.display.Sprite;
import flash.geom.PerspectiveProjection;
import flash.geom.Point;
 
function createClip():Sprite {
	var s:Sprite = new Sprite();
	s.graphics.lineStyle(1,0x000000);
	s.graphics.beginFill(0xFFFFFF * Math.random())
	s.graphics.drawRect(0,0,100,100);
	s.graphics.endFill();
	return s
}
 
var clip_1:Sprite = createClip();
var clip_2:Sprite = createClip();
 
addChild(clip_1)
addChild(clip_2)
 
clip_1.x = 100
clip_1.y = 100
 
clip_2.x = 350
clip_2.y = 150
 
var container_1:Sprite = new Sprite();
var container_2:Sprite = new Sprite();
var clip_3:Sprite = createClip();
var clip_4:Sprite = createClip();
container_1.addChild(clip_3)
container_2.addChild(clip_4)
 
addChild(container_1)
addChild(container_2)
 
container_1.x = 100
container_1.y = 300
 
container_2.x = 350
container_2.y = 350
 
var pp:PerspectiveProjection = new PerspectiveProjection()
pp.projectionCenter = new Point(50,50)
container_1.transform.perspectiveProjection = pp;
container_2.transform.perspectiveProjection = pp;
 
stage.addEventListener(MouseEvent.MOUSE_MOVE, mouseMoveHandler)
 
function mouseMoveHandler(e:MouseEvent){
	clip_1.rotationX = 180 * stage.mouseX / stage.stageWidth
	clip_2.rotationX = clip_1.rotationX
	clip_3.rotationX = clip_4.rotationX = clip_1.rotationX
 
}
__________________
hauts.ru


Последний раз редактировалось Hauts; 31.10.2012 в 11:41.
Старый 31.10.2012, 11:58
Korchy вне форума Посмотреть профиль Отправить личное сообщение для Korchy Найти все сообщения от Korchy
  № 5  
Ответить с цитированием
Korchy
 
Аватар для Korchy

Регистрация: May 2011
Сообщений: 301
Записей в блоге: 2
2 gin_sea

Для того чтобы объекты правильно поворачивались вокруг какой-то точки, обычно делают поворот так:
1. Перемещение точки, вокруг которой вращают в 0,0,0
2. Поворот
3. Перемещение обратно в ту точку, где точка вращения находилась до п.1
Тогда все будет поворачиваться верно.
__________________
interplanety

Старый 31.10.2012, 12:08
gin_sea вне форума Посмотреть профиль Отправить личное сообщение для gin_sea Найти все сообщения от gin_sea
  № 6  
Ответить с цитированием
gin_sea
[+6 30.10.12]

Регистрация: Jul 2005
Сообщений: 35
Цитата:
Сообщение от Korchy Посмотреть сообщение
2 gin_sea

Для того чтобы объекты правильно поворачивались вокруг какой-то точки, обычно делают поворот так:
1. Перемещение точки, вокруг которой вращают в 0,0,0
2. Поворот
3. Перемещение обратно в ту точку, где точка вращения находилась до п.1
Тогда все будет поворачиваться верно.
Логика не совсем понятна, но я попробую. Подскажите, как задать точку, относительно которой нужно вращать?


Последний раз редактировалось gin_sea; 31.10.2012 в 12:21.
Старый 31.10.2012, 12:23
Hauts вне форума Посмотреть профиль Отправить личное сообщение для Hauts Посетить домашнюю страницу Hauts Найти все сообщения от Hauts
  № 7  
Ответить с цитированием
Hauts
 
Аватар для Hauts

блогер
Регистрация: Feb 2008
Адрес: Россия, Новосибирск, Академгородок
Сообщений: 2,113
Записей в блоге: 1
Отправить сообщение для Hauts с помощью ICQ Отправить сообщение для Hauts с помощью Skype™
Цитата:
Логика не совсем понятна, но я попробую. Подскажите, как задать точку, относительно которой нужно вращать?
PerspectiveProjection.projectionCenter не?
__________________
hauts.ru

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

модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
Hauts, от того, что Вы назначите двум объектам один и тот же центр проекции, они не станут выглядеть одинаково О__о. У них итак по-умолчанию один центр проекции.
Я бы для начала выяснил, чего на самом деле хочет автор вопроса. Потому что очевидно, что оба объекта конечно же вращаются "синхронно" "в трехмерном пространстве", куда они денутся. Очевидно, что автор хочет совсем другого. Возможно, чтобы объекты выглядели одинаково, наплевав на перспективу. Тогда им надо назначать индивидуальные PerspectiveProjection. Но может быть автор хочет чего-то вообще третьего (пятого)?
__________________
Reality.getBounds(this);

Старый 31.10.2012, 14:50
Hauts вне форума Посмотреть профиль Отправить личное сообщение для Hauts Посетить домашнюю страницу Hauts Найти все сообщения от Hauts
  № 9  
Ответить с цитированием
Hauts
 
Аватар для Hauts

блогер
Регистрация: Feb 2008
Адрес: Россия, Новосибирск, Академгородок
Сообщений: 2,113
Записей в блоге: 1
Отправить сообщение для Hauts с помощью ICQ Отправить сообщение для Hauts с помощью Skype™
Цитата:
Hauts, от того, что Вы назначите двум объектам один и тот же центр проекции, они не станут выглядеть одинаково О__о.
Да да, я это понял, конечно же, исправил свое сообщение.

Цитата:
Возможно, чтобы объекты выглядели одинаково, наплевав на перспективу. Тогда им надо назначать индивидуальные PerspectiveProjection.
В примере, собственно, так и сделано, если я не туплю
__________________
hauts.ru

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

модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
Для клипов в контейнерах можно и так.
А без контейнеров — "надо назначать индивидуальные PerspectiveProjection"
Код AS3:
			clip_1.x = 100;
			clip_1.y = 100;
			var ppC1:PerspectiveProjection = new PerspectiveProjection();
			ppC1.projectionCenter = new Point(100 + 50, 100 + 50);
			clip_1.transform.perspectiveProjection = ppC1;
 
			clip_2.x = 300;
			clip_2.y = 250;
			var ppC2:PerspectiveProjection = new PerspectiveProjection();
			ppC2.projectionCenter = new Point(300 + 50, 250 + 50);
			clip_2.transform.perspectiveProjection = ppC2;
__________________
Reality.getBounds(this);

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

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

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


 


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


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