![]() |
|
||||||||||
|
|||||||
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | Опции просмотра |
|
![]() |
![]() |
|
|||||
|
[+4 06.05.14]
|
Вопрос следующий. Есть некий контейнер в нем находится всякая графика... Поверх контейнера находится рамка ( квадрат , c дыркой в середине) (статичная рамка ). Нужно по mouseMove таскать контент так, чтобы он полностью прокручивался в поле дырки от квадрата.
Подскажите формулу, если кто знает. Сейчас формула выглядет так ( но тут подогнанные значения, нужно избежать этого ) private function onMove(e:MouseEvent):void { var w:Number = stage.stageWidth / 8; var h:Number = stage.stageHeight / 8; var w1:int = stage.stageWidth; var h1:int = stage.stageHeight; if(mouseY > h && mouseY < h*7 && _imageContainer.height > h1 ) { var _y:int = -( (mouseY - h) / ( h1 - h*2 ) ) * ( _imageContainer.height - h1 ) ; _imageContainer.y = _y; } if(mouseX > w && mouseX < w*7 && _imageContainer.width > w1) { var _x:int = -( (mouseX - w) / (w1 - w*2 ) ) * ( _imageContainer.width - w1) ; _imageContainer.x = _x; } }
__________________
Марк Tween |
|
|||||
|
Движение линейное - поэтому можно сделать аппроксимацию.
В чем суть: находим 2 краевые точки. Это будет полностью прокрученный контент - тогда х у контента должен быть (ширина_рамки - ширина_контена). И нулевая точка - контент должен быть на позиции х = 0. Думаем. Рожаем:
__________________
Тут мужик танцует и поёт про флэш |
|
|||||
|
[+4 06.05.14]
|
Такс а если же контент находится не в нулевой точке? Тоесть в моем случае, вся графика начинает проявлятся от краев рамки, тоесть часть контейнера с графикой пустая. Тогда ширина контента - пустота*2 ?
__________________
Марк Tween |
|
|||||
|
[+4 06.05.14]
|
Я прикладываю рисунок. По нему поясню в чем дело. Дело вот в чем, на рисунке видны 2 красных кружка, когда курсор мыши попадает на левый красный ( тоесть на начало рамки , НЕ в точку 0-0 сцены ) , то в данный момент контент находится в точке 0-0, когда на правй красный, то контент полностью прокручен. Psycho Tiger по втоей формуле он ставится в 0-0 тогда, когда и курсор в 0-0. А надо немного не так. П.с. Контент есть контейнер, графика в котором рисуется от тольщины рамки, тоесть если толщина рамки ( от 0-0 до дырки - это толщина ) = 500 px , то пустота в контейнере = 500 px по всем краям соотв.
__________________
Марк Tween |
|
|||||
|
как понял я, имеем:
сцена, контент, рамка. рожаем: Добавлено через 3 минуты В зависимости от задачи, меняем положительные координаты мыши на отрицательные. Запретить контейнеру двигаться за пределами видимой области, проверяем место положение мыши и глушим слушателя в случае выхода за приделы рамки.
__________________
Спросишь, дурак на минуту. Если не спросишь, дурак на всю жизнь! |
|
|||||
|
[+4 06.05.14]
|
Ребят тут принципиальный момент - Рамка.width имееется ввиду ширина ДЫРКИ, или же ширина отступа до дырки ?
Добавлено через 1 минуту рамка.х - не существует, она статичная 0-0
__________________
Марк Tween |
|
|||||
package { import flash.display.Sprite; import flash.events.Event; import flash.events.MouseEvent; public class Main extends Sprite { [Embed(source = 'picture.jpg')] private var Picture:Class; public function Main():void { addChild(new Picture()); if (stage) { stage.addEventListener(MouseEvent.MOUSE_MOVE, MOUSE_MOVE); MOUSE_MOVE(); } } private function MOUSE_MOVE(e:MouseEvent = null):void { getChildAt(0).x = (stage.stageWidth - getChildAt(0).width) / stage.stageWidth * mouseX; getChildAt(0).y = (stage.stageHeight - getChildAt(0).height) / stage.stageHeight * mouseY; } } }
__________________
Спросишь, дурак на минуту. Если не спросишь, дурак на всю жизнь! |
|
|||||
|
[+4 06.05.14]
|
http://devel.ria-master.com/m/75/ вот сторонний пример. если уж на то пошло
__________________
Марк Tween |
|
|||||
|
Цитата:
если знать начальную позицию видимой области а это "рамка.х + рамка.бордер.width" и зная полную площадь "рамка.width - рамка.бордер.width * 2"; что мешает юзать контент в данных границах? Добавлено через 2 минуты private function MOUSE_MOVE(e:MouseEvent = null):void { getChildAt(0).x = толщина бордюра + (stage.stageWidth /* минус толщина бордюра * 2*/ - getChildAt(0).width) / stage.stageWidth * mouseX; getChildAt(0).y = толщина бордюра + (stage.stageHeight/* минус толщина бордюра * 2*/ - getChildAt(0).height) / stage.stageHeight * mouseY; } стоп, сек. Добавлено через 14 минут package { import flash.display.Sprite; import flash.events.Event; import flash.events.MouseEvent; public class Main extends Sprite { [Embed(source = '../bin/Book.jpg')] private var BookBackground:Class; public function Main():void { addChild(new BookBackground()); if (stage) { stage.addEventListener(MouseEvent.MOUSE_MOVE, MOUSE_MOVE); MOUSE_MOVE(); } } private function MOUSE_MOVE(e:MouseEvent = null):void { getChildAt(0).x = 100 + (stage.stageWidth - getChildAt(0).width - 200) / stage.stageWidth * mouseX; getChildAt(0).y = 100 + (stage.stageHeight - getChildAt(0).height - 200) / stage.stageHeight * mouseY; } } }
__________________
Спросишь, дурак на минуту. Если не спросишь, дурак на всю жизнь! Последний раз редактировалось stweet; 08.10.2011 в 23:09. |
|
|||||
|
[+4 06.05.14]
|
Проверил ваш вариант - не работает. точне работает, только не так как просилось.
Еще раз задача Контейнер состоит из бордера + графика. Рамка состоит из бордера - оставшияся часть есть дырка. Контент надо крутить в дырке так, что положение мышки на левом краю бордера рамки соответсвует координате 0-0 для контейнера, далее контейнер не двигается, а положение мышки на правом краю ( конце дырки рамки ) соотвествует ширине контейнера, далее контейнер не двигается. В пердидущем посте я выложил наглядный пример такого взаимодействия. Возможно в том примере у контейнера нету бордера и он сразу строится из координат 0-0, собственно и с такой позицией я попробовал вашу формулу - результат отрицательный.
__________________
Марк Tween |
![]() |
![]() |
Часовой пояс GMT +4, время: 14:17. |
|
|
« Предыдущая тема | Следующая тема » |
|
|