Volledige versie bekijken : Alpha en overlappende afbeeldingen
MovieClown
%Europe/Berlin %920 %2005, 23:06
Hallo,
Ik ben pas begonnen met Flash en sinds nog korter met AS. Sommige dingen snap ik al redelijk in AS, maar sommige dingen duidelijk niet: dit is zo'n laatste ding:
Ik heb een hoofdfilm lopen op de main time line.
Op een gegeven moment wil ik een willekeurige afbeelding langzaam op laten komen (dus de alpha van 0 naar 100). Die afbeeling moet even in beeld blijven vervolgens weer uit faden.
Terwijl deze bovenstaande loop afspeelt wil ik daar overheen weer een andere willekeurige afbeelding zetten. Eentje die over de eerste afbeelding heen, eerst in-fade en later weer uit-fade. Mijn idee was dat moet gebeuren met dezelfde routine als die ook als de eerste loop aanroept.
Ik wilde 5 van deze loops een tijdje na elkaar laten starten, zodat er steeds zo'n 5 foto's over elkaar heen in en uit faden. Ik hoop dat dit een beetje duidelijk is.....
Wat heb ik tot zover?:
Ik heb:
ranpict0 = foto nummer 1
ranpict1 = foto nummer 2
ranpict2 = foto nummer 3
..
Dit moeten er zo'n 10 worden. Bij elke loop wordt er dan van deze 10 steeds 1 willekeurig gekozen.
Ik roep de "serie" ranclip's aan met een movieclip. Op de eerste frame daarvan staat:
var kiezer:Number = Math.floor(Math.random()*3);
this.attachMovie("ranpict"+kiezer, "ranpict9", 100);
onEnterFrame=function(){
this._alpha = 0
}
Eerst wordt een gatal van 0, 1 of 2 gekozen;
Nu wordt bv ranpict2 aan de nieuwe movie geplakt;
Op de tweede frame staat:
var tel: Number = 0;
Op de derde frame:
onEnterFrame = function(){
this._alpha = 0 + 0.5*tel;
}
En op de vierde:
tel++;
if (tel <100){
gotoandplay(3);
}
And finaly, op frame 5:
gotoAndPlay(1);
}
Dus in de frames 2 t/m 5 wordt in 100 stapjes de foto langzaam zichtbaar. Tot zover werkt het zoals ik wil: in-faden van een willekeurige foto.
Vraag 1: is deze methode überhaupt handig, of kan het veel makkelijker? (De fotos hoeven niet iedere week te wijzigen of zo.)
Vraag 2: het lukt me niet (ook niet na 100 keer :X :( :@ :@ ) om de foto met zo'n zelfde "tel-routine" weer terug uit te faden. Wanneer ik weer zon teller laat lopen en de alpha bijvoorbeeld zo af laat nemen:
onEnterFrame = function(){
this._alpha = 20-2*tel;
}
Dan doet ie dus niks... Wie weet raad?
Vraag 3.
Ik probeer de loop een verschillend aantal keer over elkaar heen te zetten. De movieclip van hierboven heet: plaatje. In onderstaande movieclip roep ik plaatje aan.
T++
var a: MovieClip = attachMovie("plaatje", "plaatjel"+T, 1000+T);
a.onEnterFrame=function(){
a._x=100;
}
Verder volgt er dan wat loopwerk zoals eerder. Mijn probleem is: dit werkt niet..... Wat kan ik doen??
Vraag 4. Zijn er goeie boeken die vooral ingaan op het grafische gedeelte van AS?
Alvast bedankt voor je hulp!
Finesky
%Europe/Berlin %016 %2005, 01:23
Voor vraag 1;
Je kan beter alles op één frame zetten in de _root.
Dan blijft alles overzichtelijk.
var tel:Number = 0;
begin();
function begin():Void {
var kiezer:Number = Math.floor(Math.random()*3);
attachMovie("ranpict"+kiezer, "ranpict"+kiezer, kiezer);
var welke = this["ranpict"+kiezer];
welke._alpha = 10;
welke.onEnterFrame = voerUit;
}
function voerUit():Void {
if (tel>=100) {
tel = 0;
this.removeMovieClip();
begin();
} else {
this._alpha++;
tel++;
}
}
De rest van de vragen zal ik morgen even naar kijken:).
The_One
%Europe/Berlin %027 %2005, 01:40
hoi,
Echt goed dat je zelf al heel veel geprobeerd hebt :)! Ik zal je proberen te helpen :)!
Vraag 1: is deze methode überhaupt handig, of kan het veel makkelijker? (De fotos hoeven niet iedere week te wijzigen of zo.)
Ik denk dat ik een makkelijkere en overzichtelijke manier voor je hebt:
Plak al het onderstaand script op een keyframe [ik heb geprobeerd zoveel mogelijk aan jouw script te voldoen]:
/*Er wordt een prototype aan gemaakt. Zoiets als een nieuw soort eigenschap voor een MovieClip [=MC]
Ik denk dat het nog iets te moeilijk voor je is om alles te snappen :)*/
MovieClip.prototype.alphaTo = function(startA:Number, stopA:Number, speed:Number) {
/*De MC krijg alpha "startA". Deze kan je opgeven bij het uitvoeren van de prototype */
this._alpha = startA;
/* een onEnterFrame [= oEF] -script wordt alleen op de huidige keyframe uitgevoerd. */
this.onEnterFrame = function() {
/* de alpha vd MC wordt gewijzigd, nl de alpha dat je wilt bereiken [=stopA]
min de huidige alpha waarde [is in dit geval OOK startA,
want die hebben we hierboven zo gedefineerd] gedeeld door de snelheid*/
this.alpha = (stopA-this._alpha)/speed;
/* Als je variable "alpha" [dus niet de eigenschap _alpha!] kleiner is dan 0.05, dan
krijgt de eigenschap _alpha de waarde van stopA. Dit om te voorkomen dat je
processor te intensief gebruikt word*/
if (Math.abs(this.alpha)<.05) {
this._alpha = stopA;
delete this.onEnterFrame;
/* anders gewoon de _alpha waarde veranderen met de waarde alpha
[beetje verwarrend mss, kijk naar de underscore */
} else {
this._alpha += this.alpha;
}
};
}
/*het aantal seconde(s) dat je wilt wachten tot er een volgende foto wordt ingefaden.
En je huidige foto wordt uitgefaden*/
var wachtAantalSec:Number = 2;
/* de "diepte" van je MC */
var depth = 0;
/* hier heb ik een functie aangemaakt, zonder parameter*/
function randomFotoKiezer(){
/* dit ken je ;)*/
var kiezer:Number = Math.floor(Math.random()*3);
/* dit heb ik wat aangepast :) */
_level0.attachMovie("ranpict"+kiezer, "ranpict"+depth, depth++, {_alpha:0});
/*let op! Hier wordt dus de prototype toegepast op je nieuwe MC en
op je MC die al op je stage staat*/
_level0/*<path*/["ranpict"+depth/*<naam van net aangemaakte MC*/].alphaTo/*<prototype naam*/(0/*<startA waarde*/, 100/*<stopA waarde*/, 20/*<snelheid*/);
_level0["ranpict"+(depth-1)/*<de MC die al op de stage staat*/].alphaTo(100, 0, 20);
}
/* ook handig; de functie randomFotoKiezer [hierboven] wordt om de 2 sec herhaald [dit kan je dus ook veranderen :) */
MI/*<variable die ik eraan gegeven heb. Dit is handig voor als je herhaling moet verwijderen met 'clearInterval'*/= setInterval/*<zit dus standaard in Flash*/(randomFotoKiezer/*<functienaam*/, wachtAantalSec/*<kan je hierboven veranderen*/*1000/* keer 1000 omdat deze functie in millesecondes werkt*/);
stop();
Ik hoop dat het zo wel werkt :)
Stel anders gerust je vragen hiero!
Post ook ff dan je FLA, is wat makkelijker voor ons :)
Vraag 4. Zijn er goeie boeken die vooral ingaan op het grafische gedeelte van AS?
Hmmz, volgens mij had Hewig van Elzen [correct me if I'm wrong] daarover iets geschreven. Je moet ff googlen op haar naam
Veel suc6:)!
Ik hoop dat het allemaal een beetje duidelijk is :)
Ik zie dat Finesky ook al gereageerd heeft [toen ik alles aan het commenten was, had hij al gepost :)]. Probeer ook zijn manier, ik weet niet of het werkt
MovieClown
%Europe/Berlin %419 %2005, 11:04
Finesky en The One bedankt voor de nachtelijke reacties: echt top!! :) :) :)
De oplossing van Finesy is inderdaad een stuk overzichterlijker, ik verwacht dat ik deze opbouw voor nog wel wat dingetjes kan gebruiken. :)
Ik hoop dat je voor de ander dingetjes ook nog een oplossing weet.
Wat een lap tekst, the One: dank, dank, dank!
De oplossing van je krijg ik maar niet aan de praat. Dat komt door het laatse deel van het script. Daarin staat:
level0/*<path*/#91;"ranpict"+depth/*<naam van net aangemaakte MC*/#93;.alphaTo/*<prototype naam*/0/*<startA waarde*/ 100/*<stopA waarde*/ 20/*<snelheid*/;
_level0["ranpict"+(depth-1)/*<de MC die al op de stage staat*/#93;.alphaTo(100, 0, 20);
}
Ik weet het het is natuurlijk een enorme noob vraag maar wat is de syntax van deze twee regels??? waarschijlijk heb je een ]of een , of een / of { niet goed ingetyped. Ik kende deze functie niet en ik krijg de notatie niet goed :( .
Boek gevonden! je bedoelt waarschijnlijk: Flash actionscript; Hedwyg van den Elzen ? Ik ga es kijken of ik het wat vind. Ik heb nu flash math creativity (friendsofED) in huis, is een leerzaam boek maar voor een beginner als ik wordt er te weinig uitgelegd....
Finesky
%Europe/Berlin %529 %2005, 13:42
Hej ik heb weer even gekeken, en het uitfaden kan zo:
var telBeneden:Number = 100;
var tel:Number = 0;
begin();
function begin():Void {
var kiezer:Number = Math.floor(Math.random()*3);
attachMovie("ranpict"+kiezer, "ranpict"+kiezer, kiezer);
var welke = this["ranpict"+kiezer];
welke._alpha = 10;
welke.onEnterFrame = voerUit;
}
function voerUit():Void {
if (tel>=100) {
if (telBeneden<=0) {
tel = 0;
telBeneden = 100;
this.removeMovieClip();
begin();
} else {
this._alpha--;
telBeneden--;
}
} else {
this._alpha++;
tel++;
}
}
Vraag 3 snap ik niet helemaal, mischien dat je die nog nader kan verklaren?;)
En vraag 4;
Het boek Flash actionscript van Hedwyg van Groenendaal is toch aardig verouderd hoor.
Ik zou eens naar Flash design voor vormgevers, van dezelfde schrijvster kijken, daar staan ook wat basic actionscript dingen in:).
MovieClown
%Europe/Berlin %562 %2005, 14:30
He Finesky, het werkt perfect! 8D En ik geloof dat ik nog kan volgen wat er gebeurt (wat een bijzonderde dag :) ) Dank je wel!
Over vraag 3: ik wil dus meerdere instances van de movieclip van hierboven over elkaar heen laten lopen. Er wordt dan dus steeds een afbeelding over de andere heen geplaats. Het lijkt me dat je gewoon 4 of 5 keer bovenstaande movieclip moet aan roepen en klaar is kees...
Op een of andere manier is mij tot nog toe niet gelukt.
En ff over dat boek. Ik heb even gekeken. Lijkt me wel een OK boek, fijn in het nederlands, ga het misschien wel aanschaffen. Maar ik ben vooral geinteresseerd in de grafische mogelijkheden. In dat boek van Groenendaal staat ook veel PHP, SQL en database-gedoe. Zijn er misschien ook boeken die alleen op het visuele ingaan?
The_One
%Europe/Berlin %689 %2005, 17:32
ok, je bent al geholpen, maar mss voor andere mensen; het laatste gedeelte AS:
_level0["ranpict"+depth].alphaTo(0, 100, 20);
_level0["ranpict"+(depth-1)].alphaTo(100, 0, 20);
}
:)
de haken werden idd vervangen door een lettercombie :P
Suc6 verder:)!
MovieClown
%Europe/Berlin %497 %2005, 12:56
Ja The_One ik ben geholpen, maar helaas nog niet helemaal... Ik zou het dus graag tegelijkertijd meerdere keren willen laten lopen. Ik ben nu bezig met om de oplossing van Finesky uit te bouwen, als dat klaar is zal ik het hier plaatsen om dit draadje waardig te beeindigen.
Ik probeer nu in de functie "begin()" vier plaatjes te attachen ipv van één. Totzover zonder veel succes. :( Als iemand een idee heeft....
Wat ik eerst geprobeerd heb is om deze code op een frame in een movie clip te zetten. En deze dan vanaf de root aan te roepen op steeds een andere depth. Maar dat wil niet lukken. Waarschijnlijk omdat in elke intance de depth al staat ingesteld op het niveau van "kiezer", klopt dat in jullie ogen?
Ik heb de oplossing van The_One nog niet werkend gekregen. Hij komt in een nooit eindigende loop terecht of zo want na Ctrl-Enter loopt die 'vast'.
Finesky
%Europe/Berlin %499 %2005, 12:59
En wil je dat er een nieuw plaatje komt, als je andere een bepaalde alpha waarde heeft?
MovieClown
%Europe/Berlin %517 %2005, 13:24
Yes! dat zou een mooie oplossing zijn.... En dan het liefst een varierende zodat er wat 'organisch' uitziet. Ik ben benieuwd.
The_One
%Europe/Berlin %810 %2005, 20:26
J
Ik heb de oplossing van The_One nog niet werkend gekregen. Hij komt in een nooit eindigende loop terecht of zo want na Ctrl-Enter loopt die 'vast'.
Hmmz, dit is best vaag :S
Ik heb een voorbeeldje voor je gemaakt, check de bijlage [de FLA bevat geen commentaar overigens :)]
Suc6:)!
MovieClown
%Europe/Berlin %958 %2005, 23:59
Dank jullie wel voor alle moeite, maar ik denk dat ik gewoon op de main timeline oplos met motion tweens..... hahahaha sorry, maar ik kon het gewoon niet nalaten :)
Echt super verbijsterend, alle hulp die ik hier krijg op m'n eerste post !!!!! Top top top! Ook de oplossing van The_One loopt als een zonnetje, dus er zijn twee goeie methoden op het op te lossen.
Wanneer ik de code van The_One op m'n main timeline zet blijft die wel hangen op bij het loopen van de afbeeldingen (dus ik denk dat de code in eerste instantie al werkte maar dat er alleen geen plaatjes te zien waren). Ik blijf nog wel ff met het probleem zitten dat ik eigenlijk dus dezelfde routine een paar keer wil hebben lopen op de main. Dus als iemand nog tips heeft graag... Maar ik ga me eerst even een weg F-éénen door de code van The_One...
vBulletin® v3.8.1, Copyright ©2000-2012, Jelsoft Enterprises Ltd.