1 Reply Latest reply on Nov 2, 2017 3:23 PM by JoãoCésar

    How do I detect if a certain object is touching a certain color?

    Alex_greatish Level 1

      So basically I'm attempting to make a two player game:

       

      1.png

      One player is the circle the other is a square. I want the square to be the only thing that can go through the color red, but when it covers up the red:

      2.png

      The circle SHOULD be able to go through it. I thought that the easiest way to do this would be through detecting if the circle is touching a certain color (red) but I'm not sure how do that, if it is the best way.

       

      Hopefully that made sense. Any help would be appreciated

        • 1. Re: How do I detect if a certain object is touching a certain color?
          JoãoCésar Level 3

          Hi!

           

          I made a working example: https://goo.gl/LhKdeE

           

          Here is the code:

          import flash.display.MovieClip;
          import flash.events.KeyboardEvent;
          import flash.ui.Keyboard;
          import flash.events.Event;
          import flash.display.DisplayObject;
          
          var friction:Number = 0.85;
          
          var p1:Object =
          {
               target:circle,
               upKey:Keyboard.W,
               rightKey:Keyboard.D,
               downKey:Keyboard.S,
               leftKey:Keyboard.A,
               upPressed:false,
               rightPressed:false,
               downPressed:false,
               leftPressed:false,
               keyForce:1,
               speedX:0,
               speedY:0,
               maxSpeedX:10,
               maxSpeedY:10,
               color:"red"
          };
          
          var p2:Object =
          {
               target:square,
               upKey:Keyboard.UP,
               rightKey:Keyboard.RIGHT,
               downKey:Keyboard.DOWN,
               leftKey:Keyboard.LEFT,
               upPressed:false,
               rightPressed:false,
               downPressed:false,
               leftPressed:false,
               keyForce:1,
               speedX:0,
               speedY:0,
               maxSpeedX:15,
               maxSpeedY:15,
               color:"red"
          };
          
          function keyHandler(e:KeyboardEvent):void
          {
               if (e.type == KeyboardEvent.KEY_DOWN)
               {
                    if (e.keyCode == p1.upKey)
                         p1.upPressed = true;
                    if (e.keyCode == p1.rightKey)
                         p1.rightPressed = true;
                    if (e.keyCode == p1.downKey)
                         p1.downPressed = true;
                    if (e.keyCode == p1.leftKey)
                         p1.leftPressed = true;
          
                    if (e.keyCode == p2.upKey)
                         p2.upPressed = true;
                    if (e.keyCode == p2.rightKey)
                         p2.rightPressed = true;
                    if (e.keyCode == p2.downKey)
                         p2.downPressed = true;
                    if (e.keyCode == p2.leftKey)
                         p2.leftPressed = true;
               }
          
          if (e.type == KeyboardEvent.KEY_UP)
               {
                    if (e.keyCode == p1.upKey)
                         p1.upPressed = false;
                    if (e.keyCode == p1.rightKey)
                         p1.rightPressed = false;
                    if (e.keyCode == p1.downKey)
                         p1.downPressed = false;
                    if (e.keyCode == p1.leftKey)
                         p1.leftPressed = false;
          
                    if (e.keyCode == p2.upKey)
                         p2.upPressed = false;
                    if (e.keyCode == p2.rightKey)
                         p2.rightPressed = false;
                    if (e.keyCode == p2.downKey)
                         p2.downPressed = false;
                    if (e.keyCode == p2.leftKey)
                         p2.leftPressed = false;
               }
          }
          
          function enterFrameHandler(e:Event):void
          {
               movePlayer(p1);
               movePlayer(p2);
          
               checkCollision(p1.target, p2.target);
               checkCollision(p2.target, p1.target);
          
               if (div.colors.currentLabel != p2.color)
               {
                    checkCollision(p1.target, div);
                    checkCollision(p2.target, div);
               }
               else
               {
                    if (!p2.target.hitTestObject(div))
                         checkCollision(p1.target, div);
               }
          }
          
          function movePlayer(p:Object):void
          {
               if (p.upPressed)
                    p.speedY -= p.keyForce;
               if (p.rightPressed)
                    p.speedX += p.keyForce;
               if (p.downPressed)
                    p.speedY += p.keyForce;
               if (p.leftPressed)
                    p.speedX -= p.keyForce;
          
               p.speedX *= friction;
               p.speedY *= friction;
          
               if (p.speedX > p.maxSpeedX)
                    p.speedX = p.maxSpeedX;
               else if (p.speedX < -p.maxSpeedX)
                    p.speedX = -p.maxSpeedX;
          
               if (p.speedY > p.maxSpeedY)
                    p.speedY = p.maxSpeedY;
               else if (p.speedY < -p.maxSpeedY)
                    p.speedY = -p.maxSpeedY;
          
               p.target.x += p.speedX;
               p.target.y += p.speedY;
          }
          
          function checkCollision(p:Object, obstacle:Object):void
          {
               if (p.hitTestObject(obstacle))
               {
                    // horizontal collisions
                    if (p.x < obstacle.x - obstacle.width * 0.5 || p.x > obstacle.x + obstacle.width * 0.5)
                    {
                         if (p.x <= obstacle.x)
                              p.x = obstacle.x - p.width * 0.5 - obstacle.width * 0.5;
                         else if (p.x > obstacle.x)
                              p.x = obstacle.x + p.width * 0.5 + obstacle.width * 0.5;
                    }
                    // vertical collisions
                    else if (p.y < obstacle.y - obstacle.height * 0.5 || p.y > obstacle.y + obstacle.height * 0.5)
                    {
                         if (p.y <= obstacle.y)
                              p.y = obstacle.y - p.height * 0.5 - obstacle.height * 0.5;
                         else if (p.y > obstacle.y)
                              p.y = obstacle.y + p.height * 0.5 + obstacle.height * 0.5;
                    }
               }
          }
          
          stage.addEventListener(KeyboardEvent.KEY_DOWN, keyHandler);
          stage.addEventListener(KeyboardEvent.KEY_UP, keyHandler);
          stage.addEventListener(Event.ENTER_FRAME, enterFrameHandler);
          

           

          Notice that I used frames to check for the colors.

           

          I hope it helps!