PDA

Volledige versie bekijken : terug naar Frame 1?


Rezzy
%Europe/Berlin %626 %2010, 15:01
Ik heb een stukje AS2.0 gemaakt mbv een Timer waarbij eerst de MC uit Frame 1 afspeelt, en waarbij na 10 seconden pas naar Frame 2 wordt gegaan om daar de volgende MC af te spelen (ook 10 sec lang).

Ik wil hier echter een loop van maken, die dus na 10 seconden in Frame 2 te hebben gehangen weer opnieuw begint in Frame 1. Ik ben echter niet zo'n AS held, dus wie kan me uitleggen waarom ik het niet werkend krijg?

Op zich kom ik een heel eind: Frame 1 wordt netjes afgespeeld (10 sec lang, zoals ik wil), Frame 2 ook (ook 10 sec lang), maar wanneer via Frame 2 teruggelinkt wordt naar Frame 1, blijft het beeld leeg. Toch komt de speelkop wel aan in Frame 1; dit maakt een trace-functie me duidelijk in Frame 1. Maar het beeld blijft leeg.


Okee, dit is mijn AS uit Frame 1:

stop();
loadMovie(_root.A, flip1.foto1);
var1 = 0;
_root.onEnterFrame = function()
{
var2 = getTimer();
if (var2>var1+10000)
{
var1 = var2;
gotoAndStop(2);
}
else
{
stop();
}
};



En dit is de AS uit Frame 2:

stop();
loadMovie(_root.D, flip2.foto2);
var3 = 0;
flip2.onEnterFrame = function()
{
var4 = getTimer();
if (var4>var3+20000)
{
var3 = var4;
gotoAndStop(1);
}
else {
stop();
}

};


Het is waarschijnlijk iets simpels met de onEnterFrame-functie, maar ik kom er gewoon niet uit.

digitalecartoons
%Europe/Berlin %648 %2010, 15:33
loadMovie(_root.A, flip1.foto1);

Werken beide loadMovies uberhaupt wel? Of je moet een extern bestand gebruiken dat toevallig '_root.A' heet, maar 't ziet er naaruit dat je een movieclip uit de library in een andere probeert te laden. Dus vraag mij af of beide beelden uberhaupt wel tevoorschijn komen.
loadMovie(url: String, target:Object, [method: String]) : Void
loadMovie(url: String, target: String, [method: String]) : Void
Loads a SWF, JPEG, GIF, or PNG file into a movie clip in Flash Player while the original SWF file is playing. Support for unanimated GIF files, PNG files, and progressive JPEG files is added in Flash Player 8. If you load an animated GIF, only the first frame is displayed.

Die timer functie kan je trouwens ook vervangen door setTimeout te gebruiken. Op frame 1:
stop();
function wait(url:String){
gotoAndStop(2);
}
setTimeout(wait,10000)
en op frame 2:
stop();
function wait(url:String){
gotoAndStop(1);
}
setTimeout(wait,10000)
Dit wacht gewoon 10 seconden (wat de framerate ook is) voordat de gekoppelde functie uitgevoerd wordt.

Rezzy
%Europe/Berlin %436 %2010, 10:29
Ja heb de MC's werkend, daar lag het probleem niet zo. Je trucje van setTimeout werkt trouwens wel goed! :D

Ik kan misschien beter even uitleggen wat ik wil bereiken:
Ik wil een animatie maken waarin 3 blokjes staan. Deze 3 blokjes draaien na 10 seconden om hun verticale as door een animatie (alsof je een speelkaart omdraait).
Maar ik wil dus graag dat ze niet GELIJKTIJDIG om hun as BEGINNEN te draaien, maar allemaal net NA ELKAAR, bijv. met een interval van 2 seconden. En wanneer de blokjes eenmaal gestart zijn, mogen ze oneindig blijven loopen.

EXTRA:
Het is voor een kledingzaak waarbij 3 categoriën naast elkaar komen in animatievorm, te weten 'Heren', 'Dames' en 'Kids'. Het eerste blokje heet dan ook 'heren', met daarin een animatie 'flip1' die hem iedere 10 seconden om zijn as laat draaien.

Ik heb inmiddels mijn AS wat aangepast, en heb nu nog maar 1 frame bewaard met daarin het volgende:


stop();

//Hiermee roep ik de externe JPG's op
A = "1.jpg";
B = "2.jpg";
C = "3.jpg";
D = "1a.jpg";

//Jouw trucje, min of meer:
heren.stop();
setTimeout(wait_heren,2000)

function wait_heren(heren){
heren.play();
}


Ik gebruik het eerste blokje 'heren' als test; de rest doe ik wanneer ik deze eerste werkend heb. Dit is het resultaat van dit stukje AS:

