Toon posts:

[Flash MX] Aanspreken mc na attachMovie

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik lees een xml file uit, dump deze in een array en ga vervolgens een for loop uitvoeren om deze te tonen. Voor elke entry wordt een MC toegevoegd, waarvan ik properties wil wijzigen of toevoegen.

Dit gaat goed:
attachMovie("tickerItem","sLine"+i,i+1000);
//newTickerEntry = this["sLine" + i];
newTickerEntry = _root["sLine"+i];
newTickerEntry._y = i + 50;
trace(newTickerEntry);

Dit gaat niet goed:
entryList.attachMovie("tickerItem","sLine"+i,i+1000);
//newTickerEntry = this["sLine" + i];
newTickerEntry = _root.entryList["sLine"+i];
newTickerEntry._y = i + 50;
trace(newTickerEntry);

Ik krijg in mijn trace undefined terug. Heb ook al _parent geprobeerd maar helaas. Wat vooral onduidelijk is, is de vaagheid in het gebruik van this. De ene keer mag je wel een directe referentie doen, en de andere keer weer niet.

duplicateMovie staat het toe, maar attachMovie weer niet, dus ben ik benieuwd hoe dit nu zit?

[ Voor 9% gewijzigd door Verwijderd op 12-05-2003 09:36 ]


  • Willem
  • Registratie: Februari 2001
  • Laatst online: 22-08 22:08
Ben er min of meer vanuit gegaan dat het over Flash MX gaat :)

Motor (of auto) onderhoud bijhouden


  • Hans.Solo
  • Registratie: November 2000
  • Laatst online: 20-08 09:03

Hans.Solo

Tank n00bje :P

Is dat de volledige code?? of alleen het relevante stukkie?
Want zoals ik het nu lees is entrylist verder nergens gedefinieerd

zou 'entrylist = new MovieClip();' misschien uitkomst kunnen bieden??

99 bugs in the code , 99 bugs in the code
Take on down and patch it up...
117 bugs in the code.


Verwijderd

Topicstarter
Het gaat idd over Flash MX. De MC entryList, is reeds aanwezig op het canvas, en is ook gelinked als actionscript object.

De vode is alleen het relevante stukje.

  • GrimaceODespair
  • Registratie: December 2002
  • Laatst online: 10:32

GrimaceODespair

eens een tettenman, altijd ...

Hans.Solo schreef op 12 May 2003 @ 09:39:
zou 'entrylist = new MovieClip();' misschien uitkomst kunnen bieden??
Zo maak je wel een MC, maar die is niet visueel. Vandaar het bestaan van attachMovie, die ook resources aanmaakt etc.

Wat betreft het aanspreken van de de nieuwe mc. Je kan ook
code:
1
newTickerEntry = entryList.attachMovie("tickerItem", "sLine" + i, i + 1000);
doen. Dan krijg je'm rechtstreeks in je newTickerEntry variabele.

Wij onderbreken deze thread voor reclame:
http://kalders.be


Verwijderd

Topicstarter
Maar daar ligt dus bij mij de verwarring. De ene keer laat Flash wel een directe verwijzing toe, de andere keer niet. Na een duplicatieMovie kan ik ook direct this["var" + i]; doen, maar ook dit is maar beperkt toegestaan.

Verwijderd

Ik mis zo'n beetje overal in de code een basis scope (zoals this. of, mischien (KOTS) _root).
Ik ga er dan ook vanuit dat wat jij creeert dan ook op _root verschijnt.

Ik zie geen direct probleem in de theoretische techniek.

Upload eens een .fla zoals je probleem .fla.

Verwijderd

Topicstarter
GrimaceODespair schreef op 12 May 2003 @ 09:42:
[...]

Zo maak je wel een MC, maar die is niet visueel. Vandaar het bestaan van attachMovie, die ook resources aanmaakt etc.

Wat betreft het aanspreken van de de nieuwe mc. Je kan ook
code:
1
newTickerEntry = entryList.attachMovie("tickerItem", "sLine" + i, i + 1000);
doen. Dan krijg je'm rechtstreeks in je newTickerEntry variabele.
Heb ik zojuist geprobeerd, maar helaas. Ook hier wordt undefined gereturned. Ik vind het maar vaag hoor :D

