PDA

Volledige versie bekijken : MovieClip aanmaken op basis van XML gegevens


wnwiig
%Europe/Berlin %855 %2007, 21:31
Hallo, ik ben voor een projectje van school bezig met een soort van multiplayer spelletje.

Heb een movieclip (plattegrond, gebaseerd op MovieClip obstakel) en zelf ben je een movieclip (hero, gebaseer op MovieClip poppetje)

Lopen doe ik door de x en y van de plattegrond te veranderen, dus de plattegrond schuift onder je door. De x en y waarde stuur ik naar een extern php bestand, die dit in een database stopt, en daarna een query uitvoert waarbij alle spelers met hun posities in een xml bestand worden gestopt, wat ik vervolgens weer uitlees binnen Flash.

bij het uitlezen van de XML gebruikte ik:

for( var i = 0; i < root.childNodes.length; i++){
CharName = root.childNodes[i].attributes.CharName;
PosX = root.childNodes[i].attributes.PosX;
PosY = root.childNodes[i].attributes.PosY;

trace(CharName + " staat op [" + PosX + "," + PosY + "].");
}
Daarmee kreeg ik dus heel mooi:
Sjappa staat op [357,-638].
Lala staat op [321,-680].

Nu wilde ik dus de movieclip poppetje gebruiken, om deze op basis van het XML bestand, op de plattegrond neer te zetten, zodat je de overige spelers ook te zien kreeg, helaas lukt dit niet.

Ik heb al flink gegoogled, maar kom er niet uit. Ik heb nu dit:

for( var i = 0; i < root.childNodes.length; i++){
CharName = root.childNodes[i].attributes.CharName;
PosX = root.childNodes[i].attributes.PosX;
PosY = root.childNodes[i].attributes.PosY;

_root.plattegrond.attachMovie("poppetje",CharName, this.getNextHighestDepth());
_root[CharName]._x = PosX;
_root[CharName]._y = PosY;
}

Weet iemand wat ik fout doe, en hoe ik dit op de juiste manier kan aanpakken?

Alvast bedankt

frontLawn.mow()
%Europe/Berlin %911 %2007, 22:53
lijkt te kloppen, alleen is alles uit XML altijd een String, probeer eens:

_root[CharName]._y = Number(PosY);


moet het trouwens niet '_root' i.p.v. 'root' zijn:
PosY = root.childNodes[i].attributes.PosY;

of hoe zit dat? ze worden n.l. wel getraced...

frontLawn.mow()
%Europe/Berlin %914 %2007, 22:56
nog een tip:

for( var i = 0; i < root.childNodes.length; i++){
var mc =_root.plattegrond.attachMovie("poppetje",CharName, this.getNextHighestDepth());
mc._x = ...;
mc._y = ...;
}


this.getNextHighestDepth() zou alleen kloppen als je ook this.attachMovie() doet...
doe dus beter _root.plattegrond.getNextHighestDepth()
of gewoon i

wnwiig
%Europe/Berlin %923 %2007, 23:10
Bedankt voor je reactie. Ze worden idd wel gewoon getraced. Dus daarom snapte ik het al niet.
Volgens mij zit de fout gewoon in dat attachMovie, maar snap echt niet wat ik verkeerd doe.

De movieclip 'poppetje' uit de libary moet eigenlijk IN instance name 'plattegrond' terecht komen, met als naar de 'CharName' op diepte 'i' op de door mij aangegeven x en y positie.


var mc = _root.plattegrond.attachMovie("poppetje",CharName, i);
mc._x = PosX;
mc._y = PosY;

wnwiig
%Europe/Berlin %645 %2007, 16:29
Het idee is opgelost, ik had een heel raar probleem met incorrecte x en y coördinaten, dus mijn overige movieclips waren er wel, maar totaal niet binnen het bereik van je eigen character.

Nu ben ik wel op een volgend probleem opgelopen. Wanneer ik de applicatie in Internet Explorer of Opera open, dan krijg ik wel de overige characters te zien, echter bewegen ze niet. Wanneer ik in Firefox open, dan bewegen ze wel gewoon :S

Dus ergens zit er een fout, waarmee hij niet goed de ._x en ._y neerzet, maar dan alleen in andere browsers dan Firefox.
Ik dacht dat Flash echt totaal NIET gevoelig was voor andere browsers, maar kennenlijk gaat het ergens niet helemaal lekker. Iemand een idee?

** EDIT **
Firefox geeft in de statusbar steeds aan dat hij aan het vernieuwen is, Internet Explorer zegt gewoon: 'Gereed'

Voorbeeldje op: http://ns2010.stefanvanburen.nl/proto/

frontLawn.mow()
%Europe/Berlin %830 %2007, 20:55
ik (op 'n mac) zie in FireFox, Safari én IE alleen me eigen manneke...
raar...

worden de gegevens uit een XML geladen? Heb je gebruik gemaakt van de onLoad-functie?
anders zou 't kunnen zijn dat de ene browser niet snel genoeg de xml laadt en de andere wel (ofzo...)

wnwiig
%Europe/Berlin %805 %2007, 20:19
Ik deed alles in on onEnterFrame, maar dit leverde nogal vertragingen op, dus ben met timertjes gaan werken... (var ++) om zo maar eens in de x frames dingen uit te voeren.

Maar ik ben kom nu echt op rare dingen uit...


NSimName = "Sjappa";
NSimPosX = "1000";
NSimPosY = "2000";

var mc = attachMovie("Character", NSimName, this.getNextHighestDepth(), {x:NSimPosX,y:NSimPosY});
mc._x = NSimPosX;
mc._y = NSimPosY;
mc.CharName.text = NSimName;

Hiermee krijg ik netjes een MovieClip, met daarin de naam van de NSim
Wanneer ik dit 2 keer, 3 keer, 4 keer enz. doe, en ik verander enkele variabelen, dan krijg ik gewoon netjes op meerdere plaatsen een poppetje. Echter wanneer ik dit uitvoer vanuit een loop, dan pakt ie dit niet meer...

for(var i:Number=0; i<TotalNSims;i++){ // For each NSim.
NSimSettingsArray = new Array();
NSimSettingsArray = NSimsArray[i].split("|"); //Split into sperated vars.

NSimName = NSimSettingsArray[1];
NSimPosX = NSimSettingsArray[2];
NSimPosY = NSimSettingsArray[3];
trace ("\t Let's Place "+NSimName+" at ("+NSimPosX+","+NSimPosY+")");

var mc = attachMovie("Character", NSimName, this.getNextHighestDepth(), {x:NSimPosX,y:NSimPosY});
mc._x = NSimPosX;
mc._y = NSimPosY;
mc.CharName.text = NSimName;


Snap er echt niets van, omdat ik in mijn trace wel gewoon netjes de output krijg van de door mij gezette characters:
Let's Place Test 2 at (985,1924)
Let's Place Test 1 at (1085,1924)

Wanneer ik alleen zelf ben, zijn er geen andere... logisch, als ik er met eentje bijkom, zijn we netjes met z'n 2en, komt er een derde bij, dan zie ik:
bij de 1e wel de 3e, maar niet meer de 2e...
bij de 2e wel de derde, maar de 1e verdwijnt...
bij de 3e wel de 2e, maar niet de 1e...