Thread: AS3 HitTestObject van een Array
-
23-12-2011, 09:43 #1Approved 9liver
- Registered
- 28/08/07
- Location
- Antwerpen
- Posts
- 1,706
- iTrader
- 45 (100%)
- Mentioned
- 0 Post(s)
- Reputation
- 0/3
AS3 HitTestObject van een Array
Kan iemand mij verder helpen?
Meer info omtrent het probleem dat ik heb kan je hier vinden:
[Problem] AS3 HitTestObject Of An Array - Flash & ActionScript | Dream.In.Code
Ik had die gisteren die al getypt. Als iemand nog wat meer info nodig heeft, laat het mij dan weten.Samsung Galaxy SIIIno votes
-
-
23-12-2011, 12:39 #2Member
- Registered
- 16/04/08
- Location
- Hong Kong
- Posts
- 1,989
- iTrader
- 6 (100%)
- Mentioned
- 0 Post(s)
- Reputation
- 7/9
Om een hittest uit te voeren heb je wel 2 objecten nodig, dus iets van:
object1.hitTestObject(object2)if (hitTestObject(allBlocks[i]))
{
trace("check " + i);
}no votes
-
23-12-2011, 16:43 #3Approved 9liver
- Registered
- 28/08/07
- Location
- Antwerpen
- Posts
- 1,706
- iTrader
- 45 (100%)
- Mentioned
- 0 Post(s)
- Reputation
- 0/3
Inderdaad. Maar mijn objecten zitten allemaal in mijn array. Daardoor zit ik dus vast

