PDA

Просмотр полной версии : А как сделать секундомер?


джонатан
14.07.2008, 14:30
Хочу спидометр который бы показывал скорость загрузки. Соответственно мне надо:

BytesLoaded / время за которое это загружено

либо

BytesTotal / общее время загрузки.

А вот как мне вычислить время, непойму.

Надеюсь на вашу помощь. Благодарю за внимание. :victory:

iNils
14.07.2008, 14:48
По событию onLoadStart запоминаете значение getTimer ()
По событию onLoadComplete вычитаете из текущего getTimer () то, что запомнили и делите разницу на 1000, тем самым получая время загрузки в секундах.

джонатан
14.07.2008, 14:57
iNils > Ну это чтобы увидеть скорость загрузки, по завершению всей загрузки, а если мне нужно видеть скорость непосредственно в процессе загрузки?

Я сделал пустой клип, в котором колличество кадров равно колличесву fps, создал переменную timer равную 0 и в этом клипе на последнем кадре написал
timer++;

Сейчас заливаю в сеть, чтобы проверить, а-то когда локально, то выводит "Infinity kb/s"
Но как-то это не красиво... Да и темболее погрешность имеет место в fps...

О! Точно! Праильнее наверное сначала задать переменной не 0 а -1, и на первом кадре писать timer++;
Так будет правильнее, но всеравно это как-то через "пятую точку".

iNils
14.07.2008, 15:04
Причем тут фпс?
Есть событие onLoadProgress, которое вызывается каждый раз, когда записывает новая часть данных. Запоминайте предыдущее значение загруженных байт и getTimer (), а потом делите разницу.

джонатан
14.07.2008, 15:12
iNils > Причем тут фпс?
как причем? Если фпс стоит 31, значит, что частота смены гадров = 31 в секунду.
И если в клипе 31 кадр, соттветственно он проигрывается полностью за 1 секнду. А с последнего кадра переходит на первый и к значению переменной timer прибавляется единичка, один раз в секунду. Ведь правильно?
Но как я уже и говорил, этот способ не красивый. Поэтому я благодарю вас за разъяснение, пойду делать. Спасибо.

// update

Что-то у меня ничего не получается! Я так подозреваю, что все потому, что я гружу не клип, и не картинку, а FLV видео:


// Create a NetConnection object
var netConn:NetConnection = new NetConnection();
// Create a local streaming connection
netConn.connect(null);
// Create a NetStream object and define an onStatus() function
var netStream:NetStream = new NetStream(netConn);
netStream.onStatus = function(infoObject) {
for (var prop in infoObject) {
if (infoObject[prop] == "NetStream.Buffer.Empty") {
_root.player.btns.time_field.msgTxt.text = "Идет загрузка...";
ones3 = false;
}

if (infoObject[prop] == "NetStream.Buffer.Full") {
_root.player.btns.time_field.msgTxt.text = "";
}
if(infoObject[prop] == "NetStream.Play.Stop"){
demor();
}
if (infoObject[prop] == "NetStream.Play.StreamNotFound") {
msg_txt.text = "File not found...";
}
}
};
netStream.onMetaData = function(infoObject:Object) {

for (var propName in infoObject) {
if (propName == "lasttimestamp" or propName == "duration") {
meta = true;
vLength = infoObject[propName];
kv = vLength/(_root.TimeLinelen);
delete netStream.onMetaData;
}
if (propName == "duration") {
_root.iAllTime = infoObject[propName];
usePath_mc.btnPlace.timeLine.timeTxt.text = usePath_mc.attached_as.fSetTime(_root.iAllTime);
}
if (propName == "width") {
}
if (propName == "height") {
}
}
};
// Attach the NetStream video feed to the Video object
usePath_mc.video_mc.my_video.attachVideo(netStream);
// Set the buffer time
netStream.setBufferTime(5);
// Begin playing the FLV file
netStream.play(_root.video_file);
netStream.seek(0);
netStream.pause();

Psy486
16.11.2010, 20:37
Добродень!

У меня для Вас до одури простой вопрос, но мне как не программеру он не так и прост, а времени на изучение базы сейчас нет, ибо проекту завтра быть.

Есть у меня текст вида 0,001
Надо чтоб каждые пол секунды (или там каждые несколько кадров, не важно) он прибавлялся на 0,001.
Как это сделать? Я пробовал гуглить, но у всех глобальные планы, из которых у еня не знаючи АС не удается вычленить кусочек, который дал бы мне именно этот результат =(

lexa2000lexa
17.11.2010, 11:54
вот такvar num:Number = 0.001;
function sum(dt:Number){
num +=dt
ваше_текстовое_поле.text = num;
}
var id:Number = setInterval(sum,500,0.001)

Psy486
17.11.2010, 12:28
lexa2000lexa, чистосердечное, необъятных размеров спасибище!

Добавлено через 1 час 2 минуты
вот такvar num:Number = 0.001;
function sum(dt:Number){
num +=dt
ваше_текстовое_поле.text = num;
}
var id:Number = setInterval(sum,500,0.001)


А как сделать так, чтоб в конце был 0?
Он тут когда прибавляет, то получается 0,009 а потом 0,01. Хотелось бы чтоб после запятой было 3 знака всегда .