PDA

Volledige versie bekijken : spel Rivier Oversteken: addChild probleem


bertvthul
%Europe/Berlin %727 %2008, 17:27
Ik probeer een spel te maken waarin je een rivier moet oversteken (boomstammen etc.. waar je dan op moet springen, je kent het vast wel: zie voorbeeld van hoe 'ver' ik ben hier (http://www.focuscommunicatie.com/download/rivercross_01.html) ).

Ik loop tegen een probleem aan:

Nu voeg ik dus de childs toe aan het begin (var:debris houd het drijvende object, in dit geval een boom en debris zit weer in de rivier):

debris=new debrisHolder;
riverHolder_mc.addChild(debris);
boom = new tree;
debris.addChild(boom);
debris.x=300;
debris.y=120;
debris.name="debris2";

debris=new debrisHolder;
riverHolder_mc.addChild(debris);
boom = new tree;
debris.addChild(boom);
debris.x=200;
debris.y=270;
debris.name="debris";


Probleem:
Het probleem is dat de nu volgende HitTest alleen werkt op de laatst toegevoegde debris. Dit is de code voor de HitTest:


if (jumpieHolder_mc.hitTestJumpie_mc.hitTestObject(de bris)){
trace ("HIT: "+jumpieHolder_mc.parent.name);
debris.addChild(jumpieHolder_mc);
jumpieHolder_mc.x=0;
jumpieHolder_mc.y=0;
} else {
trace ("PLONS");
}


De onderste boomstam werkt dus perfect: je ziet dat het figuurtje een child wordt van de boomstam doordat deze op het midden ervan terecht komt na de HITTEST. Bij de bovenste Boomstam werkt het echter niet.

Als dit nog niet duidelijk is, heb ik HIER (http://www.focuscommunicatie.com/download/rivercross_01.fla) de fla staan.

Wie heeft enig idee waar dit aan ligt en kan wat tips geven?

B-Mantis
%Europe/Berlin %845 %2008, 20:17
elke boomstam is een instantie. Als jij zegt mc1.hitTestObject(mc2), dan check je een collision voor precies 2 instanties. Je zult dus de referentie naar elke boomstam moeten onthouden (array?), en een voor een checken of je hem raakt:

for (var i:int = 0; i < myArray.length; i++) {
if (mc1.hitTestObject(myArray[i])) {
//etc
}
}

bertvthul
%Europe/Berlin %400 %2008, 09:37
Ik dacht al dat zoiets een oplossing zou zijn, maar het leek me iets te omslagtig.
Nu het toch zo is, zal ik dat er in bouwen. Dat moet inderdaad vast wel gaan werken.

Dank voor je reactie!

bertvthul
%Europe/Berlin %811 %2008, 19:28
Ik heb zoals hierboven is voorgesteld een for loopje gedaan om de instances van debris te creeëren. De instancenamen worden opgeslagen in een array. Wanneer via een andere for-loop een hittest check wordt uitgevoerd, moet bij een positief resultaat het poppetje toegevoegd worden aan de debris. De debris roep ik dan aan via de instancenaam (ik heb de instancenaam even gehardcoded):

riverHolder_mc.getChildByName("instance21").addChild(jumpieHolder_mc);

De foutmelding: 1061: Call to a possibly undefined method addChild through a reference with static type flash.display:DisplayObject.

of andere notitie:

riverHolder_mc[getChildByName("instance21")].addChild(jumpieHolder_mc);

Foutmelding: TypeError: Error #1010: A term is undefined and has no properties.
at rivercross_02_fla::MainTimeline/rivercross_02_fla::frame1()

Dit werkt echter niet!


Wat gaat hier mis? Hoe kan dit wel? Dank alvast!