我试图获得一个更好的解决方案来动画图像,例如淡入滑动到另一个位置,碰到另一个位置淡出,引入一个新图像,淡入,传送到其他位置,让它掉下来,滑出。 / p>
我正在学习使用高级课程的进度,我的设置如下:
1 imgSheet,1 tweenclass,1 displayclass,1 timerclass
因此显示创建holderSprites,从图像表中创建一个位图并将其放在currentholderSprite中,而displayclass会激活一个动画函数,该函数通过触发这些类中的计时器和补间动画来激活持有者。
我知道使用时间轴会是一个更简单的解决方案,但这是出于脚本学习的目的。
现在我的问题是:除了使用switch语句之外,还有更好的解决方案来处理这种动画和数据传递。例如,我可以将tweenvar和timervar传递给类吗? 如果我这样做,我如何处理变量更改它们并调用函数使其成为动画?
脚本中的简单示例:
我发送给位图创建者:
var rCutKongregate:Rectangle=new Rectangle(0,0,400,400);
the bitmap creater makes it a bitmap and places it in a sprite:
public function displayImage(rn:Rectangle, o:Object):void
{
var imgSourceFile:BitmapData=new spriteSheet ;
var imgHolderData=new BitmapData(400,400,true,0x666666);
var rCut:Rectangle=rn;
var pCut:Point=new Point(0,0);
imgHolderData.copyPixels(imgSourceFile, rCut, pCut);
var imgHolder:Bitmap=new Bitmap(imgHolderData);
currentTempSprite.addChild(imgHolder);
}
this is how the animation triggers timers/tweens
switch (loopNumber)
{
case 2 : timersHandling("07"); break;
case 4 : tweensHandling("04"); break;
}
public function tweenHandling(s:String)
{
switch (s) {
case "01" :var sFOTween:Tween=new Tween(object,"alpha",
Strong.easeInOut,1,0,2,true); trace("tween1 started");break;
case "02" :var sFITween:Tween=new Tween(object,"alpha",
Strong.easeInOut,0,1,2,true); trace("tween2 started");break;
public function timersHandling(s:String)
{
var timer01:Timer = new Timer(1000, 1);
var timer02:Timer = new Timer(2000, 1);
var timers:Array = new Array();
timers.push({Object:timer01, name:"timer01"});
timers.push({Object:timer02, name:"timer02"});
switch (s) {
case "01" : timer01.start(); break;
case "02" : timer02.start(); break;
你可能会理解通过以这种方式触发功能来手动制作动画可能是最不成熟的方式,所以可以帮助你。
答案 0 :(得分:0)
"你可以将tweenvar和timervar传递给类吗?" - 是的,您应该这样做,以便在分配后不必跟踪任何变量。 "使用时间表可能是一个更容易的解决方案" - 不,虽然对于自包含的对象(不包含控件,引用的部分和代码),时间轴动画是可以接受的。第三,你在代码中硬编码过多。您可以改为使用它们的数组,根据需要触发和消除它们。实际上,您可能希望查看任何补间框架,Greensock,TweenMax,TweenIO以及可能还有其他框架,它们有可用于学习和使用的源代码,因此您可以了解它们是如何在内部工作的。
答案 1 :(得分:0)
我不确切地知道你想要看到的是什么,但这可以通过greensock补间类非常简单地完成。