Het plaatje 'heren' staat stil, terwijl ik het plaatje nog niet eens wil zien in het begin. Na 10 seconden (ipv na 2) draait hij om zijn as en laat hij de achterkant van het blokje zien. Deze beweging hoort normaal pas na 10 seconden te gebeuren. Het lijkt er dus wel op alsof de animatie op de achtergrond stiekem doorloopt, en zich pas op het scherm toont als de gestelde tijd om is. Ik wil echter niet dat hij eerder start of toont dan ik aangeef.

Indien nodig stuur ik de bestandjes wel even toe. ;-)

Alvast bedankt voor je moeite!

xFTx
%Europe/Berlin %850 %2010, 20:24
Stuur ze dan even, dat zal het handigst zijn ;).
Je kan het achteraf verwijderen als het probleem verholpen is indien nodig.

Rezzy
%Europe/Berlin %477 %2010, 11:27
Het blijkt inmiddels dat ik nogal dom heb gedacht bij mijn vorige probleem. Dit heb ik inmiddels ook al opgelost, dus dit is niet langer relevant. Toch zit ik nu met een volgend puntje (heb er inderdaad meteen de bestanden maar bij gedaan ;)), en krijg het antwoord erop helaas nergens gevonden op internet.


Zoals je in de bestanden kan zien, heb ik een SWF gemaakt waarin 3 plaatjes naast elkaar staan (external JPG's) die na een bepaald aantal seconden omdraaien naar andere plaatjes. Deze stap gebeurt 5x, dan begint de cyclus weer opnieuw. Voor het voorbeeld dat ik heb bijgevoegd heb ik maar even sommige plaatjes gerecycled, maar hoop dat me dat vergeven wordt.. :)

Mijn punt is nu: Ik wil deze SWF op een site zetten. Maar ik merk dat het LADEN van de (externe) plaatjes nogal wat tijd kost, waardoor je ze de eerste paar seconden niet ziet, wanneer je op de site komt. Daarom wil ik graag met een Preloader werken (heb hierover al veel gelezen), in de hoop daarmee ALLE plaatjes alvast in te laden alvorens deze te tonen.

Wanneer je in mijn FLA kijkt, zie je bijv. in de movieclip 'Heren' 5 keyframes staan, met daarin ook 5 in te laden plaatjes. Wanneer ik een preloader test voor keyframe 1 uit 'Heren' werkt dit prima. Maar zodra ik de preloader wil instellen op keyframe 2 uit 'Heren', wordt er niks ingeladen. De preloader lijkt wel vast ingesteld te zijn voor keyframe 1.


Mijn vraag is dus: hoe kan ik ervoor zorgen dat ALLE externe JPG's (niet alleen die van 'Heren', de andere ook) VOORAF ingeladen worden met een preloader? Heb ik daar een array voor nodig? Ik vertel er meteen bij dat ik (nog) weinig kennis heb van preloaders en arrays, maar ik leer steeds bij! ;)


Thanks!

Rezzy
%Europe/Berlin %506 %2010, 12:09
Ik ben inmiddels weer een stapje verder. Met een scriptje van internet heb ik ervoor gezorgd dat er een externe JPG in het eerste frame wordt ingeladen. Omdat de externe JPG natuurlijk in een 'holder' geplaatst moet worden, wordt er door het scriptje een nieuwe, lege MC aangemaakt. In het scriptje heet deze MC 'container'.

Nu heb ik de alpha van deze MC ingesteld op 0 in frame 1, en op 100 in frame 2. Hierdoor is de MC gedurende de animatie in frame 1 dus nog NIET zichtbaar, maar pas in frame 2. Hoewel ik al erg blij ben met deze overwinning, zit ik nog met een probleem.

Voordat ik dit scriptje kende, heb ik ZELF een mc gemaakt ('foto'). Deze MC staat ACHTER een masker, waardoor er een stukje van de MC afvalt, precies wat ik wilde.
Maar het scriptje dat ik nu heb gevonden, maakt dus ook ZELF een NIEUWE mc aan, waar ik helemaal geen instellingen bij kan doen (zo lijkt het). Want hoe stel ik bijvoorbeeld in dat deze nieuwe MC ook achter het BESTAANDE masker komt te liggen?

Kortom: hoe zorg ik ervoor dat ik door ActionScript gegenereerde MC's combineer met bestaande (geen AS-)MC's?

Rezzy
%Europe/Berlin %506 %2010, 12:09
O ja, dit is het scriptje:

var loader:MovieClipLoader = new MovieClipLoader();
this.createEmptyMovieClip("container",1);
loader.loadClip("image1.jpg",container);

var preload:Object = new Object();
loader.addListener(preload);

preload.onLoadStart = function(target){
trace("Started Loading");
}

preload.onLoadProgress = function (target, loadedBytes, totalBytes){
trace(Math.floor((loadedBytes/totalBytes)*100)+"%");
}

preload.onLoadComplete = function(target){
trace ("Finished Loading!");
}