PDA

Volledige versie bekijken : Hit test alleen eerste keer?


jeroendenoot
%Europe/Berlin %879 %2007, 21:06
Hallo, ik ben bezig met een spel te maken voor school. Ik ben nog maar sinds kort met Flash en Actionscript en ik stuit nu op een probleem waar ik niet uitkom. Ik heb al een tijdje gezocht en geprobeerd, maar het lukt me niet het op te lossen.
Het gaat om een bootje dat je naar rechts en links kan bewegen met de pijltjestoetsen en er komen rotsen op het bootje af die ontweken moeten worden. Nu heb ik een hit test erin gemaakt, maar deze werkt alleen de eerste keer.

Dit is het actionscript die een rots bijvoegt:


var rockinterval;
var rockobject;
var rockdepth = 0;
addrock();
function addrock(){
clearInterval(rockinterval);
rockdepth++;
while(getInstanceAtDepth(rockdepth)){
rockdepth++;
};
_root.ship.swapDepths(rockdepth + 1);
rockinterval = setInterval(addrock, Math.random() * 2000 + 1000, rockdepth);
rockobject = attachMovie("rock", "rock", rockdepth);
rockobject._x = Math.random() * 350 + 100;
rockobject._y = 100;
}


Dit is het actionscript dat in de movie clip 'rock' staat om het raken met de boot te testen (wat dus niet werkt):

onClipEvent(enterFrame){
if(hitTest(_root.ship.shipobject.shipbottom)){
trace("Raak");
}
}

Ik krijg alleen 'Raak' in de output als ik met de boot de eerste rots raak, maar bij de daarop volgende rotsen niet.
Het FLA-bestand staat in de bijlage ter verduidelijking.

Zou iemand me misschien kunnen helpen dit probleem op te lossen?

jeroendenoot
%Europe/Berlin %561 %2007, 13:28
Ik ben erachter gekomen dat het door de depth komt, want als ik deze regel weghaal:
_root.ship.swapDepths(rockdepth + 1);

En ik doe bij attachmovie 1 als depth:
rockobject = attachMovie("rock", "rock", 1);

Dan werkt het wel, het probleem is dan dat als er een nieuwe steen wordt gemaakt, de oude wordt overschreven en dan opeens verdwijnt als die nog niet de onderkant heeft bereikt.
Weet iemand misschien hoe ik dit op moet lossen?

jeroendenoot
%Europe/Berlin %598 %2007, 14:21
Ik ben er inmiddels achter. De attachmovie moest een unieke naam hebben. Dat is dus geworden: rockobject = attachMovie("rock", "rock", 1);