Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 1.0/2.0 (http://www.flasher.ru/forum/forumdisplay.php?f=93)
-   -   "Проехаться" по таймлайну. (http://www.flasher.ru/forum/showthread.php?t=66330)

A-G 04.07.2005 03:21

"Проехаться" по таймлайну.
 
приветствую.
собрал ролик - в общем-то это определенным образом собранная последовательность фоток. что-то типа фото-панорамы. все это лежит на одном таймлайне. так вот каким образом можно сделать так, чтобы навигация по таймлайну осуществлялась таким образом: пользователь наводит непосредственно на область с изображением, зажимает левую кнопку мыши и таким образом перемещается по таймлайну. (в зависимости от того на "левой" или на "правой" части изображения находится курсор). и скорость передвижения по таймлайну зависит от того, насколько близко курсор к краю изображения.
так же было бы конечно неплохо, чтобы курсор в левой и правой области изображения отличались. как заменить курсор со стандартного на другой это я знаю, а вот как сделать так, чтобы он еще и в разных областях был неодинаков - для меня вопрос.

может у кого скрипт уже готовый есть? или кто ссылочку по этому поводу подкинет? флэш (и уж тем более экшонскрипт) я знаю достаточно посредственно, так что буду признателен за любую информацию по этому поводу.

MIX-er 04.07.2005 06:00

_xmouse
_ymouse
это координаты твоей мышки...
можешь менять курсор в зависимости от них...

для движения можешь взять и на onEnterFrame повесить код который будет постоянно менять полложение мувика... те твоя задача высчитать скорость мувика исходя из координат мышки...
так если мышка правее скорость положительная если левее отрицательна...

MIX-er 04.07.2005 06:12

any_mc.onEnterFrame = function() {
speed = (200-_xmouse);
this._x += speed;
};
самый примитивный способ...

any_mc мувик который крутим...
200 эт ширина мувика... сам поменяешь...
плюс те нада проверять не дошёл ли мувик до конца...

A-G 05.07.2005 03:14

Прошу прощения, а можно более конкретно. К сожалению многие моменты, касающиеся интерактива для меня пока достаточно туманны. Книженция тоже пока не дает достаточного представления.

Подразумевалось (по поводу таймлайна) что у меня в сцене, в первом кадре лежит собраный мувиклип? Или анимация лежит прямо в корне сцены? Тогда куда вставлять предложенный скрипт? (я его втсавил и any_mc изменил на 01_mc (01 - название мувиклипа) - флэш начал выдавать ошибку... или я неправильно понял что any - это имя мувиклипа на который этот скрипт цепляется?)

Как из вешенаписанного понятно, буду признателен за ссылки на туториалы, касающиеся заданых вопросов.

Спасибо за внимание.

Бармалей 05.07.2005 11:33

To A-G. Mix-er дал тебе скрипт, который будет перемещать мув по горизонтали. Он хоть и простенький, но работать будет. Для этого тебе нужно:
1.Загнать свои фотки в мувиклип, выложив их вряд.
2.Поместить клип на таймлайн.
3.Залинковаать клип в панели свойств (в данном случае имя any_mc).
4.Поместить на рабочем столе в ключевой кадр отдельного слоя скрипт, заменив в нем:
вместо 200 - ПОЛОВИНУ ширины ФЛЕШКИ.
А так советую тебе еще поработать с параметром speed для более плавного перемещения.
А для чего тебе нужно кликать по фоткам я так и не понял :\

Штрек 05.07.2005 22:15

ему по кадрам надо ходить.........

Король 05.07.2005 22:21

проедься по хелпу

A-G 06.07.2005 03:16

вот именно - ездить нужно по таймлайну. (потому что это не совсем панорама)
а насчет "кликать по фоткам": кликать я хотел не то чтобы по фоткам, а по области с изображением. ну, можно еще выразиться так: над изображением лежат "две невмдимые кнопки" - одна слева, одна справа. вместе они размером с изображение. при нажатии на одну таймлайн перемещается в одну сторону, а при надатии на другую - в другую сторону. примерно так.

A-G 06.07.2005 03:19

да по хэлпу-то конечно можно. можно и по имеющейся у меня библии. да только вот трудно даются мне самостоятельно такие дела - туго у меня с програмированием...

вот я и подумал что быстрее будет у знающих людей узнать, чем хэлпы и книжки грызть.

KUZEN 06.07.2005 12:21

вешай на одну кнопку on(press){ nextFrame} а на другую on(press){ prevFrame}

Dimchansky 06.07.2005 14:06

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

Dimchansky 06.07.2005 16:11

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 - мувики для замещения указателя мыши при движении ее влево/вправо соответственно

A-G 08.07.2005 03:49

Спасибо, Dimchansky.
1. Попробовал скрипты, но это похоже не совсем то, что мне нужно - этот скрипт делает панораму, по мувиклипу по его "плоскости", не подразумевая, что в мувиклипе есть динамика.
Мне же нужно, чтобы все происходило именно так (я про управление мышкой), но чтобы с помощью мышки можно было бы ездить не по мувиклипу (склееной панораме), а по таймлайну мувиклипа. Дело в том, что мой мувиклип только сначала собранная панорама, а потом фотки динамически сменяются - две фотки одновременно масштабируются, перемещаются относительно исходного положения, одна сменяется на другую (через прозрачность). Это что-то типа влета в глубь кадра. Так что просто статичная задвиганая панорамная картинка здесь не прокатит. (есть анимированная динамика). Надеюсь я понятно объяснил.
Нет ли возможности может быть что-то подправить в этом коде, чтобы ездить именно по таймлайну?

2. А с мышкой у меня чего-то не вышло... Куда нужно вставлять этот код?
Пробовал вставлять в фрэйм в композиции. Пробовал затаскивать два мувиклипа курсоров (левый, правый) на разные слои и в каждый вставлять этот скрипт. Короче чего-то не понял я как прикрутить этот скрипт...

П.с. Ну не програмист я похоже... =)

Штрек 09.07.2005 01:15

Вложений: 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();

A-G 11.07.2005 03:17

приветствую штрек.
может я что-то конечно нетак сделал, но у меня не заработал данный вами скрипт. и, кстати сказать, судя по ролику в зипе - это совершенно не то, что мне нужно - этот скрипт трансформирует стороны векторного прямоугольника...
какое отношение это имеет к интерактвному движению по таймлайну?

Штрек 11.07.2005 17:25

тяжелый случай.....
вместо 40ка кадров твина поставь что тебе надо..........

A-G 12.07.2005 14:03

Штрек, айм сорри - чего-то я не заметил, что там в символе таймлайн. а скрипт вставил - чего-то он у меня не заработал - вот я и подумал что это не то.

Короче подставил я свой ролик - заработал. Только в этом скрипте движение зацеплено, как я понял "за пиксели" - т.е. грубо говоря - 1 px = 1 кадр (или что-то типа того).
А у меня задача, чтобы при нажатии мышкой на левую/правую область флэшки, ролик с плавным началом начинал проигрываться. И насколько ближе/дальше мышка (зажатая) к левой/правой области кадра - настолько быстро/медленно проигрывается ролик.

А, кстати сказать ролик у меня не очень-то короткий - с данным вами скриптом мне приходилось уводить мышу значительно за рамки ролика - не фасон.

Бармалей 12.07.2005 14:26

не, я понять не могу, почему ты так цепляешься за движение по таймлайну? ведь проще во много раз все твои фотки в мувик загнать и гонять их туда-сюда сколько влезет?

Штрек 13.07.2005 00:33

Цитата:

Сообщение от a-g
ролик с плавным началом начинал проигрываться..

по внятней, плиззззззззз

A-G 13.07.2005 02:18

бармалей: что вы подразумеваете под "ведь проще во много раз все твои фотки в мувик загнать и гонять их туда-сюда сколько влезет?" ??? если склеить из фоток панораму - то не подойдет (читайте выше).

штрек: ну в принципе я и об этом выше писал: ролик (горизонтальный) как бы поделен на две равные части - левую и правую. нажимая (и оставляя зажатой) мышью на эти области, пользователь двигается вперед или назад по таймлайну - проигрывается ролик. в зависимости от того насколько близко курсор к краю ролика (левому/правому) - настолько быстро проигрывается ролик (вперед/назад). грубо говоря это примерно то же самое что реально таскать головку по таймлайну в проекте (во флэше естественно).

надеюсь теперь стало понятнее.

Seraf 01.08.2006 15:00

Всем привет! Встречайте нового пользователя. Мне вот поставили подобную задачу (самый простой скрипт) подошёл но надо решить ещё одну проблему. Как сделать так чтобы этот мувик был зацыкленным (чтобы за последним кадром плёнки появлялся снова первый)?
И при roll over движение прекращялось.
Заранее благодарен!

Seraf 01.08.2006 15:05

Вложений: 1
Вот файл , а то чего нужно добиться размещено на umc.ua

mart.in 02.08.2006 09:25

To A-G:
Штрек молодец!!! Правильно все тебе сказал. Т.е. он дал сам принцип движения по таймлайну.
Я посмотред код Штрека, и чуть его изменил. Т.е можно сделать так:
Код:

mc.stop();
MovieClip.prototype.dv_fr = function(){
        this.onEnterFrame = function(){
                var fr = this._currentframe;
                this.gotoAndStop(fr+1);
        }
}
mc.onMouseDown = dv_fr;
mc.onMouseUp = function() {
        delete this.onEnterFrame;
}

В самой функции onEnterFrame определяешь позицию курсора относительно центра сцены и соответсвенно изменяешь this.gotoAndStop(fr+1) , т.е.
this.gotoAndStop(fr+N), где N - число кадров, пропорциональное удаленности курсора мыши от центра сцены. Если курсор слева, то N со знаком "-", т.е. отнимаешь кадры от текущего кадра мувика, если справа, то прибавляешь. Как определять растояние мыши от центра сцены уже приводилось выше!!!

Seraf 02.08.2006 18:06

Вложений: 1
С тем как зациклить плёнку разобрался но вот как остановить прокрутку при клике на кнопу и чтоб при rollout движение запустилось? Прошу помощи:o

Код:


x = _xmouse-500;
setProperty("rol", _x, Y);
Y = Y-(X/100);

if (Number(Y)>0) {
        Y = Y-1000;
}
if (Number(Y)<100) {
        Y = Number(Y)+1000;}

rol - название мува с плёнкой
на 2м кадре стоит gotoAndPlay (1)

iNils 02.08.2006 18:13

Seraf, отформатируйте свой код. И забудьте про setProperty.

Seraf 02.08.2006 18:37

Вложений: 1
Если вы считаете правильным приведённый выше код

Код:


rol.onEnterFrame = function() {
speed = (500-_xmouse);
this._x += speed/25;
}

То опять же я никак не могу разобраться как управлять этой функцией...
Как останавливать/запускать движение. Лента должна постоянно двигаться но при обращении кпунктам меню останавливаться.

iNils 02.08.2006 19:00

Seraf, вам замечание за нарушение пункта 3, правил подраздела http://www.flasher.ru/forum/showthread.php?t=79864
Если не исправите, то получите еще одно.

mart.in 03.08.2006 06:56

To Seraf: Вот выше для A-G я приводил пример кода, там сруктура проста - одно событие вызывает оброботчик onEnterFrame, другое его удаляет. Вот и воспользуйся такой схемой.

Seraf 03.08.2006 13:33

To Mart.in
В ваших со Штреком примерах немного не то. Если посмотрите выложенный мною фильм (pil_plen_val.rar ) то поймёте. Всё находится в одном кадре. Фильм постоянно движется. Чем дальше курсор от центра тем быстрее скорость движения. Проблема только в том что я не могу управлять этим фильмом. А в вашем случае фильм статичеен и только при управлении курсором (press/не press) происходит прокрутка по кадрам.

mart.in 04.08.2006 12:36

To Seraf: смысла объяснять дальше нет, т.к. ты не разобрался. У меня совсем по другому чем у Штрека. У меня два события, одно из них запускает "перемотку" по таймлайну (с помощью onEnterFrame, внутри которого банальный gotoAndStop), а другое удаляет. А вот внутри onEnterFrame отслеживай удаленность курсора, и соответсвенно меняй N. (см. выше)

Seraf 04.08.2006 20:49

To mart.in
А в вашем случае возможно ускорение перемотки в зависимости от курсора? Я был бы очень благодарен за весь скрипт. Только начинаю программировать и сразу поставили такую сложную задачу:(

mart.in 07.08.2006 07:23

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();
MovieClip.prototype.dv_fr = function(){
this.onEnterFrame = function(){
var fr = this._currentframe;
var N =Math.ceil((_root._xmouse-275)/25);// добавилась только эта строка
this.gotoAndStop(fr+N);
}
}
mc.onMouseDown = dv_fr;
mc.onMouseUp = function() {
delete this.onEnterFrame;
}

Блин... в коде который я приводил надо было дописать всего одну строку, а ты не можешь разобраться?!?!?

mart.in 07.08.2006 09:38

Но только это все равно сырой вариант. Тут нужны будут доработки. Есть главный недостаток: мувик может не "прокрутиться" до конца. Скажем мувик 500 кадров. Ты зажал мышку (не двигая) справа от центра сцены, и N, например, стало равным 75. А так как 500 на 75 не делится, он домотает до 450 кадра и остановится, потому что он не сможет прибавить 75 кадров, когда осталось всего 50. Короче, все в том же onEnterFrame нужно сделать проверку оставшихся до конца кадров (this._totalframes-this.currentframe) с числом N, и когда N станет больше - уравнять его....

Seraf 07.08.2006 13:17

Спосибо, так гораздо доступнее

Seraf 07.08.2006 14:04

Вложений: 2
mart.in
Вот посмотри что у меня вышло ...Во первых пришлось ломать голову расставляя кадры так чтобы мув получился цикличным (а надо ваще 12 кадров) и опять же...в твоём примере мув статичен и двигается только когда я зажимаю кнопу и начинаю двигать мышь. От меня же требуется, чтобы наоборот мув сам двигался и просто менялось направлене и скорость в зависимости от положения курсора А ПРИ НАЖАТИИ на 1 из менюшек он ОСТАНОВИЛСЯ.
То что в моём примере идеально подходит всё что нужно это остановить функцию при нажатии/наведении на одну из кнопок. Давай уже добъём это дело :away:

mart.in 08.08.2006 08:26

Ну теперь ты меня вообще удивил. Даже не знаю что сказать. Проблема в том, что топ называется "проехаться по таймлайну". А в твоем случае нужно по тамлайну проезжаться-то??? как сначала все пытались A-G объяснить, что загнать надо все в один мув и двигать его по сцене.

mart.in 08.08.2006 08:35

Ты в своем примере так и делаешь, но путем циклическим переходом на первый кадр, где и выполняется скрипт. Это устаревший подход. Уже давно создано событие onEnterFrame. Короче пока сам не разберешся с onEnterFrame, дальше помогать не буду :)

www.capcipa.ru 18.08.2006 07:09

Цитата:

Сообщение от mart.in
Ты в своем примере так и делаешь, но путем циклическим переходом на первый кадр, где и выполняется скрипт. Это устаревший подход. Уже давно создано событие onEnterFrame. Короче пока сам не разберешся с onEnterFrame, дальше помогать не буду :)

где можно скачать это событие?


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

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