1. #1
    mXXX's Avatar
    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 SIII
    no votes  

  2. #2
    W0utR's Avatar
    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  

  3. #3
    mXXX's Avatar
    Registered
    28/08/07
    Location
    Antwerpen
    Posts
    1,706
    iTrader
    45 (100%)
    Mentioned
    0 Post(s)
    Reputation
    0/3
    Quote Originally Posted by W0utR View Post
    This quote is hidden because you are ignoring this member. Show
    Om een hittest uit te voeren heb je wel 2 objecten nodig, dus iets van:
    Inderdaad. Maar mijn objecten zitten allemaal in mijn array. Daardoor zit ik dus vast

    ik heb ook al
    Code:
    for (var i = 1; i < allBlocks.length; i++)
    			{
    				if (this.hitTestObject(allBlocks[i]))
    				{
    					trace("check " + i);
    					
    				}
    geprobeerd. Maar zelfde resultaat...
    Samsung Galaxy SIII
    no votes  

  4. #4
    W0utR's Avatar
    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  

  5. #5
    YaMo's Avatar
    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:

    Code:
    for (var i = 0; i < allBlocks.length; i++)
    {
    	if (this!=allBlocks[i] && this.hitTestObject(allBlocks[i]))
    	{
    		trace("check " + i);
    					
    	}
    }
    Anders zou het kunnen dat de bounding box van je blokken veel te groot is.
    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  

  6. #6
    W0utR's Avatar
    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  

  7. #7
    mXXX's Avatar
    Registered
    28/08/07
    Location
    Antwerpen
    Posts
    1,706
    iTrader
    45 (100%)
    Mentioned
    0 Post(s)
    Reputation
    0/3
    Quote Originally Posted by YaMo View Post
    This quote is hidden because you are ignoring this member. Show
    Als het blok waarvan je checkt of het geraakt wordt ook in die array zit, moet je waarschijnlijk dit doen:

    Code:
    for (var i = 0; i < allBlocks.length; i++)
    {
    	if (this!=allBlocks[i] && this.hitTestObject(allBlocks[i]))
    	{
    		trace("check " + i);
    					
    	}
    }
    Anders zou het kunnen dat de bounding box van je blokken veel te groot is.
    Dan moet je eens kijken in je symbol genaamd Block en je ervan vergewissen dat alle gekleurde pixels rond je blok zeker uitgegomd zijn.
    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!


    Quote Originally Posted by W0utR View Post
    This quote is hidden because you are ignoring this member. Show
    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.
    Bedankt voor uw hulp en uitleg!!
    Samsung Galaxy SIII
    no votes  

  8. #8
    W0utR's Avatar
    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.1
    no votes  

  9. #9
    mXXX's Avatar
    Registered
    28/08/07
    Location
    Antwerpen
    Posts
    1,706
    iTrader
    45 (100%)
    Mentioned
    0 Post(s)
    Reputation
    0/3
    Quote Originally Posted by W0utR View Post
    This quote is hidden because you are ignoring this member. Show
    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.1
    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 SIII
    no votes  

  10. #10
    mXXX's Avatar
    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...
    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 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?
    Ik dacht iets van

    Code:
    if (this.hitTestObject(allBlocks[i]))
    						{
    							trace("collision detection - LEFT");
    						}
    else
    {
    this.x -=10;
    }
    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 links
    Wat doe ik verkeerd?
    Samsung Galaxy SIII
    no votes  

  11. #11
    YaMo's Avatar
    Registered
    19/02/06
    Location
    -
    Posts
    4,048
    iTrader
    1 (100%)
    Mentioned
    0 Post(s)
    Reputation
    2/73
    Quote Originally Posted by mXXX View Post
    This quote is hidden because you are ignoring this member. Show
    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?

    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 links
    Wat doe ik verkeerd?
    Als je het zoals in je bovenste voorbeeld doet, werkt het bewegen goed, buiten de collision detection?
    Dan zal je zoiets moeten doen, waarschijnlijk:

    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;
    }
    Beter zou zijn om die hele forlus ook in een aparte functie isHit() ofzo te steken.
    no votes  

  12. #12
    mXXX's Avatar
    Registered
    28/08/07
    Location
    Antwerpen
    Posts
    1,706
    iTrader
    45 (100%)
    Mentioned
    0 Post(s)
    Reputation
    0/3
    Quote Originally Posted by YaMo View Post
    This quote is hidden because you are ignoring this member. Show
    Als je het zoals in je bovenste voorbeeld doet, werkt het bewegen goed, buiten de collision detection?
    Dan zal je zoiets moeten doen, waarschijnlijk:

    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;
    }
    Beter zou zijn om die hele forlus ook in een aparte functie isHit() ofzo te steken.
    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 SIII
    no votes  

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •  

Log in

Log in