2013-05-02 2 views
0

Я очень новичок в AS3 & Flash и интересно, может ли кто-нибудь взглянуть на этот образец теста.AS3 Динамическая загрузка и автопрокрутка Случайный размер Movieclips

Внутри моего Flash-файла у меня есть несколько мувиклипов, которые случайным образом добавляются на сцену при нажатии кнопки. Все мувиклипы имеют одинаковую ширину, но имеют разную высоту, и все мувиклипы имеют свои точки регистрации, расположенные внизу слева (я использую кнопку на этом этапе только для тестовых целей).

То, что я хотел бы сделать, это «автоматически» (а не с помощью кнопки) добавить бесконечный поток случайно выбранных mc из библиотеки на сцену (то есть 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

Off верхней части моей головы, так что это может быть немного грубо, но ....

Начните с первого клипа и сохранить его в массиве «onscreenClips» (будет использоваться как очереди):

1.) установите начальный клип в «onscreenClips» на y = -height Это выровняло бы нижнюю часть клипа в верхней части сцены.

Затем в вашем ввести цикл кадра:

1.) перемещать любые клипы в «onscreenClips» вниз по скорости

2.) проверить, если первый объект в «onscreenClips» достиг дна еще (свойство y будет равно высоте сцены). Если это так, удалите его с дисплея (так как он будет выключен) и выключите очередь. Первый объект всегда является «самым старым» в очереди.

3.) проверьте, что последний объект в «onscreenClips» еще достиг вершины сцены (свойство y достигло 0 и больше не является отрицательным). Это означало бы, что верхний край выровнен с верхней частью сцены, если он будет перемещен вниз, будет разрыв. Если это произойдет, добавьте следующий набор клипов в y = -height, а затем вставьте его в очередь.

4.) Продолжайте, пока не добавьте больше объектов. Затем продолжайте проверять условие шага 2, пока массив/очередь «onscreenClips» не будет пустым.

+0

Большое спасибо за ваш вход mitim, я дам вашим идеям вихрь и посмотрю, как далеко я смогу прогрессировать. – Attila66

+0

кричит, я просто перечитываю ваш вопрос, и я думал, что ваши регистрационные баллы были сверху слева. Используется одна и та же логика, но для нового клипа изменение - до 0, а для проверки того, что клип выключен, y будет равно (или больше) высоты сцены + высоты объекта. – mitim

+0

Добавили проверки, чтобы определить, когда полная высота mc видна и «на сцене», и когда полная высота mc невидима и «выключена», и обе работают правильно. Я также добавил удаление дочернего оператора, так что, когда mc стал невидимым и неактивным, он удаляется со сцены и возвращается в библиотеку. Это работает в визуальном плане (т. Е. Mc исчезает со сцены), однако, согласно результатам вывода, mc (хотя и не видимый) все еще присутствует и перемещается все дальше за пределы видимой стадии. – Attila66

0

Управленческий прогресс немного дальше с этим.

Добавили чеки, чтобы определить, когда полная высота mc видна & 'на сцене', и когда полная высота mc не виден & 'off stage', и оба они работают правильно.

Я также добавил удаление дочернего оператора, так что, когда mc стал невидимым & offstage, он удален со сцены и возвращается в библиотеку. Это работает в визуальном плане (т. Е. Mc исчезает со сцены), однако, согласно результатам вывода, mc (хотя и не видимый) по-прежнему присутствует &, путешествующий все дальше за пределы видимого уровня.

Смежные вопросы