Volledige versie bekijken : Duplicate movieclip
zynex_18
%Europe/Berlin %016 %2005, 01:23
Ik heb een schietspel, waarbij als je schiet. word een bepaalde movieclip gedupliceerd. Na 30 copies, word de als 1st gedupliceerde movieclip verwijderd. Zie hieronder:
_parent.copy = number(_parent.copy)+ 1;
if (number(_parent.copy)>100) {
copy = 1;
}
duplicateMovieClip("_root.bullet1", "bullet1" add _parent.copy, _parent.copy);
Als ik nu een hitbox maak, wil ik daarin het script:
if (hitTest(??)==true) {
_parent.play();
}
Oftewel. wanneer 1 van de copies van de bullet deze hitbox raakt. speelt hij een animatie af dat de enemy doodgaat. Welke instancename moet ik invullen bij de vraagtekens?
Als ik dit niet vor mekaar krijg, dan moetik een hitTest script in de bullet gaan zetten, en moet ik elke vijand in het spel een aparte naam geven. en een aparte movieclip. en dat is alleen maar moeilijk doen.
Kan iemand mij hiermee helpen?
Bij voorbaat dank,
Zynex
SaphuA
%Europe/Berlin %019 %2005, 01:27
Er zijn twee veel voorkomende manieren om dit te doen:
- Je kunt elke bullet een apaprte onEnterFrame meegeven, waarin hij een hitTest uitvoert op elk object.
- Je kunt door alle buttons loopen (for of while) en kijken of er een hitTest plaatsvind tussen een bullet en object.
mateo)
%Europe/Berlin %036 %2005, 01:51
zoiets als dit zou moeten werken. (ik ga ervan uit dat je 'hit box' hitBox als instance naam heeft)
_parent.copy++;
if (_parent.copy > 100) {
_parent.copy = 1;
}
var d:MovieClip = duplicateMovieClip("_root.bullet1", "bullet1" + _parent.copy, _parent.copy);
d.onEnterFrame = function():Void{
if(this.hitTest(_root.hitBox)){
// vervolgacties hier:
// vergeet niet hier je bullet te removen of de enter frame actie uit te schakelen. voor dat laatste kan je dit doen:
delete this.onEnterFrame;
}
}
(ik heb jouw _parent even aangehouden, maar volgens mij kan daar net zo goed _root staan)
zynex_18
%Europe/Berlin %309 %2005, 08:25
das niet helemaal wat ik bedoel. Ik wil alleen wete welke instancename ik moet invullen bij de vraagtekens. De hitbox zit IN een enemy. zodra die hitbox word geraakt door een copy van de _root.bullet movieclip, speelt hij een animatie af dat de enemy doodgaat.
Ik heb al dingen zoals dit uitgeprobeerd:
this.hitTest(_root.bullet(copy))==true;
this.hitTest(_root.bullet(_root.copy))==true;
Maar dat werkt niet. [V]
gbolssens
%Europe/Berlin %403 %2005, 10:41
2 opmerkinkjes:
1) de juiste syntax van de hitTest()-method van 't MovieClip-object is:
my_mc.hitTest(target:Object) : Boolean
dus zoals jij doet:
mc1.hitTest(mc2(mc3));
kan niet werken.
Jouw code wordt dus:
_root.copy.hitTest(_root.bullet); // geeft true als ze mekaar raken
2) Als de return-waarde van een functie boolean is, dan hoef je niet meer ==true of ==false te doen. maar kan je zo werken:
var a:Boolean = true;
if (a)
{
//code hier voor als a true is
}
// of als je alleen wil detecteren of a false is:
if (!a)
{
//code hier voor als a false is
}
Ik heb ooit ook zo een probleem gehad, en ik ben toen in de Flash Help gaan kijken. Daar kwam ik erachter dat hitTest op 2 manieren gebruikt kan worden:
my_mc.hitTest(x:Number, y:Number, shapeFlag:Boolean) : Boolean
my_mc.hitTest(target:Object) : Boolean
meestal wordt de onderste gebruikt (mc raakt mc), maar de bovenste heeft zeker ook zijn nut. Daarmee kan je nagaan of een bepaald punt de mc raakt. In jouw geval is dat dan:
_root.copy.hitTest(_root.bullet._x, _root.bullet._y, true);
dat komt op hetzelfde neer, alleen dat dan niet getest wordt of de contouren van _root.bullet de contouren van _root.copy raken, maar er wordt getest of het registratiepunt van _root.bullet de contouren van _root.copy raakt.
Als je de parameter shapeflag op false zet, dan wordt er getest of het registratiepunt van _root.bullet binnen de kleinst omsluitende rechthoek rond _root.copy valt. (dit laatste werkt sneller dan dat je shapeflag=true gebruikt, heb ik me laten vertellen)
greetz,
GB
mateo)
%Europe/Berlin %427 %2005, 11:16
(is _root.copy nou een mc of een counter?)
vBulletin® v3.8.1, Copyright ©2000-2012, Jelsoft Enterprises Ltd.