function test(){
for(i=0; i<aTicker.length-1; i++){

newEntry = _root.entryList.attachMovie("tickerItem","sLine"+i, mcIndex++);
newEntry._y = i * 27;

newEntry.oTicker_Entry.html = true;
newEntry.oTicker_Entry.selectable = false;
newEntry.oTicker_Entry.background = true;
newEntry.oTicker_Entry.textColor = 0x004477;
newEntry.oTicker_Entry.htmlText = 'headlne';
newEntry.oTicker_Entry.link = 'link';

newEntry.onPress = function () {
this.oTicker_Entry.backgroundColor = this.oldColor;
getURL(this.oTicker_Entry.link, "_blank");
};

newEntry.onRollOver = function () {
this.oldColor = this.oTicker_Entry.backgroundColor;
this.oTicker_Entry.backgroundColor = 0xDDEEFF;
};

newEntry.onRollOut = function () {
this.oTicker_Entry.backgroundColor = this.oldColor;
};


}

  • GrimaceODespair
  • Registratie: December 2002
  • Laatst online: 10:32

GrimaceODespair

eens een tettenman, altijd ...

Wat jij probeert, kan iig niet. Flash maakt zijn nieuwe MC's altijd aan in een schermobject (een andere MC). Je kan dus niet een MC aanmaken die vervolgens magischerwijs in een array terechtkomt. Wel wordt hij automatisch addresseerbaar via de MC (bv: my_mc[mc_name]).

Wat doe jij trouwens met die array op voorhand? Maak je gewoon een lege aan?

Wij onderbreken deze thread voor reclame:
http://kalders.be


Verwijderd

Topicstarter
Verwijderd schreef op 12 May 2003 @ 10:00:
Ik mis zo'n beetje overal in de code een basis scope (zoals this. of, mischien (KOTS) _root).
*7 of 9 mode* Please explain :)

Ik heb Flash al bijna meer als een jaar niet meer aangeraakt, dus meot mijn kennis weer bijwerken ( en even spelen met de resource kits :P ) :)

Verwijderd

Topicstarter
GrimaceODespair schreef op 12 May 2003 @ 10:05:
Wat jij probeert, kan iig niet. Flash maakt zijn nieuwe MC's altijd aan in een schermobject (een andere MC). Je kan dus niet een MC aanmaken die vervolgens magischerwijs in een array terechtkomt. Wel wordt hij automatisch addresseerbaar via de MC (bv: my_mc[mc_name]).

Wat doe jij trouwens met die array op voorhand? Maak je gewoon een lege aan?
Nee die array bevat alle entries van het xml bestand. Deze moet ik op een later tijdstip gaan husselen en schudden.

  • GrimaceODespair
  • Registratie: December 2002
  • Laatst online: 10:32

GrimaceODespair

eens een tettenman, altijd ...

Je doet dus een attachMovie op een array? Dat kan al helemaal niet.

Wij onderbreken deze thread voor reclame:
http://kalders.be


Verwijderd

Topicstarter
GrimaceODespair schreef op 12 May 2003 @ 10:10:
Je doet dus een attachMovie op een array? Dat kan al helemaal niet.
Nee ik doe een attachMovie op een movieClip. Ik loop alleen door de lengte van de array heen. Naderhand, dus als de movieClip is attached, ga ik properties zetten op de nieuwe movieclip adhv values uit de array. Ik loop dus ook door de array aTicker -1, want ik wil het laatste item scheiden.

[ Voor 10% gewijzigd door Verwijderd op 12-05-2003 10:15 ]


  • GrimaceODespair
  • Registratie: December 2002
  • Laatst online: 10:32

GrimaceODespair

eens een tettenman, altijd ...

Uit alles wat je hier al gepost hebt, begreep ik dat je een array _root.entryList had, waarin je XML data hebt staan ivm ticker. In je tweede voorbeeld zie ik je daar attachMovie op doen. Ik denk dat ik niet meer helemaal kan volgen. Anders moet je't probleem nog 1 keer samenvatten (het ligt wsch aan mij hoor ;) )

Wij onderbreken deze thread voor reclame:
http://kalders.be


Verwijderd

Topicstarter
Ik zal even de volledige code posten, dan wordt het wat duidelijker misschien. Wat ik aan het maken ben is eigenlijk een exacte kopie van de Macromedia ticker op hun homepage. Dus 1 item is zichtbaar, en zodra je het openklapt worden alle items -1 zichtbaar. Om een bepaalde tijd wordt het laatste item gepakt uit de 9 beschikbare items (het uitklapmenu), en getoond.

Ik lees eerst het xml bestand uit, en plaats deze items in een array:

// create a new newsfeed line object
function oTickerItem (type,headline,link) {
this.type = type;
this.headline = headline;
this.link = link;
}

