PDA

Просмотр полной версии : подпроигрывание анимации...


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

KUZEN
08.07.2005, 11:28
Делаешь мувик с анимацией и ставишь в нём стопы на первом и последнем кадре, дальше вытаскиваешь его на сцену и в первый кадр рута пихаешь код
MovieClip.prototype.p_prevFrame = function() {
this.onEnterFrame = function() {
if (this._currentframe == 1) {
delete this.onEnterFrame;
} else {
this.prevFrame();
}
};
};
mc.onRollOut = function() {
this.p_prevFrame();
};
mc.onRollOver = function() {
this.play();
};

Cornelius
08.07.2005, 14:23
Я создал мувик с вращающимся треугольником и рядом кнопку, на которую и наложил данный скрипт. Вот что мне выдал флэш:

**Error** Scene=Scene 1, layer=Layer 1, frame=1:Line 1: Statement must appear within on handler
movclip.prototype.p_prevFrame = function() {

**Error** Scene=Scene 1, layer=Layer 1, frame=1:Line 10: Statement must appear within on handler
movclip.onRollOut = function() {

**Error** Scene=Scene 1, layer=Layer 1, frame=1:Line 13: Statement must appear within on handler
movclip.onRollOver = function() {

Total ActionScript Errors: 3 Reported Errors: 3

Если что - исходник я приложил. Спасиб ;)

KUZEN
08.07.2005, 14:27
Ты чё тугой написал же в первый кадр рута код пихай, и создавай не кнопку а мувик и обзывай его mc

Cornelius
08.07.2005, 14:34
извини. туплю.
а как еще б сделать, чтоб он, если мышь успели убрать до окончания анимации, доигрывал сначала когда наводишь мышу, а потом сразу переходил на тот кадр, где мышь отводится от клипа.
просто допустим при наведении на кнопку проигрывается одна анимация, а когда убираешь с кнопки анимация проигрывается не назад, а тоже имеет определенную анимацию с определенного кадра. надеюсь, что понятно объяснил!

KUZEN
08.07.2005, 14:36
я вроде всё понял но чё то запутался, пока точно могу сказать что можно, а вот как пока не соображу

Cornelius
08.07.2005, 14:40
флэшка я думаю может только исполнять сценарии в данный момент, но откладывать на определенное время - врядли. хотя я ж видел вроде немало роликов, где был не откат анимации обратно, а доигрывание и дальше уже другая.

Constantine
08.07.2005, 15:14
Это же просто программа, а значит может... Алгоритм, типа такой:
1. При RollOver запускаем анимацию.
2. Если до её окончания наступает событие RollOut не прерываем её, но запоминаем в переменной, что эта фигня произошла.
3. Когда анимация доходит до конца, видим, что значение переменной, например, true -- проигрываем анимацию на RollOut :)

KidsKilla
08.07.2005, 15:16
my_mc.stop();
my_mc.stayAtEnd = false;
my_mc.goForward = function(){
this.onEnterFrame = function(){
this.nextFrame();
if(this._currentframe = this._totalframes){
delete this.onEnterFrame;
if(!this.stayAtEnd) this.goBackward()
}
}
}
my_mc.goBackward = function(){
this.onEnterFrame = function(){
this.nextFrame();
if(this._currentframe = 1){
delete this.onEnterFrame;
if(this.stayAtEnd) this.goForward()
}
}
}
my_mc.onRollOver = function(){
this.stayAtEnd = true;
this.goForward();
}
my_mc.onRollOut = function(){
this.stayAtEnd = false;
this.goBackward();
}

Cornelius
08.07.2005, 15:17
ну ребят, спасиб. гуру просто ;)

