Volledige versie bekijken : bolletjes naar beneden
woutersommer
%Europe/Berlin %757 %2005, 18:10
Hey
Ik heb een flashpagina met een 1000 tal bolletjes (allemaal grapics genaamd 'bol').
Deze staan in een figuur.
Nu zoek ik een manier om deze van boven naar beneden te laten vallen (van boven te beginnen).
Met motion tween is die niet te doen, dus zoek ik een ander manier (met action scripting ofzo).
Kan iemand mij helpen?
Alvast bedankt
Laiverd
%Europe/Berlin %807 %2005, 19:22
Zet in het symbool bolletje (dat overigens wel een movieclip moet zijn) op een aparte layer dit script:
this.onEnterFrame = function(){
this._y += 1 // hoger getallen > sneller vallen
}
Beetje sloppy en nog niet af, maar geeft je een idee van hoe het kan werken. Denk eraan om de onEnterFrame ook weer te verwijderen en wellicht zelfs het bolletje te verwijderen als ie uit beeld is (kan als je de bolletjes met as op je stage zet).
John
woutersommer
%Europe/Berlin %824 %2005, 19:47
Dit helpt mij echt al een stuk vooruit, bedankt!
Waar ik nu nog op zoek naar ben, is om eerste de bovenste rij te laten vallen, dan den 2e, dan de 3e, enzo verder.
if (this._y > 500 and this._y< 600) { val_naar_beneden(); }
en daarna if (this._y > 400 and this._y< 500) { val_naar_beneden(); }
Ik denk niet dat dit in een tijdlijn kan, en weet ook niet hoe ik een vertraging in actionscript zet.
Laiverd
%Europe/Berlin %919 %2005, 22:03
In dat geval (ik snap trouwens niet helemaal wat je met die if constructie wilt) kun je van het vallen het beste een functie maken, en misschien liever nog een prototype functie (http://www.flashfocus.nl/forum/showthread.php?t=5902) die je op iedere movieclip kunt toepassen. Dus niet de code die ik hierboven heb gezet in het symbool, maar op je hoofdtijdlijn deze functie:
MovieClip.prototype.fall = function(speed){
this.onEnterFrame = function(){
this._y += speed // de parameter speed bepaalt dus de snelheid van vallen
}
}
Je kunt daarna iets doen als
bolleke_01.fall(3); // bolleke_01 valt dan met een snelheid van 3
Als je de boel per rij wilt laten vallen, dan is het het handigst om alle instancenames in een array op te slaan. Of je dat nou handmatig doet of met actionscript moet je zelf weten, maar uiteindelijk heb je een array waar alle bolletjes in zitten
bollekes = new Array (bolleke_01,bolleke_02, etc);
Of je maakt een Array per rij (in jou geval nu misschien wat makkelijker, om zo de bolleks rij voor rij te kunnen laten vallen)
bollekes_rij_1 = new Array (bolleke_01, bolleke_02 etc t/m 10 bv);
bollekes_rij_2 = new Array (bolleke_11, bolleke_12 etc t/m 20 bv);
Je kunt er dan met een for loop doorheen
// voorbeeld voor de array bollekes_rij_1
for (i = 0; i < bollekes_rij_1.length; i++){
bollekes_rij_1[i].fall(3);
}
Als je de rijen een voor een wilt laten vallen met een zekere pauze ertussen, heb je een setInterval nodig in een functie. Daarnaast zou het handig kunnen zijn om de namen van de Arrays op hun beurt ook weer in een Array op te slaan. Zoiets als:
allezBollekes = new Array(bollekes_rij_1,bollekes_rij_2); zodat je de rijen in een loop een voor een kunt aanspreken, met die setInterval.
De globale opzet van die functie (die is echt niet de exacte code hoor):
doTheBollekes = function(vertraging, array){ // vertraging in seconden
// je hebt een teller nodig die bijhoudt welke array element nu aan de beurt is;
// als alle elementen uit de array (allezBollekes) zijn geweest, moet nl. de setInterval ook
// weer verwijderd worden.
var arrElementNum = 0
// start de loop
doFall = setInterval(function(){
// nu valt een rij
for (j = 0, j < array[arrElementNum][j], j++){ //
array[arrElementNum][j], fall(3);
}
// alle bollekes van een rij zijn gevallen (aan het vallen) en we moeten de teller ophogen
arrElementNum++;
// nu checken we of er nog elementen zijn in array die kunnen vallen, als dat nl.
// niet zo is, moet de setInterval stoppen
if (arrElementNum >= array.length){
clearInterval(doFall);
}
}, vertraging * 1000)
// eerst checken of er nog wat in de array zit
}
Als je die functie hebt dan hoef je 'm alleen nog maar aan te roepen met
doTheBollekes(2,allezBollekes);
De rijen (die als arrays zijn opgeslagen in de Array allezBollekes) zullen dan vallen een voor een met een vertraging van 2 seconden.
Disclaimer: er zullen absoluut fouten zitten in deze code (beetje uit de losse pols getypt en niet gecheckt op syntaxfouten; ook denkfouten voorbehouden ;) ); het gaat me erom dat je een idee krijgt over de aanpak. In de actionscript dictionary kun je meer vinden over for loops, if constrcuties, arrays, setInterval etc.
Succes.
John
treurmars
%Europe/Berlin %533 %2005, 12:48
http://www.flashfocus.nl/tutorials/Effecten/?filename=Maken%20van%20sneeuw%20mbv%20AS_Baptist% 20Vandersmissen.zip
Misschien heb je ook wat aan deze tutorial, is ook sneeuw maken met behulp van actionscript en ik moest daar aan denken na het horen van je verhaal, misschien kun je er iets mee.
woutersommer
%Europe/Berlin %595 %2005, 14:17
dankjewel, ik ga het eens proberen en hopelijk kan 'k snel resultaat laten zien.
vBulletin® v3.8.1, Copyright ©2000-2012, Jelsoft Enterprises Ltd.