PDA

Volledige versie bekijken : framerate


frankeehm
%Europe/Berlin %410 %2006, 10:50
Via een Moviecliploader actionscript laad ik een externe SWF in. De framerate van de basis en de externe SWF staan op 30, alleen de externe speelt traag (volgens mij gewoon 12) af.

Hoe kan dat?

vb: http://www.frankekooistra.nl/site.html

var mcl:MovieClipLoader = new MovieClipLoader();

var mclL:Object = new Object();

mclL.onLoadProgress = function(target,loaded,total) {
loader.percent.text = Math.round((loaded/total) * 100) + "%";
}

mclL.onLoadInit = function() {
loader._visible = false;
loader.percent.text = "";
}

mcl.addListener(mclL);

mcl.loadClip("swf1.swf",holder);

b1.onRelease = function() {
loader._visible = true;
mcl.loadClip("swf1.swf",holder);
}

b2.onRelease = function() {
loader._visible = true;
mcl.loadClip("swf2.swf",holder);
}

FredHeusschen
%Europe/Berlin %418 %2006, 11:03
omdat het framerate wordt overschreven naar dat van de swf waar 'ie in geladen wordt (die zal nog op 12 staan)

eagle
%Europe/Berlin %424 %2006, 11:11
Je moet de framerate van de externe dan wijzigen. De framerate van een geladen swf is onafhankelijk van de parent swf.

frankeehm
%Europe/Berlin %435 %2006, 11:27
Je moet de framerate van de externe dan wijzigen. De framerate van een geladen swf is onafhankelijk van de parent swf.

Helder, alleen de framerate staat op 60 momenteel, maar hij blijft 12 afspelen.

eagle
%Europe/Berlin %438 %2006, 11:31
Hoe weet je dat hij tegen 12 fps afspeelt?

frankeehm
%Europe/Berlin %442 %2006, 11:37
Hoe weet je dat hij tegen 12 fps afspeelt?

Ja, ik heb zo'n vermoeden dat ie 12 blijft spelen, weet het niet.
Al zet ik de framerate op 120 zie ik nog geen verschil.

eagle
%Europe/Berlin %443 %2006, 11:39
Je kan het eens uitvissen met de getTimer functie. Wat voor soort animatie gebruik je om te concluderen dat het op 12 blijft staan?

frankeehm
%Europe/Berlin %446 %2006, 11:42
Je kan het eens uitvissen met de getTimer functie. Wat voor soort animatie gebruik je om te concluderen dat het op 12 blijft staan?


De eerste animatie, met dat landschap. Ik heb ze even vergeleken maar het is iets sneller dan 12. Maar los daarvan, de externe SWF luisterd niet naar de bepaalde framerate.

frankeehm
%Europe/Berlin %506 %2006, 13:09
Schopje omhoog.

Iemand een idee?

Thnks

Dauntless
%Europe/Berlin %508 %2006, 13:12
Je moet de framerate van de externe dan wijzigen. De framerate van een geladen swf is onafhankelijk van de parent swf.
Nee, de framerate van een ingeladen swf is juist helemaaal afhankelijk van de parent swf, hij neemt die fps namelijk over...

Je kan met setInterval werken, maar dat gaat ook enkel werken als het fps van je externe swf lager moet zijn dan die van je parent swf aangezien de functie calls van setInterval op het frame dat 'het dichtst bij de gekozen tijd' ligt, wordt opgeroepen. (Wauw, lange zin... ben ik nog duidelijk?)

frankeehm
%Europe/Berlin %581 %2006, 14:57
Nee, de framerate van een ingeladen swf is juist helemaaal afhankelijk van de parent swf, hij neemt die fps namelijk over...

Je kan met setInterval werken, maar dat gaat ook enkel werken als het fps van je externe swf lager moet zijn dan die van je parent swf aangezien de functie calls van setInterval op het frame dat 'het dichtst bij de gekozen tijd' ligt, wordt opgeroepen. (Wauw, lange zin... ben ik nog duidelijk?)

Ha, bijna helder.
Dus ik zet bijvoorbeeld de parent op 60 en kan ik er dan voor zorgen dat de externe swf op 30/40 af wordt gespeeld?

Dauntless
%Europe/Berlin %619 %2006, 15:51
Dat kan wel ja :).

Is het een animatie of een script dat dan trager moet spelen ?

-voor animatie: gebruik setInterval() icm nextFrame() om op de juiste tijdstippen naar de volgende frame te gaan (bv een interval van 1000ms voor 1fps).

-voor script: Vervang je onEnterFrame's door intervallen (terug met setInterval()).

