PDA

Volledige versie bekijken : Framerate


Tyranox
%Europe/Berlin %623 %2005, 15:58
is het mogelijk om de framerate te besturen met actionscript?...

ik wil dus bijvoorbeeld op bepaalde punten framerate 25 hebben en op sommige plaatsen framerate 20

help! =]

Dauntless
%Europe/Berlin %661 %2005, 16:51
Da's niet echt mogelijk... Maar je kan het wel 'faken' dmv setInterval. Die roep je dan bv om de 1000 / 30 milli seconden op voor een interval van 30 frames per seconde. (In die interval staat dan iets van this.nextFrame(); of zo)

Pimm
%Europe/Berlin %662 %2005, 16:54
DL heeft gelijk (DL heeft meestál gelijk), klik (http://flashfocus.nl/forum/showthread.php?t=1623)!

SaphuA
%Europe/Berlin %869 %2005, 21:51
Er is een andere manier fps te faken, maar die is omslachtig en gebruikt nogal wat cpu dus zal je er niet mee lastig vallen ;)

Het gebruik van intervallen is de makkelijkere oplossing

Dauntless
%Europe/Berlin %870 %2005, 21:53
Er is een andere manier fps te faken, maar die is omslachtig en gebruikt nogal wat cpu dus zal je er niet mee lastig vallen ;)

Het gebruik van intervallen is de makkelijkere oplossing
Kan je 'm toch even posten? Mij mag je er namelijk mee lastig vallen ;)

Fatty Owl
%Europe/Berlin %878 %2005, 22:04
Werkt zoiets niet? (alleen vertragen gaat hier): stop();
fps = 30;
nieuwefps = 20;
teller = 0;
this.onEnterFrame = function() {
teller++;
if (teller>nieuwefps/fps) {
this.gotoAndStop(nextFrame());
teller = 0;
}
};

//edit foutje eruitgehaalt

Dauntless
%Europe/Berlin %882 %2005, 22:11
Lijkt me een beetje vreemd...

Ik denk dat je dan eerder iets krijgt van: 1 frame per 30/20 seconden als je een FPS van 20 naar 30 wilt omzetten...

Iemand hier nog een id over?

Fatty Owl
%Europe/Berlin %884 %2005, 22:13
ja je kan er alleen de fps lager mee zetten.

pulletje
%Europe/Berlin %886 %2005, 22:17
lijkt mij idd ook zo Dauntless,

maar als je 1 seconde zou delen door 30 frames kom je op 0,033333 seconden uit. wat betekent dat je per 0,033 seconden 1 frame ziet. 1/20 == 0,05 seconden. als je dat dan toepast op fatty owl's as dan zou het misschien kunnen werken....

Pimm
%Europe/Berlin %887 %2005, 22:18
Je zet ergens (bijvoorbeeld gewoon op de eerste frame van de host SWF) deze codeMovieClip.prototype.fixedfps = function(fixedinvertfps, loop) {
fixedfps = (1000/Number(fixedinvertfps));
function fixedplayfunction(object, loop) {
eval(object).nextFrame();
if (loop && eval(object)._currentframe == eval(object)._totalframes) {
eval(object).gotoAndStop(1);
} else if (eval(object)._currentframe == eval(object)._totalframes) {
clearInterval(fpsinterval);
}
}
fpsinterval = setInterval(fixedplayfunction, fixedfps, this, loop);
fixedplayfunction(this, loop);
};Vergolgens heb je zo je inlaad code, zoiets:mcinstancename.loadMovie("filmpje.swf");Daar zet je dan de volgende code onder om 'm te laten spelen met de fixed fps:mcinstancename.fixedfps("20", true);Of, als je wilt dat hij niet loopt (maar stopt als hij bij de laatste frame is gekomen):mcinstancename.fixedfps("20", false);In deze voorbeelden is dus de framerate waarmee de ingeladen MC wordt afgespeeld 20, die pas je aan door het getal tussen die aanhalingstekens te veranderen.There you have it, normaal komt DL met dit soort dingen maar nu doe ik het eens... Ik ga 'm eens uitwerken en in de ASD zetten denk ik.

Fatty Owl
%Europe/Berlin %890 %2005, 22:22
lijkt mij idd ook zo Dauntless,

maar als je 1 seconde zou delen door 30 frames kom je op 0,033333 seconden uit. wat betekent dat je per 0,033 seconden 1 frame ziet. 1/20 == 0,05 seconden. als je dat dan toepast op fatty owl's as dan zou het misschien kunnen werken....

woww ik begrijp het ook nietmeer he :#

pulletje
%Europe/Berlin %896 %2005, 22:30
tja, ik ben niet zo'n superheld in AS (ik krijg niet eens fatsoenlijk een txt bestand ingeload, zie ander topic) maar ik neem aan dat een teller er per seconde 1 bij optelt. als je dan kijkt naar de fps dan heb je bv. 30 frames per seconde, dat is dan 1 frame (1/30 = 0,033) per 0,033 seconde en voor 20 fps heb je dan 1/20 = 0,05 seconden per frame.

