Просмотр полной версии : последовательность действий
как с помощью програмной анимации задать последовательность действи? если с помощью if то скажите что не правильно:
mc._x = 0
mc._y = 0
this.onEnterFrame = function() {
if (mc._x<par1 || mc._x>par1) {
mc._x = mc._x+(par1-mc._x)*0.211;
}
par1 = 0;
if (par1 = 0) {
_xscale+=1;
_yscale+=1;
}
}
то есть мувик должен сначала идти по оси Х, остановиться, а потом становиться больше по осям Х и У
Fernando Costa
13.12.2007, 20:24
mc._x = 0
mc._y = 0
var par = 0;
mc.onEnterFrame = function() {
par++
if (par<=20) this._x+=5
if (par > 20) {
this._xscale+=1;
this._yscale+=1;
}
}:victory:
koIIImarik
13.12.2007, 20:34
Вот урок по программной анимации:
http://www.flashist.ru/2007/11/05/programmnaya-animaciya-i-ne-tolko%e2%80%a6/
Чтобы отследить окончание одного движения и задать, соответственно, в этот момент другое нужно использовать событие onMotionFinished, речь идёт о классе Tween, если не понятно пройдите по ссылке, или воспользуйтесь поиском на форуме тут.
import mx.transitions.Tween;
import mx.transitions.easing.*;
//
obj_mc.varTween = new Tween(obj_mc, "_x", false, 100, 200, 1, true);
obj_mc.varTween.onMotionFinished = function() {
trace("Закончилось движение по оси X");
trace(this.obj);
this.obj.varTweenXScale = new Tween(this.obj, "_xscale", false,100, 200, 1, true);
this.obj.varTweenYScale = new Tween(this.obj, "_yscale", false, 100, 200, 1, true);
};
Пробуй.
На рабочем поле должен быть создан obj_mc Moive Clip.
mc._x = 0
mc._y = 0
var par = 0;
mc.onEnterFrame = function() {
par++
if (par<=20) this._x+=5
if (par > 20) {
this._xscale+=1;
this._yscale+=1;
}
}:victory:
а как допустим отсановить анимацию при достижении определенной ширины?
koIIImarik
13.12.2007, 22:26
Советую использовать мой пример, там можно чётко указать размер _xscale/_yscale до которого должна происходить анимация. Хотя смотрите сами.
FourSide
14.12.2007, 10:53
if (par1 = 0) {...}
Заодно про ошибку - вы не сравниваете в этом условии. Вы просто в операторе if присваиваете новое значение переменной par1.
Fernando Costa
14.12.2007, 13:33
2 CROL, кстати советую приглянуться вам к коду кошмарика, я просто сделал ваш код работающим. Но лучше все-равно для таких целей пользоваться классом Tween, TweenLite или Tweener
CrazyFlasher
14.12.2007, 13:55
2 CROL, кстати советую приглянуться вам к коду кошмарика, я просто сделал ваш код работающим. Но лучше все-равно для таких целей пользоваться классом Tween, TweenLite или Tweener
ну не надо людей сразу учить пользоваться тупыми классами и компонентами...пусть для саморазвития сам пишит, а если вопросы - задаёт
да, я понял что пример с классами использовать проще, но не понял до конца как... вот у меня прошла эта анимация:
obj_mc.varTween = new Tween(obj_mc, "_x", Regular.easeOut, -100, 50, 0.5, true);
obj_mc.varTween.onMotionFinished = function() {
new Tween(obj_mc, "_x", Regular.easeOut, 50, 10, 0.35, true);
this.obj.varTweenXScale = new Tween(this.obj, "_xscale", false,100, 110, 0.3, true);
this.obj.varTweenYScale = new Tween(this.obj, "_yscale", false, 100, 110, 0.3, true);
} как добавить после этого еще 1 действие к obj_mc, и как после анимации obj_mc начать анимацию obj_mc2 допустим тот же Tween по _x??
и объясните пожалусто разницу между Tween, TweenLite или Tweener =|
koIIImarik
15.12.2007, 00:13
как добавить после этого еще 1 действие к obj_mc, и как после анимации obj_mc начать анимацию obj_mc2 допустим тот же Tween по _x??
obj_mc.varTween.onMotionFinished = function() {
new Tween(obj_mc, "_x", Regular.easeOut, 50, 10, 0.35, true);
this.obj.varTweenXScale = new Tween(this.obj, "_xscale", false,100, 110, 0.3, true);
this.obj.varTweenYScale = new Tween(this.obj, "_yscale", false, 100, 110, 0.3, true);
//ЕЩЁ ОДНО ДЕЙСТВИЕ к obj_mc
this.obj.varTweenWidth = new Tween(this.obj, "_width", false, 100, 200, 0.3, true);
//ДЕЙСТВИЕ для obj2_mc, если оно находится на _root
_root.obj2_mc.varTweenX = new Tween(this.obj, "_x", false, 100, 200, 0.3, true);
}
import mx.transitions.Tween;
import mx.transitions.easing.*;
//
name1.varTween = new Tween(name1, "_x", Regular.easeOut, -100, 20, 0.5, true);
name1.varTween.onMotionFinished = function() {
name2.varTween = new Tween(name2, "_x", Regular.easeOut, -100, 20, 0.5, true);
};
name2.varTween.onMotionFinished = function() {
name3.varTween = new Tween(name3, "_x", Regular.easeOut, -100, 20, 0.5, true);
};
name3.varTween.onMotionFinished = function() {
name4.varTween = new Tween(name4, "_x", Regular.easeOut, -100, 20, 0.5, true);
};
name4.varTween.onMotionFinished = function() {
name5.varTween = new Tween(name5, "_x", Regular.easeOut, -100, 20, 0.5, true);
};
низнаю как сделать правильно =/
по идее должно получится следующее:
сначала везжает name1, потом name2, потом name3....name4...name5
koIIImarik
15.12.2007, 01:49
Все onMotionFinished кроме первой не сработают, т.к. вы не создали для них Tween объекта, читайте комментарии к коду в исходниках, которые выложены на страницах, ссылки на которые я вам дал в самом начале.
можно вас попросить написать код так, чтоб правильно было, не дано мне понять это.=(
koIIImarik
15.12.2007, 03:23
import mx.transitions.Tween;
import mx.transitions.easing.*;
//
obj1_mc.varTween = new Tween(obj1_mc, "_x", Regular.easeOut, -100, 20, 0.5, true);
obj1_mc.varTween.onMotionFinished = function() {
obj2_mc.varTween = new Tween(obj2_mc, "_x", Regular.easeOut, -100, 20, 0.5, true);
obj2_mc.varTween.onMotionFinished = function() {
obj3_mc.varTween = new Tween(obj3_mc, "_x", Regular.easeOut, -100, 20, 0.5, true);
obj3_mc.varTween.onMotionFinished = function() {
obj4_mc.varTween = new Tween(obj4_mc, "_x", Regular.easeOut, -100, 20, 0.5, true);
obj4_mc.varTween.onMotionFinished = function() {
obj5_mc.varTween = new Tween(obj5_mc, "_x", Regular.easeOut, -100, 20, 0.5, true);
};
};
};
};
koIIImarik, а если твинов будет двадцать?
koIIImarik
15.12.2007, 20:40
koIIImarik, а если твинов будет двадцать?
Ваше предложение?
import mx.transitions.Tween;
import mx.transitions.easing.*;
//
var current:Number=0;
var animations:Array = [{prop:"_x",begin:0,change:200,_duration:1},
{prop:"_height",begin:100,change:50,_duration:.5},
{prop:"_y",begin:300,change:-100,_duration:3},
{prop:"_x",begin:100,change:200,_duration:.1},
{prop:"_width",begin:50,change:200,_duration:5}];
var mc:MovieClip = rct(this,100,100,Math.random()*0xffffff,100);
mc._x = Stage.width/2-50;
mc._y = Stage.height/2-50;
mc.onRelease = function():Void {
_root.onMotionFinished();
}
var lo:Object = saveMCprops(mc);
var __tw:Tween = new Tween(mc,"",Back.easeOut, 0, 100, 1, true);
__tw.stop();
__tw.addListener(this);
onMotionFinished = function(){
if(current<animations.length){
__tw["_duration"] = animations[current]._duration;
__tw.begin = animations[current].begin;
__tw.change = animations[current].change;
__tw.prop = animations[current].prop;
current++;
__tw.start();
} else {
current = 0;
resoreMCprops(mc,lo);
onMotionFinished();
}
}
function rct(mc:MovieClip,w:Number,h:Number,c:Number,a:Number):MovieClip{
var _mc:MovieClip = mc.createEmptyMovieClip("rct"+mc.getNextHighestDepth(),mc.getNextHighestDepth());
_mc.beginFill(c,a);
_mc.moveTo(0,0);
_mc.lineTo(w,0);
_mc.lineTo(w,h);
_mc.lineTo(0,h);
_mc.lineTo(0,0);
_mc.endFill();
return _mc;
}
function saveMCprops(mc:MovieClip):Object {
var r_o:Object ={_x:mc._x,
_y:mc._y,
_height:mc._height,
_width:mc._width,
_alpha:mc._alpha}
return r_o;
}
function resoreMCprops(mc:MovieClip,o:Object):Void {
for(var i in o){
mc[i] = o[i];
}
}
Ну, вот, простой пример конвеера... не то, чтобы, опять же прям супер-пупер, но с пивом покатит %)
koIIImarik
17.12.2007, 21:37
2 __etc:
Первый раз услышал о таком понятии, если честно. Спасибо.
2 wvxvw:
Спасибо большое за пример
Работает на vBulletin ® версия 3.7.3. Copyright ©2000-2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 1999-2008 Flasher.ru. All rights reserved.