2013-05-02 67 views
0

我是AS3的新手& Flash和不知道是否有人可以看看这个测试片。AS3动态加载和自动滚动随机大小Movieclips

在我的Flash文件中,我有许多动画片段随机按动按钮时动态添加到舞台上。所有的动画片段宽度相同,但高度不同,所有动画片段的注册点位于左下角(我在此阶段仅用于测试目的)。

我想要做的是'自动'(而不是使用按钮)从库中向舞台添加一串随机选择的mc's(也就是说mc应该连续添加 - 即一个另一个没有间隙),从舞台顶部向底部垂直向下自动滚动(以永不停止的传送带形式),然后在舞台上不再可见时返回到图书馆。

任何人有任何想法。

//mc's are dynamically loaded & returned to the library 
//mc's have 'export for Actionscript' property 
//mc's have their anchor point placed bottom left 

//stop all 
stop(); 

//Speed of the vertical auto-scroll movement 
var scrollSpeed:uint = 1; 

//auto load random mc from library & place top left corner of stage 

//load random mc via button for test purposes 
McButton.addEventListener(MouseEvent.CLICK,attachMovieclip); 
function attachMovieclip(event:MouseEvent):void{ 

//create a random number for choosing a mc from the array 
var newNumber:int = (Math.random()*14) 

//define the mc's 
var mc1:Red01 = new Red01(); 
var mc2:Red02 = new Red02(); 
var mc3:Red03 = new Red03(); 
var mc4:Orange01 = new Orange01(); 
var mc5:Orange02 = new Orange02(); 
var mc6:Orange03 = new Orange03(); 
var mc7:Yellow01 = new Yellow01(); 
var mc8:Yellow02 = new Yellow02(); 
var mc9:Green01 = new Green01(); 
var mc10:Green02 = new Green02(); 
var mc11:Blue01 = new Blue01(); 
var mc12:Blue02 = new Blue02(); 
var mc13:Purple01 = new Purple01(); 
var mc14:Purple02 = new Purple02(); 

//create an array which holds all the mc's 
var Mcarray:Array = newArray(mc1,mc2,mc3,mc4,mc5,mc6,mc7,mc8,mc9,mc10,mc11,mc12,mc13,mc14); 

//add child (or random mc) to the stage 
addChild(Mcarray[newNumber]); 

//place mc at specific starting point coordinate - i.e. top of the stage 
Mcarray[newNumber].x=0 
Mcarray[newNumber].y=0 

//trace mc random numeric value for test purposes 
trace(newNumber); 

//auto-scroll the randomly chosen mc vertically down the stage 
stage.addEventListener(Event.ENTER_FRAME, moveScroll); 
function moveScroll(e:Event):void{ 
Mcarray[newNumber].y += scrollSpeed; 

//once first mc is completley on stage load the next random mc 

//once a mc has completely left the bottom of the stage return it to the library 
} 
} 

回答

0

关闭我的头顶,所以它可能是一个有点粗糙,但....

开始第一个剪辑,并将其存储在一个“onscreenClips”阵列(将被用于像一个队列):

1.)将“onscreenClips”中的起始剪辑设置为y = - 高度 这会将剪辑的底部对齐到舞台的顶部。

然后你进入框架内环路:

1)移动任何剪辑“onscreenClips”下降速度

2)检查是否在“onscreenClips”的第一个对象已经触底还(y属性等于舞台高度)。如果是这样,请将其从显示中删除(因为它现在不在屏幕上)并且不在队列中。第一个对象始终是队列中的“最老的”。 3)检查“onscreenClips”中的最后一个对象是否已经到达舞台的顶部(y属性已经达到0并且不再是负值)。这意味着顶部边缘与舞台顶部对齐,如果再向下移动,则会出现间隙。如果发生这种情况,则将下一个剪辑集添加到y = -height,然后将其推送到队列中。

4.)继续,直到没有更多的对象添加。然后继续检查步骤2的条件,直到“屏幕快照”数组/队列为空。

+0

非常感谢您的意见,我会给你的想法一个旋转,看看我可以进步多远。 – Attila66 2013-05-02 06:47:25

+0

哎呀,我只是重新读你的问题,我以为你的注册点是左上角。同样的逻辑适用,但将新剪辑的高度更改为0,并检查剪辑是否离屏,y等于(或更大)舞台高度+对象高度。 – mitim 2013-05-02 07:29:16

+0

已添加检查以确定mc的全部高度何时可见&'在舞台上',以及mc的全高度是否不可见&'关闭舞台'且两个功能都正常。 我还添加了一个删除子语句,这样当mc变得不可见时,它将从舞台上移除并返回到库中。这以可视的方式工作(即mc从舞台消失),但根据输出结果,mc(尽管不可见)仍然存在并且在进一步超过可见的阶段极限之后行进。 – Attila66 2013-05-04 03:59:33

0

管理这一个进一步进一步。

已添加检查以确定MC的全高度何时可见&'在舞台上'且MC的完整高度不可见时&'off stage'且两个都正常工作。

我还添加了一个删除子语句,这样当mc变成不可见&后台时,它将从舞台上移除并返回到库中。这以可视方式工作(即,mc从舞台消失),但是,根据输出结果,mc(虽然不可见)看起来仍然存在于进一步超过可见阶段限制的地方。