Volledige versie bekijken : Aan attachMovie MC's een functie toekennen
LJBass
%Europe/Berlin %651 %2007, 16:38
Ik zou graag aan MC die ik oproep met behulp van attachMovie een actie willen hangen.
Dus bijvoorbeeld een "onEnterFrame".
Is dit mogelijk?
Erwinzzz
%Europe/Berlin %717 %2007, 18:12
Tuurlijk is dit mogelijk, het is immers een gewone instance. De manier waarop hangt alleen een beetje af van de manier waarop je hem creëert, dus het is verstandig het deel van het script te plaatsen waar het over gaat (is natuurlijk altijd verstandig).
LJBass
%Europe/Berlin %810 %2007, 20:26
Hey Erwinzz, bedankt voor je snelle reactie.
Ik heb nog geen script. Ik zat alleen na te denken over een nieuw project.
Ik wil film covertjes laden. Deze moeten te verplaatsen zijn. Dit wou ik met "onEnterFrame" doen. Ik had zoiets als script in gedachten om hem aan te maken:
"cover", "cover1", this.getNextHighestDepth, {_x:50, _y:50}
Hoe hang ik hier dan de actie aan?
Erwinzzz
%Europe/Berlin %960 %2007, 00:02
Een paar voorbeelden van verschillende situaties:
this.attachMovie("linkage","nieuweInstance", this.getNextHighestDepth();
this.nieuweInstance.onEnterFrame = function(){
trace(this);
}
Wil je het dynamischer aan gaan pakken, door bijvoorbeeld meerdere MC's te attachen door middel van een for-loopje, en ze in een holder te plaatsen:
this.createEmptyMovieClip("holder",this.getNextHighestDepth());
for(var i:Number = 0; i<10; i++){
holder.attachMovieClip("linkage","nieuweInstance"+i,holder.getNextHighestDepth());
holder["nieuweInstance"+i].onEnterFrame = function(){
trace(this);
}
}
Ik hoop dat je hier er mee uitkomt :D
LJBass
%Europe/Berlin %831 %2007, 20:57
Hey Erwinzzz,
Bedankt voor je goede uitleg. :)
Ik wil het graag stapje voor stapje leren. Daarom heb ik even een testmovietje gemaakt met het volende script erin:
for (var i:Number = 0; i<10; i++) {
attachMovie("circkel","circkel"+i,this.getNextHighestDepth,{_x:i*2, _y:i*2});
}
Maar hij maakt nu alleen nummer 9 aan (de laatste). Heb jij een idee hoe dat komt? :#
damarez
%Europe/Berlin %836 %2007, 21:04
for (var i:Number = 0; i<10; i++) {
attachMovie("circkel","circkel"+i,this.getNextHighestDepth,{_x:i*2, _y:i*2});
}
je zegt daar als i kleiner is dan 10
moet hij 1 optellen
tellen begint bij 0
dus eindigt het bij 9
var container:MovieClip;
for (var i:Number = 0; i<=10; i++) //11
{
var mc:MovieClip=container.attachMovie("circkel","circkel"+i,container.getNextHighestDepth);
mc.onEnterFrame=function()
{
trace(this);//je zit in de onEnterFrame van mc dus het pad naar mc binnen mc is this
}
}
ik geb i.p.v this.attachMovie
container.attachMovie
ik verwijs naar een movieclip op de stage met de instance naam container
dan heb je meer controlle over waar je spul neer wil zetten
je kan ook verijzen naar mc._x=i*10;ofzo
succes!!
LJBass
%Europe/Berlin %850 %2007, 21:24
Damarez bedankt voor je snelle reactie.
Ik snap dat hij van 0 tot 9 telt. Maar mijn bedoeling was eigelijk dat hij dan ook 10 rondjes neer zet.
Maar dat doet hij niet. Hij zet alleen de laatste weg.
Mijn bedoeling was dat hij "cirkel" uit de library haalt en deze "cirkel"+i noemt.
Hij zet deze vervolgens op de stage op x:i*2 en y:i*2.
frontLawn.mow()
%Europe/Berlin %921 %2007, 23:07
nr 0 t/m 8 worden weer weggehaald omdat ze dezelfde diepte meekrijgen.
je doet namelijk this.getNextHighestDepth
en niet
this.getNextHighestDepth()
en da's toch wel een verschil, het eerste is gewoon nix, het tweede de eerstvolgende diepte...
LJBass
%Europe/Berlin %758 %2007, 19:12
Dankje, dat was het inderdaad. :) Waarom moet dat er eigelijk achter? 8~
Heb ik meteen nog een vraagje. Ik heb nu deze code:
for (var i:Number = 0; i<10; i++) {
naamcirkel = "c"+i;
attachMovie("circkel", naamcirkel, this.getNextHighestDepth(), {_x:i*2, _y:i*2});
_x = Number(i)*Number(8);
}
Als ik dit weg haal:
, {_x:i*2, _y:i*2}
Dan werkt hij niet meer. Terwijl ik zou verwachten dat ik hem met:
_x = Number(i)*Number(8);
op z'n plek zet.
Maar waarom doet hij dat niet?
Erwinzzz
%Europe/Berlin %761 %2007, 19:16
Omdat je in de scope van de root zit, en je daar dus de _x van wilt veranderen. Je moet dus eerst de instantie aanspreken:
for (var i:Number = 0; i<10; i++) {
naamcirkel = "c"+i;
attachMovie("circkel", naamcirkel, this.getNextHighestDepth()});
this[naamcirkel]._x = Number(i)*Number(8);
}
Dit zou het moeten doen ;)
LJBass
%Europe/Berlin %874 %2007, 21:59
Hij werkt nu helemaal bedankt!
Nu heb ik nog een laatste vraagje :) , ik hem een beetje aan het uitbreiden:
// functie
function beweeg() {
this._y = Number(this._y) - Number(0.1);
if (this.nummer>"4") {
this._height = "120";
}
}
// Rondjes op scherm zetten
for (var i:Number = 0; i<10; i++) {
naamcirkel = "c"+i;
attachMovie("circkel", naamcirkel, this.getNextHighestDepth());
this[naamcirkel]._x = Number(i)*Number(35);
this[naamcirkel]._y = "10";
this[naamcirkel].nummer = i;
// Functie aan rondjes toekennen
this[naamcirkel].onEnterFrame = function() {
_root.beweeg();
}
}
De bedoeling is dat de rondjes nu bewegen (dat doen ze) en dat ze vanaf 4 groter worden.
Maar dat doen ze dus niet.. 8~
Erwinzzz
%Europe/Berlin %913 %2007, 22:56
Je variabele 'nummer' heeft het datatype Number. Iets tussen aanhalingstekens heeft het datatype String. Deze kan je natuurlijk niet met elkaar vergelijken. Je 4 hoeft helemaal niet tussen aanhalingstekens, het is immers gewoon een nummer. Bovendien is het niet nodig om alles te casten naar een Number door de 'Number()' notatie te gebruiken. Zeker gewone getallen zijn natuurlijk al Numbers, en je variabele 'i' bijvoorbeeld ook al. Dit zal het dus worden:
// functie
function beweeg() {
this._y = this._y - 0.1;
if (this.nummer>4) {
this._height = 120;
}
}
// Rondjes op scherm zetten
for (var i:Number = 0; i<10; i++) {
naamcirkel = "c"+i;
attachMovie("circkel", naamcirkel, this.getNextHighestDepth());
this[naamcirkel]._x = i*35;
this[naamcirkel]._y = "10";
this[naamcirkel].nummer = i;
// Functie aan rondjes toekennen
this[naamcirkel].onEnterFrame = function() {
_root.beweeg();
}
}
LJBass
%Europe/Berlin %578 %2007, 14:52
Hmm hij doet het nu ook niet.
Het lijkt erop ofdat hij de waarde uit "nummer" niet kan uitlezen.
Nummer is een variable die in het rondje staat.
Maar als ik hem niet naar het nummer laat kijken, maar naar bijvoorbeeld de x positie, dan werkt hij ook niet.
Waarschijnlijk zie ik iets over het hoofd, ik heb de fla toegevoegd.
frontLawn.mow()
%Europe/Berlin %459 %2007, 12:02
ff een tip:
for (var i:Number = 0; i<10; i++) {
var mc = attachMovie("circkel", "c"+i, this.getNextHighestDepth());
mc._x = i*35;
mc._y = 10;
mc.nummer = i;
// Functie aan rondjes toekennen
mc.onEnterFrame = function() {
_root.beweeg();
}
}
wat krijg je als je in de functie 'beweeg' 'this.nummer' traced??
function beweeg() {
this._y = this._y - 0.1;
trace(this.nummer);
if (this.nummer>4) {
this._height = 120;
}
}
p.s. een _y waarde is altijd een nummer, Number(this._y) is dus een beetje dubbelop, hetzelfde geldt voor Number(0.1), Number(i) en Number(35)
LJBass
%Europe/Berlin %489 %2007, 12:45
Dan krijg ik "undefined".
Hij kan dus het nummer niet uit lezen.
Er staat wel een nummer in, dus this.nummer is niet dat variable?
LJBass
%Europe/Berlin %713 %2007, 18:07
Ik heb een beetje zitten testen.
De cirkel heeft een extra variable: naam
Hierin zet ik: "test" Als ik deze trace krijg ik hem wel terug,
maar ik zie hem niet in mijn MC.
Dit heeft denk ik dezelfde reden als dat ik het nummer dat ik wel in de MC zichtbaar is wel zie maar niet kan tracen.
Waar zou dit aan kunnen liggen?
//functie
function beweeg() {
this._y = this._y-0.5;
this.naam = "test";
trace(this.naam);
if (this.nummer>4) {
this._height = 120;
}
}
//Rondjes op scherm zetten
for (i=0; i<1; i++) {
var mc = attachMovie("circkel", "c"+i, this.getNextHighestDepth());
mc._x = i*35;
mc._y = 10;
mc.nummer = i;
//Functie aan rondjes toekennen
mc.onEnterFrame = function() {
_root.beweeg();
};
}
LJBass
%Europe/Berlin %829 %2007, 20:54
Wat ik net ook ontdek is dat de ._y waarde sneller verandert naarmate er meer cirkels op de stage staan.
Dit betekend dat iedere MC de y van alle andere ook aanpast. :S
frontLawn.mow()
%Europe/Berlin %904 %2007, 22:42
als ik het zo aanhoor is de tijdlijn (scoop) 'this' in de functie 'beweeg' de _root en niet de tijdlijn van de movieclip. probeer het volgende eens:
(dus de variabele mc meegeven als parameter in de functie)
//functie
function beweeg(mc) {
mc._y =mc._y-0.5;
if (mc.nummer>4) {
mc._height = 120;
}
}
//Rondjes op scherm zetten
for (i=0; i<1; i++) {
var mc = attachMovie("circkel", "c"+i, this.getNextHighestDepth());
mc._x = i*35;
mc._y = 10;
mc.nummer = i;
//Functie aan rondjes toekennen
mc.onEnterFrame = function() {
_root.beweeg(mc);
};
}
dat verklaard dat de _y waarde steeds sneller gaat, hij verplaatst dan de _y van de _root bij iedere movieclip die er bij komt steeds 1x meer.
Wat ik net ook ontdek is dat de ._y waarde sneller verandert naarmate er meer cirkels op de stage staan.
Dit betekend dat iedere MC de y van alle andere ook aanpast. :S
p.s. zou ook de onEnterFrames een keer deleten als dat kan, maar dat tzt
LJBass
%Europe/Berlin %685 %2007, 17:27
Nu werkt alleen het laatste bolletje.
Dus hij wordt groter en beweegt. Maar hij beweegt weer 10x zo snel.
Hij beweegt ook door de andere bolletjes.
Is het misschien verstandig om hier een nieuw topic over te maken, omdat
het een ander onderwerp is?
frontLawn.mow()
%Europe/Berlin %781 %2007, 19:45
sorry,
de variabele 'mc' kun je beter niet 2 x gebruiken, dat zal 't probleem zijn.
het kan trouwens makkelijker:
//functie
function beweeg() {
this._y =mc._y-0.5;
if (this..nummer>4) {
this._height = 120;
}
}
//Rondjes op scherm zetten
for (i=0; i<1; i++) {
var mc = attachMovie("circkel", "c"+i, this.getNextHighestDepth());
mc._x = i*35;
mc._y = 10;
mc.nummer = i;
//Functie aan rondjes toekennen
mc.onEnterFrame = _root.beweeg;
}
dus in de functie 'beweeg' weer terug naar de 'this' scoop.
en niet
mc.onEnterFrame = function() {
_root.beweeg();
}
maar
mc.onEnterFrame = _root.beweeg;
LJBass
%Europe/Berlin %791 %2007, 19:59
frontLawn.mow() hartstikke bedankt!
Hij werkt :)
vBulletin® v3.8.1, Copyright ©2000-2012, Jelsoft Enterprises Ltd.