HaxeFlixel Logo HaxeFlixel Snippets
  • About
  • Tutorials
  • Back to HaxeFlixel.com
  • Basics
    • Screen
    • Adding
  • Objects
    • Alive
    • Health
  • Sprites
    • Making Sprites
    • Loading Sprites
    • Animation
    • Alpha
    • Color
    • Facing
    • Scale
    • Baked Rotations
  • Text
    • FlxText
    • FlxBitmapText
  • Movement
    • Velocity
    • Acceleration
    • MaxVelocity
    • Gravity
    • Jumping
    • Angle
    • Angular Velocity
    • Angular Acceleration
  • Groups
    • Basic Group
    • Typed Group
    • Recycling
  • Tiling
    • Tileblock
    • Tilemap
  • Overlap
    • Simple Overlap
    • Overlap Callbacks
  • Collision
    • 1-to-1 Collision
    • Immovable
    • Tilemap Collision
    • Moving Platforms
  • Camera
    • Flash
    • Fade
    • Shake
    • Follow
  • Input
    • Basics
    • Keyboard
    • Mouse
    • Button
  • Sound
    • FlxSound

Overlap Callbacks

Callbacks add powerful functionality to the FlxG.overlap() function. You can define two callbacks: NotifyCallback and ProcessCallback.

In the ProcessCallback function, you can do your own, custom checks to determine if your objects actually should trigger an overlap.

In the NotifyCallback function, you can specify what you want to happen when an overlap is detected.

// if objectA overlaps objectB, doOverlapCheck will be called. If that returns true, then doOverlap will be called
FlxG.overlap(objectA, objectB, doOverlap, doOverlapCheck);

// doOverlapCheck will return true only if objectA is moving to the right when an overlap is detected
private function doOverlapCheck(objectA:FlxObject, objectB:FlxObject):Bool
{
    return objectA.velocity.x > 0;
}

Demonstration

Source

source/PlayState.hx

package;

import flixel.FlxG;
import flixel.FlxSprite;
import flixel.FlxState;

class PlayState extends FlxState
{
    var sprite:FlxSprite;
    var box:FlxSprite;
    var overlaps:Bool;

    override public function create()
    {
        super.create();

        box = new FlxSprite("assets/bigbox.png");
        box.screenCenter();
        add(box);

        sprite = new FlxSprite("assets/sprite.png");
        sprite.y = FlxG.height / 2 - sprite.height / 2;
        sprite.velocity.x = 100;
        add(sprite);
    }

    override public function update(elapsed:Float)
    {
        if ((sprite.velocity.x > 0 && sprite.x >= FlxG.width - sprite.width)
            || (sprite.velocity.x < 0 && sprite.x <= 0))
        {
            sprite.velocity.x *= -1;
        }

        overlaps = false;
        FlxG.overlap(sprite, box, doOverlap, doOverlapCheck);
        box.alpha = overlaps ? 0.5 : 1;

        super.update(elapsed);
    }

    function doOverlap(objectA:FlxSprite, objectB:FlxSprite)
    {
        overlaps = true;
    }

    function doOverlapCheck(objectA:FlxSprite, objectB:FlxSprite):Bool
    {
        return objectA.velocity.x > 0;
    }
}
View Source on GitHub

See Also

  • Overlap/Simple Overlap

Tags

overlap
  1. Home
  2. Overlap
  3. Overlap Callbacks
Powered By HaxeFlixel Logo HaxeFlixel