PDA

Просмотр полной версии : анимация в классе


reqyzik
26.03.2015, 15:51
пишу класс:
package
{
import flash.display.MovieClip;
import flash.events.MouseEvent;
import flash.events.Event;
import flash.display.DisplayObject;

import fl.motion.AnimatorFactory;
import fl.motion.MotionBase;
import fl.motion.Motion;
import flash.filters.*;
import flash.geom.Point;

public class IList extends MovieClip
{
private var go:Boolean = false;
var ent1 = new MovieClip;

public function IList()
{
InitAnimation();

addEventListener(MouseEvent.MOUSE_OVER,_onMouseOver);
addEventListener(MouseEvent.MOUSE_OUT,_onMouseOut);
addEventListener(Event.ENTER_FRAME,_onEnterFrame);
}

function _onMouseOver(event:MouseEvent):void
{
if(!go)
{
parent.setChildIndex(this,parent.numChildren-1);
go = true;
}
}

private function _onMouseOut(event:MouseEvent):void
{
go = false;
}

private function _onEnterFrame(e:Event):void
{
if(go)
nextFrame();
else
prevFrame();
}

function InitAnimation():void
{

ent1.graphics.lineStyle(1,0x000000);
ent1.graphics.beginFill(0xCCFF00 );
ent1.graphics.drawRect (0,0,150,50);
addChild(ent1);
ent1.name = "ent1";

var __motion_Flag1:MotionBase;
if(__motion_Flag1 == null)
{
__motion_Flag1 = new Motion();
__motion_Flag1.duration = 9;
__motion_Flag1.addPropertyArray("y", [0,2,4,6,8,10,12,14,16]);

var __animFactory_Flag1:AnimatorFactory = new AnimatorFactory(__motion_Flag1);
__animFactory_Flag1.transformationPoint = new Point(0.500000, 0.500000);

__animFactory_Flag1.addTarget(ent1, 0);
}
}
}
}

ent1 рисуется, но анимация почему - то не срабатывает, подскажите пожалуйста в чем я не прав?

dimarik
26.03.2015, 20:47
Скорее всего анимация после создания тут же удаляется после выходя из области видимости метода InitAnimation, потому что ссылка на нее объявлена локальной.

reqyzik
26.03.2015, 21:53
спасибо, с этим разобрался:

package
{
import flash.display.MovieClip;
import flash.events.MouseEvent;
import flash.events.Event;
import flash.display.DisplayObject;

import fl.motion.AnimatorFactory;
import fl.motion.MotionBase;
import fl.motion.Motion;
import flash.filters.*;
import flash.geom.Point;
import flash.display.Sprite;

public class IList extends MovieClip
{
private var go:Boolean = false;
private var motionBase:MotionBase;
private var animFactory:AnimatorFactory;
private var size:uint = 100;
private var bgColor:uint = 0xFFCC00;

public function IList()
{
addEventListener(MouseEvent.MOUSE_OVER,_onMouseOver);
addEventListener(MouseEvent.MOUSE_OUT,_onMouseOut);
addEventListener(Event.ENTER_FRAME,_onEnterFrame);

var boxObj:Sprite = new Sprite();
boxObj.graphics.beginFill(bgColor);
boxObj.graphics.drawRect(0, 0, size, size);
boxObj.graphics.endFill();
boxObj.name "frgfrt";
addChild(boxObj);

if(motionBase == null)
{
motionBase = new Motion();
motionBase.duration = 17;
motionBase.addPropertyArray("y",[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16]);
animFactory = new AnimatorFactory(motionBase);
animFactory.transformationPoint = new Point(0.5,0.5);
animFactory.addTarget(boxObj, 0);
}
}

function _onMouseOver(event:MouseEvent):void
{
if(!go)
{
parent.setChildIndex(this,parent.numChildren-1);
go = true;
}
}

private function _onMouseOut(event:MouseEvent):void
{
go = false;
}

private function _onEnterFrame(e:Event):void
{
if(go)
nextFrame();
else
prevFrame();
trace(currentFrame);
}
}
}

теперь другой вопрос:

почему анимация воспроизводится беспорядочно с непонятной скоростью, и как мне работать с ней?

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

Добавлено через 23 часа 27 минут
немного переделал класс, но по прежнему не знаю как управлять анимацией, созданной таким способом:

package
{
import flash.display.MovieClip;
import flash.events.MouseEvent;
import flash.events.Event;
import flash.display.DisplayObject;

import fl.motion.AnimatorFactory;
import fl.motion.MotionBase;
import fl.motion.Motion;
import flash.filters.*;
import flash.geom.Point;
import flash.display.Sprite;
import fl.motion.MotionEvent;

public class IList extends MovieClip
{
private var go:Boolean = false;
private var motionBase:MotionBase;
private var animFactory:AnimatorFactory;
private var size:uint = 100;
private var bgColor:uint = 0xFFCC00;

public function IList()
{
var boxObj = new MovieClip();
boxObj.graphics.beginFill(bgColor);
boxObj.graphics.drawRect(0, 0, size, size);
boxObj.graphics.endFill();
addChild(boxObj);

if(motionBase == null)
{
motionBase = new Motion();
motionBase.duration = 32;
motionBase.addPropertyArray("y",[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1]);
motionBase.overrideTargetTransform();
animFactory = new AnimatorFactory(motionBase);
animFactory.transformationPoint = new Point(0.5,0.5);
animFactory.addTarget(boxObj, 0);
}
}

}
}

на обычные stop() не реагирует, воспроизводится без остановки
метод addFrameScript(1,funct) тоже не работает

честное слово, я в тупике и мне нужна помощь

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


вопрос решен, добавлением
таких строк:
private var animBase:AnimatorBase = new AnimatorBase();
animBase = animFactory.addTarget(boxObj, 0);

спасибо всем, можно тему закрывать