Cornelius
08.07.2005, 15:34
не, народ. фигня какая-то получается :( кнопка при наведении и... отведении мыши просто двигается на 1 кадр вперед.
шкала у мувика такая -
с 1-го под 30-ый кадр - анимация при наведении
с 31-го по 40-ый - анимация, когда мышь на кнопке
с 41-го по 60-ый анимация, когда мышь убирается с кнопки.

закинул то, что состряпал с вашим скриптом.

Constantine
08.07.2005, 15:49
Слух, а у тебя в my_mc с 1-30 rollover, а с 30-60 rollout? Странные они какие-то ;)

Cornelius
08.07.2005, 15:56
не, ну это я со скриптом эксперементировал.
а так в принципе пока мыша попала на кнопку в шкале проигрывается вступит. ролик до 30-го кадра, на котором нету стопа, идет дальше до 40-го, где скрипт отправляет его на 30-й и колбасится по кругу до тех пор, пока мышу не унесут с кнопки, тогда он переходит на 41-й и завершает анимацию.

KidsKilla
08.07.2005, 16:14
my_mc.isOver = false;

my_mc.onRollOver = function(){
this.isOver = true;
}
my_mc.onRollOut = function(){
this.isOver = false;
}

внутри my_mc
в 1м кадре
this.stop();

в 40
if(my_mc.isOver){
this.gotoAndPlay(31)
}

в последнем
if(this.isOver){
this.gotoAndPlay(1);
}else{
this.gotoAndStop(1);
}

хз, вродь так...

Жень Шень
08.07.2005, 16:55
Привет!
Так? Смотри мувик.
Главная ошибка в if(что-то == чему-то )

Dimchansky
08.07.2005, 17:43
упс.
и я своих 5 долларов вставлю.

Constantine
08.07.2005, 18:13
просто праздник какой-то :)

Cornelius
08.07.2005, 18:14
Не, ребят, глючат клипы, хотя baton уже близко к тому что хотелось бы.

Неа. Там клип поворачивается постоянно до конца. А надо, чтоб доехал до середины. Если еще мышь надо кнопкой висит, тогда чтоб дальше зациклился, пока не уберут мышу. Тогда он переходит к 41-му кадру.
А в идеале знаете еще что... просто если мышь лежит на клипе, то у него же получается какая-то анимация идет, а следовательно, когда мышу уберут с клипа, то надо, чтобы он доиграл этот цикл и только потом доиграл до конца.
Вот такую ботву в идеале надо.
Если что, то я изменил параметры флэшки, а точнее шкалу подкоректировал у ролика под эту задачу.

Но все равно, спасиб народ ;)

Cornelius
08.07.2005, 18:15
Вообщем, я просто поменял щас флэшку как говорил, где просто четко видны каждые стадии. К предыдущей я, балда, забыл в зацикленном месте анимацию добавить - исправляюсь.

Constantine
08.07.2005, 18:25
Ответ написал раньше, чем увидел ответ :(
Ну так посмотри, тока я замочил с 30 по 41... Наводишь мышу, начинается анимация, если не убираешь -- останавливается, убираешь -- доходит до 60 переходит на 1 и останавливается...
Если не так, то я вообще ни чего не понял! :D
А если нужна анимация в "статические" состояния -- подгрузи мувик в my_mc или досыпь эффектов в 30 кадре onEnterFrame()...

Dimchansky
08.07.2005, 18:48
кгм... мутноватое описание.

Cornelius
11.07.2005, 13:31
baton - почти идеал, только там нету анимации при кадрах от 30 до 40, когда мыша на клипе лежит, и если убрать мышу - начнется анимация окончания, но если еще до окончания проигрывания поднести мышу к клипу, то анимация закончится, но не начнется заново, а застопорится. А по идее она опять должна начать проигрываться.

Peroon
31.07.2005, 14:50
народ, наткнулся тут на ваш топик. у меня похожая проблема.
взял пример отсюда, все работает, но! есть небольшой косяк. при наведении курсора на объект происходит следующее - начавшаяся анимация доходит не до ключевого кадра а до следующего кадра за ключевым. где подправить?

iNils
31.07.2005, 15:12
stop() смести на кадр левее