![]() |
"Проехаться" по таймлайну.
приветствую.
собрал ролик - в общем-то это определенным образом собранная последовательность фоток. что-то типа фото-панорамы. все это лежит на одном таймлайне. так вот каким образом можно сделать так, чтобы навигация по таймлайну осуществлялась таким образом: пользователь наводит непосредственно на область с изображением, зажимает левую кнопку мыши и таким образом перемещается по таймлайну. (в зависимости от того на "левой" или на "правой" части изображения находится курсор). и скорость передвижения по таймлайну зависит от того, насколько близко курсор к краю изображения. так же было бы конечно неплохо, чтобы курсор в левой и правой области изображения отличались. как заменить курсор со стандартного на другой это я знаю, а вот как сделать так, чтобы он еще и в разных областях был неодинаков - для меня вопрос. может у кого скрипт уже готовый есть? или кто ссылочку по этому поводу подкинет? флэш (и уж тем более экшонскрипт) я знаю достаточно посредственно, так что буду признателен за любую информацию по этому поводу. |
_xmouse
_ymouse это координаты твоей мышки... можешь менять курсор в зависимости от них... для движения можешь взять и на onEnterFrame повесить код который будет постоянно менять полложение мувика... те твоя задача высчитать скорость мувика исходя из координат мышки... так если мышка правее скорость положительная если левее отрицательна... |
any_mc.onEnterFrame = function() {
speed = (200-_xmouse); this._x += speed; }; самый примитивный способ... any_mc мувик который крутим... 200 эт ширина мувика... сам поменяешь... плюс те нада проверять не дошёл ли мувик до конца... |
Прошу прощения, а можно более конкретно. К сожалению многие моменты, касающиеся интерактива для меня пока достаточно туманны. Книженция тоже пока не дает достаточного представления.
Подразумевалось (по поводу таймлайна) что у меня в сцене, в первом кадре лежит собраный мувиклип? Или анимация лежит прямо в корне сцены? Тогда куда вставлять предложенный скрипт? (я его втсавил и any_mc изменил на 01_mc (01 - название мувиклипа) - флэш начал выдавать ошибку... или я неправильно понял что any - это имя мувиклипа на который этот скрипт цепляется?) Как из вешенаписанного понятно, буду признателен за ссылки на туториалы, касающиеся заданых вопросов. Спасибо за внимание. |
To A-G. Mix-er дал тебе скрипт, который будет перемещать мув по горизонтали. Он хоть и простенький, но работать будет. Для этого тебе нужно:
1.Загнать свои фотки в мувиклип, выложив их вряд. 2.Поместить клип на таймлайн. 3.Залинковаать клип в панели свойств (в данном случае имя any_mc). 4.Поместить на рабочем столе в ключевой кадр отдельного слоя скрипт, заменив в нем: вместо 200 - ПОЛОВИНУ ширины ФЛЕШКИ. А так советую тебе еще поработать с параметром speed для более плавного перемещения. А для чего тебе нужно кликать по фоткам я так и не понял :\ |
ему по кадрам надо ходить.........
|
проедься по хелпу
|
вот именно - ездить нужно по таймлайну. (потому что это не совсем панорама)
а насчет "кликать по фоткам": кликать я хотел не то чтобы по фоткам, а по области с изображением. ну, можно еще выразиться так: над изображением лежат "две невмдимые кнопки" - одна слева, одна справа. вместе они размером с изображение. при нажатии на одну таймлайн перемещается в одну сторону, а при надатии на другую - в другую сторону. примерно так. |
да по хэлпу-то конечно можно. можно и по имеющейся у меня библии. да только вот трудно даются мне самостоятельно такие дела - туго у меня с програмированием...
вот я и подумал что быстрее будет у знающих людей узнать, чем хэлпы и книжки грызть. |
вешай на одну кнопку on(press){ nextFrame} а на другую on(press){ prevFrame}
|
panorama.allow_move=false;
panorama.acceleration=30; panorama_mover={} panorama_mover.onMouseDown=function(){ _root.panorama.allow_move=true; } panorama_mover.onMouseUp=function(){ _root.panorama.allow_move=false; } Mouse.addListener(panorama_mover); panorama.onEnterFrame=function(){ if (!this.allow_move) return 0; if((_root._xmouse>Stage.width/2) && (Math.abs(this._x)<(this._width-Stage.width))) this._x-=(_root._xmouse-Stage.width/2)/this.acceleration; if(((_root._xmouse<Stage.width/2)) && this._x<0) this._x+=(Stage.width/2-_root._xmouse)/this.acceleration; } --------------------------------------- 1. создаешь мувик панорамы panorama 2. центрируешь на сцене 3. ctrl+enter |
mouse_left._visible=mouse_right._visible=false;
panorama.allow_move=false; panorama.acceleration=10; //-------------------------------------------- panorama_mover={} panorama_mover.onMouseDown=function(){ Mouse.hide(); _root.panorama.allow_move=true; } panorama_mover.onMouseUp=function(){ Mouse.show(); mouse_left._visible=mouse_right._visible=false; _root.panorama.allow_move=false; } Mouse.addListener(panorama_mover); //-------------------------------------------- doMouseCursor=function(dir){ (dir=="left") ? _root.mouse_right._visible=false : _root.mouse_left._visible=false with(_root["mouse_"+dir]){ _visible=true; _x=_root._xmouse; _y=_root._ymouse; } } //-------------------------------------------- panorama.onEnterFrame=function(){ if (!this.allow_move) return 0; if((_root._xmouse>Stage.width/2) && (Math.abs(this._x)<(this._width-Stage.width))){ this._x-=(_root._xmouse-Stage.width/2)/this.acceleration; doMouseCursor("right"); } if(((_root._xmouse<Stage.width/2)) && this._x<0){ this._x+=(Stage.width/2-_root._xmouse)/this.acceleration; doMouseCursor("left"); } } stop(); //---------------------------------------------- mouse_left, mouse_right - мувики для замещения указателя мыши при движении ее влево/вправо соответственно |
Спасибо, Dimchansky.
1. Попробовал скрипты, но это похоже не совсем то, что мне нужно - этот скрипт делает панораму, по мувиклипу по его "плоскости", не подразумевая, что в мувиклипе есть динамика. Мне же нужно, чтобы все происходило именно так (я про управление мышкой), но чтобы с помощью мышки можно было бы ездить не по мувиклипу (склееной панораме), а по таймлайну мувиклипа. Дело в том, что мой мувиклип только сначала собранная панорама, а потом фотки динамически сменяются - две фотки одновременно масштабируются, перемещаются относительно исходного положения, одна сменяется на другую (через прозрачность). Это что-то типа влета в глубь кадра. Так что просто статичная задвиганая панорамная картинка здесь не прокатит. (есть анимированная динамика). Надеюсь я понятно объяснил. Нет ли возможности может быть что-то подправить в этом коде, чтобы ездить именно по таймлайну? 2. А с мышкой у меня чего-то не вышло... Куда нужно вставлять этот код? Пробовал вставлять в фрэйм в композиции. Пробовал затаскивать два мувиклипа курсоров (левый, правый) на разные слои и в каждый вставлять этот скрипт. Короче чего-то не понял я как прикрутить этот скрипт... П.с. Ну не програмист я похоже... =) |
Вложений: 1
Ну что Вы воду в ступе толчёте.....
Всё проще простого - MovieClip.prototype.dv_fr = function() { this.stop(); var fr_w = Math.ceil(Stage.width/this._totalframes); this.onMouseMove = function() { this.gotoAndStop(Math.ceil(_root._xmouse/fr_w)); }; }; mc.dv_fr(); |
приветствую штрек.
может я что-то конечно нетак сделал, но у меня не заработал данный вами скрипт. и, кстати сказать, судя по ролику в зипе - это совершенно не то, что мне нужно - этот скрипт трансформирует стороны векторного прямоугольника... какое отношение это имеет к интерактвному движению по таймлайну? |
тяжелый случай.....
вместо 40ка кадров твина поставь что тебе надо.......... |
Штрек, айм сорри - чего-то я не заметил, что там в символе таймлайн. а скрипт вставил - чего-то он у меня не заработал - вот я и подумал что это не то.
Короче подставил я свой ролик - заработал. Только в этом скрипте движение зацеплено, как я понял "за пиксели" - т.е. грубо говоря - 1 px = 1 кадр (или что-то типа того). А у меня задача, чтобы при нажатии мышкой на левую/правую область флэшки, ролик с плавным началом начинал проигрываться. И насколько ближе/дальше мышка (зажатая) к левой/правой области кадра - настолько быстро/медленно проигрывается ролик. А, кстати сказать ролик у меня не очень-то короткий - с данным вами скриптом мне приходилось уводить мышу значительно за рамки ролика - не фасон. |
не, я понять не могу, почему ты так цепляешься за движение по таймлайну? ведь проще во много раз все твои фотки в мувик загнать и гонять их туда-сюда сколько влезет?
|
Цитата:
|
бармалей: что вы подразумеваете под "ведь проще во много раз все твои фотки в мувик загнать и гонять их туда-сюда сколько влезет?" ??? если склеить из фоток панораму - то не подойдет (читайте выше).
штрек: ну в принципе я и об этом выше писал: ролик (горизонтальный) как бы поделен на две равные части - левую и правую. нажимая (и оставляя зажатой) мышью на эти области, пользователь двигается вперед или назад по таймлайну - проигрывается ролик. в зависимости от того насколько близко курсор к краю ролика (левому/правому) - настолько быстро проигрывается ролик (вперед/назад). грубо говоря это примерно то же самое что реально таскать головку по таймлайну в проекте (во флэше естественно). надеюсь теперь стало понятнее. |
Всем привет! Встречайте нового пользователя. Мне вот поставили подобную задачу (самый простой скрипт) подошёл но надо решить ещё одну проблему. Как сделать так чтобы этот мувик был зацыкленным (чтобы за последним кадром плёнки появлялся снова первый)?
И при roll over движение прекращялось. Заранее благодарен! |
Вложений: 1
Вот файл , а то чего нужно добиться размещено на umc.ua
|
To A-G:
Штрек молодец!!! Правильно все тебе сказал. Т.е. он дал сам принцип движения по таймлайну. Я посмотред код Штрека, и чуть его изменил. Т.е можно сделать так: Код:
mc.stop();this.gotoAndStop(fr+N), где N - число кадров, пропорциональное удаленности курсора мыши от центра сцены. Если курсор слева, то N со знаком "-", т.е. отнимаешь кадры от текущего кадра мувика, если справа, то прибавляешь. Как определять растояние мыши от центра сцены уже приводилось выше!!! |
Вложений: 1
С тем как зациклить плёнку разобрался но вот как остановить прокрутку при клике на кнопу и чтоб при rollout движение запустилось? Прошу помощи:o
Код:
на 2м кадре стоит gotoAndPlay (1) |
Seraf, отформатируйте свой код. И забудьте про setProperty.
|
Вложений: 1
Если вы считаете правильным приведённый выше код
Код:
Как останавливать/запускать движение. Лента должна постоянно двигаться но при обращении кпунктам меню останавливаться. |
Seraf, вам замечание за нарушение пункта 3, правил подраздела http://www.flasher.ru/forum/showthread.php?t=79864
Если не исправите, то получите еще одно. |
To Seraf: Вот выше для A-G я приводил пример кода, там сруктура проста - одно событие вызывает оброботчик onEnterFrame, другое его удаляет. Вот и воспользуйся такой схемой.
|
To Mart.in
В ваших со Штреком примерах немного не то. Если посмотрите выложенный мною фильм (pil_plen_val.rar ) то поймёте. Всё находится в одном кадре. Фильм постоянно движется. Чем дальше курсор от центра тем быстрее скорость движения. Проблема только в том что я не могу управлять этим фильмом. А в вашем случае фильм статичеен и только при управлении курсором (press/не press) происходит прокрутка по кадрам. |
To Seraf: смысла объяснять дальше нет, т.к. ты не разобрался. У меня совсем по другому чем у Штрека. У меня два события, одно из них запускает "перемотку" по таймлайну (с помощью onEnterFrame, внутри которого банальный gotoAndStop), а другое удаляет. А вот внутри onEnterFrame отслеживай удаленность курсора, и соответсвенно меняй N. (см. выше)
|
To mart.in
А в вашем случае возможно ускорение перемотки в зависимости от курсора? Я был бы очень благодарен за весь скрипт. Только начинаю программировать и сразу поставили такую сложную задачу:( |
to Seraf: конечно возможно!!! я же говорил что в той структуре, что я приводил, внутри onEnterFrame, где происходит перемотка this.gotoAndStop(fr+N), вычисляешь N пропорционально удаленности его от центра. Т.е. если мувик шириной 550 px, то N =(_root._xmouse-275)*k, здесь k - это какой-нить коэффициент. Т.к., если мышка будет в краю сцены, то за один шаг (onEnterFrame) будет мотаться сразу 275 кадров, в данном случае мувика mc, а это слишком много, поэтому k нужно сделать меньше 1. Можно просто поделить, например: N =(_root._xmouse-275)/25, ну и надо округлить все это дело либо оставить только целую часть: N =Math.ceil((_root._xmouse-275)/25), т.к. gotoAndStop мотает только на целые кадры :))))
Код:
mc.stop(); |
Но только это все равно сырой вариант. Тут нужны будут доработки. Есть главный недостаток: мувик может не "прокрутиться" до конца. Скажем мувик 500 кадров. Ты зажал мышку (не двигая) справа от центра сцены, и N, например, стало равным 75. А так как 500 на 75 не делится, он домотает до 450 кадра и остановится, потому что он не сможет прибавить 75 кадров, когда осталось всего 50. Короче, все в том же onEnterFrame нужно сделать проверку оставшихся до конца кадров (this._totalframes-this.currentframe) с числом N, и когда N станет больше - уравнять его....
|
Спосибо, так гораздо доступнее
|
Вложений: 2
mart.in
Вот посмотри что у меня вышло ...Во первых пришлось ломать голову расставляя кадры так чтобы мув получился цикличным (а надо ваще 12 кадров) и опять же...в твоём примере мув статичен и двигается только когда я зажимаю кнопу и начинаю двигать мышь. От меня же требуется, чтобы наоборот мув сам двигался и просто менялось направлене и скорость в зависимости от положения курсора А ПРИ НАЖАТИИ на 1 из менюшек он ОСТАНОВИЛСЯ. То что в моём примере идеально подходит всё что нужно это остановить функцию при нажатии/наведении на одну из кнопок. Давай уже добъём это дело :away: |
Ну теперь ты меня вообще удивил. Даже не знаю что сказать. Проблема в том, что топ называется "проехаться по таймлайну". А в твоем случае нужно по тамлайну проезжаться-то??? как сначала все пытались A-G объяснить, что загнать надо все в один мув и двигать его по сцене.
|
Ты в своем примере так и делаешь, но путем циклическим переходом на первый кадр, где и выполняется скрипт. Это устаревший подход. Уже давно создано событие onEnterFrame. Короче пока сам не разберешся с onEnterFrame, дальше помогать не буду :)
|
Цитата:
|
| Часовой пояс GMT +4, время: 22:08. |
Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.