Veel succes!

frankeehm
%Europe/Berlin %646 %2006, 16:31
Dat kan wel ja :).

Is het een animatie of een script dat dan trager moet spelen ?

-voor animatie: gebruik setInterval() icm nextFrame() om op de juiste tijdstippen naar de volgende frame te gaan (bv een interval van 1000ms voor 1fps).

-voor script: Vervang je onEnterFrame's door intervallen (terug met setInterval()).

Veel succes!

Thanks voor je reactie. Het gaat dus om een animatie en ik heb deze AS toegepast in de externe SWF:

myFPS = setInterval(this, "nextFrame", 1000/60);

Het script werkt uitstekend als ik de Externe SWF gewoon los open. Maar binnen de parent SWF werkt ie dus niet.

morreke
%Europe/Berlin %652 %2006, 16:39
cpu van je pc voldoende ?

frankeehm
%Europe/Berlin %655 %2006, 16:43
Op zo'n 80% zit ie wijl de pagina loopt.

Dauntless
%Europe/Berlin %687 %2006, 17:30
Je wil dus een fps van 60... Dat gaat bijna nooit haalbaar zijn. Je parent swf is dan hoger neem ik aan? bv 80 en dat gaat al helemaal niet nodig zijn... Een menselijk oog kan geen verschil zien tussen een animatie op 35fps en een animatie op 60fps... Dus waarom wil je hem zo hoog ?

frankeehm
%Europe/Berlin %358 %2006, 09:36
Je wil dus een fps van 60... Dat gaat bijna nooit haalbaar zijn. Je parent swf is dan hoger neem ik aan? bv 80 en dat gaat al helemaal niet nodig zijn... Een menselijk oog kan geen verschil zien tussen een animatie op 35fps en een animatie op 60fps... Dus waarom wil je hem zo hoog ?


Ik wil een framerate van 30 FPS, maar gebruik 60 om het veschil ff snel te testen.

frankeehm
%Europe/Berlin %889 %2006, 22:21
Ik ben er achter gekomen dat het probleem bij het CPU verbruik ligt.

Het ligt aan dit script wat de CPU doet overwerken:

import flash.filters.BlurFilter

var blur:BlurFilter = new BlurFilter(0,0,0);
fotoBar.filters = [blur];

var mouse = 0;
function setBar(){
var ease = 1;//speel hier mee om de ease te veranderen...

//hittest om te voorkomen dat de bar blijft scrollen als de muis er af is..
//zo kan ie dus ook niet buiten beeld scrollen...
if(this.hitTest(_parent._xmouse,_parent._ymouse,tr ue))
mouse = this._xmouse;

var verh = fotoBar._width / mask._width;
var goto = -((mouse * verh) - mouse);
var distance = fotoBar._x - goto;
//going to postion...
var speed = distance/ease;
fotoBar._x -= speed;
if(speed > 0 && distance < 5)
fotoBar._x = goto;
else if(speed < 0 && distance > -5)
fotoBar._x = goto;
//give the effects...
blur.blurX = Math.floor(Math.abs(speed))/3;
fotoBar.filters = [blur];
}
onEnterFrame = setBar;

Iemand een idee waarom dit script er voor zorgt dat het CPU gebruik zo hoog wordt?

Dauntless
%Europe/Berlin %891 %2006, 22:24
Die blur filter zal daar wel voor zorgen ... Maar je kan het eenvoudig nagaan hé: Gebruik getTimer() om te timen hoeveel ms elke regel nodig heeft. Bv:


var t:Number = getTimer();
for(var i in this)
{
//dosomething
}
trace("for var i in this -> "+(getTimer() - t));
t = getTimer();
for(var k:Number = 0; k<10000; k++)
{

}
trace("loop van 1000 duurt: "+(getTimer()-t));
t = getTimer();
//etc

frankeehm
%Europe/Berlin %344 %2006, 09:16
Die blur filter zal daar wel voor zorgen ... Maar je kan het eenvoudig nagaan hé: Gebruik getTimer() om te timen hoeveel ms elke regel nodig heeft. Bv:


var t:Number = getTimer();
for(var i in this)
{
//dosomething
}
trace("for var i in this -> "+(getTimer() - t));
t = getTimer();
for(var k:Number = 0; k<10000; k++)
{

}
trace("loop van 1000 duurt: "+(getTimer()-t));
t = getTimer();
//etc

Thanks! Mijn probleem is volledig opgelost :D

Dauntless
%Europe/Berlin %650 %2006, 16:36
Aan wat lag het overigens ?