als je dan in jouw script de fps en de nieuwefps aanpast zou het misschien wel kunnen werken.

Misschien is het maar goed dat pimm beter overweg kan met AS

SaphuA
%Europe/Berlin %897 %2005, 22:32
Zet je fps op 120.
Maak een lege MC, en zet deze code op zijn 1e frame:

Made bye PercyPea

starttime = newDate()
onEnterFrame=function(){
var currtime=new Date()
var ttime=currtime-starttime
while(ttime<1000/DESIREDFRAMERATE){
var currtime = new Date()
var ttime=currtime-starttime
}
starttime=new Date()
}

DESIREDFRAMRATE kan alleen vervangen worden door de volgende waardes:
1 - 12, 13, 15, 17, 20, 25, 34, 50 of 100

Edit: Even wat meer informatie..
Wat het eigenlijk doet is de CPU kracht wegvreten, zodat Flash langzamer wordt. Dit gebeurd dmv een loop, ook wel "spin loop" genoemd.

Fatty Owl
%Europe/Berlin %900 %2005, 22:37
120 FPS?????????
oh ja ik snap het nu, dus moet het ongeveer zo zijn:
stop();
fps = 30;
nieuwefps = 20;
teller = 0;
this.onEnterFrame = function() {
teller++;
if (teller>fps/nieuwefps) {
this.gotoAndStop(nextFrame());
teller = 0;
}
};

want als je dan 30/20 doet heb je 1.5 en 30/29 bevoorbeeld meer.

oh ja misschien zijn de oplossingen hierboven ook juist maar ik vind dit zo LEUK :D:D

Dauntless
%Europe/Berlin %903 %2005, 22:40
Haha, grappige oplossing van Saphua :D

Dauntless
%Europe/Berlin %905 %2005, 22:43
Maar fattyOwl, ik denk dat jou oplossing zowieso niet echt kan werken...

Situatie:
Begin bij 20, ga naar 30
Dan heb je dus een oEF die elke 50 milliseconden wordt opgeroepen.
Je wil dan naar frames die om de 33.333 milliseconden worden aangeroepen
Maar als je bij nul begint en na 50 ms die counter omhoog gaat, dan zit je al aan 50 ms, wat te hoog is.

Situatie:
Begin bij 30, ga naar 20
Zelfde eigenlijk... Je begint bij 33.33 milliseconden. Echter wanneer je aan 'frame 2' zit zit je al aan 66.66 ms. Dat is dan weer al te groot voor een FPS van 20.

(Of zit ik hier nu totaal verkeerd? :D)

pulletje
%Europe/Berlin %905 %2005, 22:44
zoiets had ik in ieder geval in gedachten, wil je dan 20 frames per seconde moet je per 0,05 seconden een nieuwe frame krijgen het zou dan zoiets moeten worden :

30 / 600 = 0,05

stop();
fps = 30;
nieuwefps = 600; \\dit is dus niet de daadwerkelijk nieuwe framerate
teller = 0;
this.onEnterFrame = function() {
teller++;
if (teller>fps/nieuwefps) { \\30/600=0,05 en dan gaat hij 1 frame verder
this.gotoAndStop(nextFrame());
teller = 0;
}
};
heb ik al gezegd dat ik niet super ben met as?? bij deze dan wie weet werkt het helemaal niet!

SaphuA
%Europe/Berlin %911 %2005, 22:51
Pulletje en Fatty Owl, jullie manier werkt anders...
Wat mijn manier doet is de snelheid van de player zo vertragen zodat je de gewenste fps krijgt.
Je kunt vervolgens dus gewoon een andere onEnterFrame op precies die fps laten draaien.
Wat jullie doen is een soort interval maken tussen bepaalde code, dit betekend dus dat als je een nieuwe onEnterFrame wilt maken dat je daar dus ook die vertraging op moet zetten..

Fatty Owl
%Europe/Berlin %912 %2005, 22:54
die werkt evengoed, maar je moet geen 600 zetten, maar bev 1. als je 1 zet gaat hij dus inderdaad 1 frame per seconden voort :D dat betenkd dat de code werkt hoop ik:D.

Fatty Owl
%Europe/Berlin %913 %2005, 22:55
Pulletje en Fatty Owl, jullie manier werkt anders...
Wat mijn manier doet is de snelheid van de player zo vertragen zodat je de gewenste fps krijgt.
Je kunt vervolgens dus gewoon een andere onEnterFrame op precies die fps laten draaien.
Wat jullie doen is een soort interval maken tussen bepaalde code, dit betekend dus dat als je een nieuwe onEnterFrame wilt maken dat je daar dus ook die vertraging op moet zetten..
oesje je het gelijk....dan moet ik nu even denken voor daar een oplossing over te vinden :D

//edit: kan je niet alles in een functie zetten en dan i.p.v onEnterFrame telkens die functie aanroepen? (ik weet niet juist hoe je je eigen function maakt maar het klinkt logisch :D )