![]() |
|
|
![]() |
![]() |
« Предыдущая тема | Следующая тема » |
Опции темы | Опции просмотра |
|
![]() |
![]() |
|
|||||
Регистрация: Nov 2010
Адрес: Ярославль
Сообщений: 249
|
![]() Здравствуйте. Уже долго мучаюсь с одной проблемой - всё никак не могу прийти к решению. У меня есть изображения (на котором изображено пианино) и есть MovieClip с пианинной клавиатурой, который я специально подогнал под размеры, чтобы казалось, что этот клип - часть самого пианино на изображении. Потом я засунул изображение и клип с клавиатурой в один контейнер.
Проблема в том, что когда я перемещаю контейнер, клавиатура уже не выглядит так, как будто она принадлежит изображению (она как бы отлипляется от того места и перемещается "независимо" внутри контейнера). Пробовал эксперементировать с Matrix3D клипа с клавиатурой, но не особо силён в математике, и ничего толкового не вышло. Подскажите, как можно "зафиксировать" 3D клип внутри контейнера (как бы прикрепить его к определённому месту, чтоб он визуально сохранял своё положение, вращение и масштабирование)? Вот как это выглядит: http://media.otkritka.com/flash_user...f0c82f2be1.swf |
|
|||||
Регистрация: Oct 2012
Сообщений: 35
|
вся беда из за того что ты работаешь в 3х измерениях, и картинка с клавиатурой у тебя на разных расстояниях от точки обзора , т.е у ниx разный focalLength. Зная значение focalLength, и значение положения клавиш и пианино, можешь перемещать и вращать клавиши в соответствии с перемещением пианино (математически высчитывать угол и смещение что бы казалось будто они одно целое). В адобовском as3_Programming хелпе в разделе "работа в 3х измерениях" есть немного об этом. Еще: в данном примере не вижу нужды в 3Д клавишах, сделай в 2Д и не парься )
P.S: не исключено что есть способы проще. |
|
|||||
попробуй просто задать этому контейнеру свой perspectiveProjection, типа
var pp:PerspectiveProjection = new PerspectiveProjection(); pp.projectionCenter = new Point(stage.stageWidth / 2, stage.stageHeight / 2); piano_mc.transform.perspectiveProjection = pp; ага, этого мало скорее всего, в обработчике драга придется его обновлять тоже т.е. изначально, например var pp:PerspectiveProjection = new PerspectiveProjection(); pp.projectionCenter = new Point(piano_mc.x + piano_mc.width / 2, piano_mc.y + piano_mc.height / 2); piano_mc.transform.perspectiveProjection = pp; piano_mc.x += mouseX - prevX; piano_mc.y += mouseY - prevY; var pp:PerspectiveProjection = new PerspectiveProjection(); pp.projectionCenter = new Point(piano_mc.x + piano_mc.width / 2, piano_mc.y + piano_mc.height / 2); piano_mc.transform.perspectiveProjection = pp; prevX = mouseX; prevY = mouseY; |
![]() |
![]() |
Часовой пояс GMT +4, время: 08:48. |
|
« Предыдущая тема | Следующая тема » |
Теги |
3d , фиксация |
Опции темы | |
Опции просмотра | |
|
|