ik heb ook algeprobeerd. Maar zelfde resultaat...Code:for (var i = 1; i < allBlocks.length; i++) { if (this.hitTestObject(allBlocks[i])) { trace("check " + i); }Samsung Galaxy SIIIno votes
-
23-12-2011, 16:48 #4Member
- Registered
- 16/04/08
- Location
- Hong Kong
- Posts
- 1,989
- iTrader
- 6 (100%)
- Mentioned
- 0 Post(s)
- Reputation
- 7/9
Dan ga je eventueel 2 for loops moeten hebben, ongeveer zoiets als dit:
Code:for(var i = 0; i < allBlocks.length; i++) { for(var j = 0; j < allBlocks.length; j++) { if(allBlocks[i] != allBlocks[j]) { if(allBlocks[i].hitTestObject(allBlocks[j])) { // hit } } } }no votes
-
23-12-2011, 17:10 #5Member
- Registered
- 19/02/06
- Location
- -
- Posts
- 4,048
- iTrader
- 1 (100%)
- Mentioned
- 0 Post(s)
- Reputation
- 2/73
Als het blok waarvan je checkt of het geraakt wordt ook in die array zit, moet je waarschijnlijk dit doen:
Anders zou het kunnen dat de bounding box van je blokken veel te groot is.Code:for (var i = 0; i < allBlocks.length; i++) { if (this!=allBlocks[i] && this.hitTestObject(allBlocks[i])) { trace("check " + i); } }
Dan moet je eens kijken in je symbol genaamd Block en je ervan vergewissen dat alle gekleurde pixels rond je blok zeker uitgegomd zijn.no votes
-
23-12-2011, 17:29 #6Member
- Registered
- 16/04/08
- Location
- Hong Kong
- Posts
- 1,989
- iTrader
- 6 (100%)
- Mentioned
- 0 Post(s)
- Reputation
- 7/9
Oh, ik had niet gezien dat je die code uitvoert in de classe Block zelf, daarom is mijn code ook fout voor dit probleem.
Maar zoals YaMo zegt, je moet gewoon kijken dat je de huidige blok ook niet pakt, anders ga je altijd een hit krijgen.no votes
-
24-12-2011, 13:01 #7Approved 9liver
- Registered
- 28/08/07
- Location
- Antwerpen
- Posts
- 1,706
- iTrader
- 45 (100%)
- Mentioned
- 0 Post(s)
- Reputation
- 0/3
Bedankt dit heeft mij geholpen! Nu zoals je zegt, als ze naast mekaar vallen worden ze ook gehit. Dus dat ga ik nu eens proberen op te lossen

Bedankt voor uw hulp!
Bedankt voor uw hulp en uitleg!!Samsung Galaxy SIIIno votes
-
24-12-2011, 16:49 #8Member
- Registered
- 16/04/08
- Location
- Hong Kong
- Posts
- 1,989
- iTrader
- 6 (100%)
- Mentioned
- 0 Post(s)
- Reputation
- 7/9
Als ik het concept van je spel zo lees zou je misschien gemakkelijk Box2D kunnen gebruiken, een heel deel van je spel zal zo al gemaakt zijn.
Tevens is de collision detection daar net iets beter, maar dat kan je wss doen als je wat meer ervaren bent met AS3. (Zag dat het nog maar je eerste game is) AS3 Flash Physics Engine Box2DFlashAS3 2.0.1no votes
-
24-12-2011, 22:15 #9Approved 9liver
- Registered
- 28/08/07
- Location
- Antwerpen
- Posts
- 1,706
- iTrader
- 45 (100%)
- Mentioned
- 0 Post(s)
- Reputation
- 0/3
Ziet er inderdaad leuk en cool uit!
Maar ik ga het momenteel toch nog zonder doen
Momenteel heb ik 4 type blokjes en ze vallen al op mekaar, dus er is vooruitgang
Nu ga ik CollisionDetection implementeren tussen mijn blokjes en mijn Player. Hopen dat dat ook goed lukt en ik kan vandaag met een gerust hart gaan slapen
Samsung Galaxy SIIIno votes
-
25-12-2011, 16:21 #10Approved 9liver
- Registered
- 28/08/07
- Location
- Antwerpen
- Posts
- 1,706
- iTrader
- 45 (100%)
- Mentioned
- 0 Post(s)
- Reputation
- 0/3
Iemand die mij hier ff mee kan helpen. Zit er eigenlijk sinds gisteren mee vast, was het dan beu en gaan slapen... Vandaag er nog ff mee bezig geweest Maar verder geraak ik niet echt...
ik test of this(= mijnPlayer) een collision maakt met mijn array van blocks. Dit werkt wel perfect (ik krijg de trace te zien als hij het blokje raakt). Maar hoe laat ik hem stoppen met wandelen als er een collision is?Code:if (key.isDown(Keyboard.LEFT)) { //voorkomen dat Player buiten de scene komt langs de linker kant if (this.x > stageRef.stageWidth - stageRef.stageWidth + this.width / 2) { //Naar links stappen this.x -= 10; for (var i = 0; i < allBlocks.length; i++) { if (this.hitTestObject(allBlocks[i])) { trace("collision detection - LEFT"); } } } }
Ik dacht iets van
dus om this.x -=10 boven weg te halen en in de else te steken indien er geen collision is. Maar dan gaat hij nét super snel naar linksCode:if (this.hitTestObject(allBlocks[i])) { trace("collision detection - LEFT"); } else { this.x -=10; }
Wat doe ik verkeerd?Samsung Galaxy SIIIno votes
-
26-12-2011, 05:04 #11Member
- Registered
- 19/02/06
- Location
- -
- Posts
- 4,048
- iTrader
- 1 (100%)
- Mentioned
- 0 Post(s)
- Reputation
- 2/73
Als je het zoals in je bovenste voorbeeld doet, werkt het bewegen goed, buiten de collision detection?
Dan zal je zoiets moeten doen, waarschijnlijk:
Beter zou zijn om die hele forlus ook in een aparte functie isHit() ofzo te steken.Code:var hit:Boolean = false; for (var i = 0; i < allBlocks.length; i++) { if (!hit && this.hitTestObject(allBlocks[i])) { trace("collision detection - LEFT"); hit = true; } } if(!hit) { this.x -= 10; }no votes
-
26-12-2011, 13:34 #12Approved 9liver
- Registered
- 28/08/07
- Location
- Antwerpen
- Posts
- 1,706
- iTrader
- 45 (100%)
- Mentioned
- 0 Post(s)
- Reputation
- 0/3
Merci

Je was niet iets te laat, had het gisteren nacht al gevonden. Inderdaad heb het op deze manier gevonden, na zéér lang zoeken en denken
achja... Oefenen is de boodschap, toch?
Ik heb mijn code toch wel geoptimaliseerd door de forlus in een functie te steken zoals je zegt
Nu nog enkele foutjes eruit en collision is dan ook volledig afgewerkt
Samsung Galaxy SIIIno votes

