我有一个timerEvent,可以在舞台上添加25个动画片段并从x:0,y:0动画它们,这一切都正常!我想要做的是为每个影片剪辑分配比上一个添加到舞台的movieClip多25px的值。我做了一点测试,试图在每次定时器循环时增加一个数值,但它没有增加。我也应该使用for循环/数组吗?
提前致谢。 城野
import flash.events.*;
import caurina.transitions.*;
bringItemsOn();
var itemTimer:Timer;
function bringItemsOn():void {
itemTimer=new Timer(300);
itemTimer.addEventListener(TimerEvent.TIMER,itemTimer_tick);
itemTimer.start();
}
function itemTimer_tick(e:TimerEvent):void {
itemTimer.currentCount-1;
var mc:MovieClip = new MovieClip();
mc.graphics.beginFill(Math.random() * 0x000000);
mc.graphics.drawRect(0,0,stage.stageWidth,25);
mc.x=0;
mc.y=0;
addChild(mc);
Tweener.addTween(mc,{y:Math.random()*1000 - 500,
x:0,
time:.9,
transition:"easeOutExpo"});
if (itemTimer.currentCount>=25) {
itemTimer.removeEventListener(TimerEvent.TIMER,itemTimer_tick);
}
}
答案 0 :(得分:3)
老实说,我最初会用for循环设置这一切。完成for循环后,相应地放置每个项目,然后使用TweenLite或您喜欢的补间包。
package
{
import flash.display.Sprite;
import flash.events.Event;
import gs.TweenLite;
import gs.easing.*;
public class ExampleDocumentClass extends Sprite
{
if(stage) _init();
else addEventListener(Event.ADDED_TO_STAGE, _init(), false, 0, true);
}
private function _init(e:Event =null):void
{
for(var i:int = 0; i < 25; i++)
{
var mc:MovieClip = new MovieClip();
mc.graphics.beginFill(Math.random() * 0x000000);
mc.graphics.drawRect(0,0,stage.stageWidth,25);
//Seperates them by 25, their width, so they will touch.
mc.x= i * 25; //i * 25 + 1 leaves a space in between.
mc.y=0;
addChild(mc);
TweenLite.to(mc, 0.9, {y:math.random()*1000-500, x: 0, ease: Expo.easeOut});
if(i == 24) //Total length - 1
{
//The loop ended.
}
}
}
重要的是要注意屏幕更新不会发生在代码块中,例如for和while循环。你不能以我所展示的方式相互间隔这些,因为即使先前的项目x可能刚刚被设置,它也没有被绘制到屏幕上;为了构建一个系统,其中所有图像的宽度都不一样,但必须一个接一个地开始,我们必须等待Event.COMPLETE事件为给定的加载器触发,以便我们可以访问它的宽度和其他属性。既然你只想将它们分开25个像素,它们的大小相同,我们只需用“i”来分隔它们
发生了什么事: i * 25 = 0; 我++; 我* 25 = 25; 我++; 我* 25 = 50;
你可以看到我们已经达到了我们想要的间距。
布莱恩霍奇 hodgedev.com blog.hodgedev.com答案 1 :(得分:2)
使用它:
import flash.events.*;
import caurina.transitions.*;
bringItemsOn();
var extra:int = 0;
var itemTimer:Timer;
function bringItemsOn():void {
itemTimer=new Timer(300);
itemTimer.addEventListener(TimerEvent.TIMER,itemTimer_tick);
itemTimer.start();
}
function itemTimer_tick(e:TimerEvent):void {
itemTimer.currentCount-1;
var mc:MovieClip = new MovieClip();
mc.graphics.beginFill(Math.random() * 0x000000);
mc.graphics.drawRect(0,0,stage.stageWidth,25);
mc.x += extra;
mc.y=0;
extra = mc.width;
/*u can use mc's width for different x value's or
make ur own like extra += 10; each mc.x will be different */
addChild(mc);
Tweener.addTween(mc,{y:Math.random()*1000 - 500,
x:0,
time:.9,
transition:"easeOutExpo"});
if (itemTimer.currentCount>=25) {
itemTimer.removeEventListener(TimerEvent.TIMER,itemTimer_tick);
}
}
答案 2 :(得分:0)
没有真正找到您尝试增加变量或将25px添加到y的部分,但请尝试以下操作:
function itemTimer_tick(e:TimerEvent):void {
...
mc.y = itemTimer.currentCount * 25;
addChild(mc);
...
}
答案 3 :(得分:0)
我真的不同的方法可能是使用delay
方法的Tweener.addTween
属性。启动所有影片剪辑并稍微增加每个影片的延迟?