// convert xml file to flash array
function XmlToArray(success) {
if (success) {
for (i=0; i<myXML.firstChild.childNodes.length; i++){
for (j=0; j<myXML.firstChild.childNodes[i].childNodes.length; j++) {
type = myXML.firstChild.childNodes[i].childNodes[0].childNodes[0].nodeValue;
headline = myXML.firstChild.childNodes[i].childNodes[1].childNodes[0].nodeValue;
link = myXML.firstChild.childNodes[i].childNodes[2].childNodes[0].nodeValue;
}
oTmp = new oTickerItem (type,headline,link);
aTicker.push(oTmp);
delete oTmp;
}
_root.gotoAndPlay("showEntryList");
}else{
loading = "xml failed to load";
}
}

var aTicker = [];

myXML = new XML();
myXML.ignoreWhite = true;
myXML.onLoad = XmlToArray;
myXML.load("ticker.xml");
stop();

In showEntryList, heb ik de movieClip met de naam "entryList" aan het canvas toegevoegd. Linkage staat ook op de naam "entryList". Dit is de movieclip die de 9 items gaat bevatten die niet zichtbaar zijn en die dus opengeklapt kan worden. Aan deze movieclip ga ik dus voor elke headline een movieClip attachen, en ik heb hiervoor de movieClip "tickerItem" aangemaakt, en ook in linkage zo genoemd.

Nu ga ik door de array heen loopen, en alle items - 1 (dat ene item, de zichtbare headline wordt in een andere movieClip gezet) aan de entryList movieclip hangen. De entryList moveclip krijgt een motion tween mee, om het open en dichtklappen te doen.

mcIndex = 1;

function test(){
for(i=0; i<aTicker.length-1; i++){

newEntry = _root.entryList.attachMovie("tickerItem","sLine"+i, mcIndex++);
trace(newEntry);
newEntry._y = i * 27;

newEntry.oTicker_Entry.html = true;
newEntry.oTicker_Entry.selectable = false;
newEntry.oTicker_Entry.background = true;
newEntry.oTicker_Entry.textColor = 0x004477;
newEntry.oTicker_Entry.htmlText = 'headlne';
newEntry.oTicker_Entry.link = 'link';

newEntry.onPress = function () {
this.oTicker_Entry.backgroundColor = this.oldColor;
getURL(this.oTicker_Entry.link, "_blank");
};

newEntry.onRollOver = function () {
this.oldColor = this.oTicker_Entry.backgroundColor;
this.oTicker_Entry.backgroundColor = 0xDDEEFF;
};

newEntry.onRollOut = function () {
this.oTicker_Entry.backgroundColor = this.oldColor;
};


}


Als ik dus de 2de lijn zoals bovenstaande bekijk voegt hij dus aan de movieClip entryList een nieuwe movieclip toe. Dit gaat fout, echt als ik deze lijn wijzig in:

newEntry = _root.attachMovie("tickerItem","sLine"+i, mcIndex++);

gaat het wel goed. Alhoewel ik hem niet in de root wil hebben, wordt hij wel goed getoond.

  • GrimaceODespair
  • Registratie: December 2002
  • Laatst online: 10:32

GrimaceODespair

eens een tettenman, altijd ...

En als je een trace doet op _root.entryList, bestaat die wel?

Wij onderbreken deze thread voor reclame:
http://kalders.be


Verwijderd

Topicstarter
GrimaceODespair schreef op 12 May 2003 @ 11:07:
En als je een trace doet op _root.entryList, bestaat die wel?
Ik heb zojuist alles van het canvas afgepleurd, en opnieuw toegevoegd, en het werkt. Vaagheid ten top. Instance names waren gelijk etc..

  • oh,when?
  • Registratie: April 2000
  • Niet online

oh,when?

...

dhtml junks moeten gewoon niet met Flash MX spelen...klaar...das gewoon een nivo hoger. :P >:) ;)

"You're only as good, as what you did last week."


Verwijderd

Topicstarter
oh,when? schreef op 12 mei 2003 @ 11:49:
dhtml junks moeten gewoon niet met Flash MX spelen...klaar...das gewoon een nivo hoger. :P >:) ;)
Hoort dat .... "internet redde mijn leven" >:)

Verwijderd

LOL :)

Verwijderd

Topicstarter
Hah! nog één die het vakblad voor het tussendoortje op de plee gelezen heeft >:)

  • oh,when?
  • Registratie: April 2000
  • Niet online

oh,when?

...

Verwijderd schreef op 12 May 2003 @ 12:48:
[...]Hoort dat .... "internet redde mijn leven" >:)
:D :D :D

"You're only as good, as what you did last week."

Pagina: 1