Это мой первый пост за всю историю :).У меня достаточно опыта в c #, немного в as3 и много в анимации.Во всяком случае на вопрос.
Я пытаюсь создать графическое представление активности микрофона во флэш-памяти для конференции.
Я получил видеоклип с именем eqNotch, который представляет собой просто прямоугольник, и его имя связи - EqNotch.У меня также есть мувиклип, в котором я записываю свой as3 в первый кадр, он называется dynamicBar, а имя связывания - DynamicBar.
Я успешно написал код для dynamicBar для создания одного столбца eqNotches и числастрок зависит от активности микрофона.Здесь возникает проблема: я ставлю один на сцену, работает нормально.но я хочу разместить около 25, и он отображает только один.Я пробовал циклы, создавая динамические элементы в первом кадре на сцене.Я пытался перетаскивать отдельно от библиотеки, я пытался зацикливаться внутри динамического штрих-кода, чтобы переместить .x в зависимости от того, в каком цикле он был, и внутри, который был "while (this.numChildren
Я хочу иметь возможность повторять код этого объекта несколько раз или что-то в этом роде.
Код для dynamicBar:
import flash.media.Microphone;
import flash.events.SampleDataEvent;
import flash.utils.ByteArray;
var my_mic:Microphone = Microphone.getMicrophone();
my_mic.rate = 22;
my_mic.gain = 100;
my_mic.addEventListener(SampleDataEvent.SAMPLE_DATA, drawSampleData);
var myTimer:Timer = new Timer(20,8);
myTimer.addEventListener(TimerEvent.TIMER, timerListener);
var lastData:int;
var timeRemover;
var myData:ByteArray;
function timerListener(e:TimerEvent):void
{
var currentData:int = 1;
var floater:int = 1;
try
{
//currentData = myData.readFloat()*30;
currentData = my_mic.activityLevel/5;
}
catch (e:Error)
{
currentData = 1;
}
try
{
floater = Math.abs(((currentData*3 + lastData)/4)); //- (stage.x/2))
}
catch (e:Error)
{
floater = currentData;
}
lastData = currentData;
if (floater > 20)
{
floater = 20;
}
if (floater < 1)
{
floater = 1;
}
var numOfCols:int = 5;
var j:int;
var i:int;
while (this.numChildren < floater)
{
i++;
var eqNotch:EqNotch = new EqNotch();
eqNotch.y = i * -10;
try
{
addChild(eqNotch);
}
catch (e:Error)
{
}
}
this.removeChildAt(this.numChildren-1);
}
function drawSampleData(eventObject:SampleDataEvent):void
{
myTimer.start();
myData = eventObject.data;
}
ОБНОВЛЕНИЕ
Отличная идея, Адам, я понял, но у меня возникли проблемы с удалением правильных.Сейчас я слишком далеко, чтобы бросить курить, и я хочу научиться этому для опыта.
Мне пришлось создать массив для записи высоты каждого из них.Он добавляет их правильно, но не удаляет их правильно.
import flash.media.Microphone;
import flash.events.SampleDataEvent;
import flash.utils.ByteArray;
var my_mic:Microphone = Microphone.getMicrophone();
my_mic.rate = 22;
my_mic.gain = 100;
my_mic.addEventListener(SampleDataEvent.SAMPLE_DATA, drawSampleData);
var myTimer:Timer = new Timer(20,8);
myTimer.addEventListener(TimerEvent.TIMER, timerListener);
var lastData:int;
var timeRemover;
var myData:ByteArray;
var numOfCols:int = 25;
var columns:Array = new Array();
/*for (var iLoop:iLoop=0;iLoop<numOfCols;iLoop++){
column[
}*/
function timerListener(e:TimerEvent):void
{
var currentData:int = 1;
var floater:int = 1;
try
{
//currentData = myData.readFloat()*30;
currentData = my_mic.activityLevel / 5;
}
catch (e:Error)
{
currentData = 1;
}
try
{
floater = Math.abs(((currentData*3 + lastData)/4));//- (stage.x/2))
}
catch (e:Error)
{
floater = currentData;
}
lastData = currentData;
if (floater > 20)
{
floater = 20;
}
if (floater < 1)
{
floater = 1;
}
for(var j:int = 0; j<numOfCols;j++)
{
var notchDistance:int = j * 30;
if(columns[j]==null){
columns[j]=0;
}
while (int(columns[j]) <= floater)
{
var eqNotch:EqNotch = new EqNotch();
eqNotch.x = notchDistance;
eqNotch.y = int(columns[j]) * -7;
addChild(eqNotch);
columns[j]++;
}
if(int(columns[j]) >= floater){
columns[j]--;
this.removeChildAt(int(columns[j])*(j+1)-1-j);
trace("height"+columns[j]+"col"+j);
}
}
}
function drawSampleData(eventObject:SampleDataEvent):void
{
myTimer.start();
myData = eventObject.data;
}