HaxeFlixel Logo HaxeFlixel Snippets
  • About
  • Back to HaxeFlixel.com
    • Screen
    • Adding
    • Alive
    • Health
    • Making Sprites
    • Loading Sprites
    • Animation
    • Alpha
    • Color
    • Facing
    • Scale
    • Baked Rotations
    • FlxText
    • FlxBitmapText
    • Velocity
    • Acceleration
    • MaxVelocity
    • Gravity
    • Jumping
    • Angle
    • Angular Velocity
    • Angular Acceleration
    • Basic Group
    • Typed Group
    • Recycling
    • Sorting
    • Tileblock
    • Tilemap
    • Ray
    • tileProperties
    • Autotiles
    • Simple Overlap
    • Overlap Callbacks
    • 1-to-1 Collision
    • Immovable
    • Tilemap Collision
    • Moving Platforms
    • Flash
    • Fade
    • Shake
    • Follow
    • scrollFactor
    • Basics
    • Keyboard
    • Mouse
    • Button
    • FlxSound
    • FlxState
    • FlxSubState
    • Tween
    • Angle
    • Color
    • Motion
    • Num
    • Callbacks
    • FlxTimer
    • FlxSignal
    • moveTowards
    • Distance
    • velocityFromAngle
    • timeScale
    • drawLine

Ray

ray lets you check if a line between two points collides with any ‘collidable’ tiles in a FlxTilemap.

var reachesDestination = tilemap.ray(startPoint, targetPoint, collidePoint);

Demonstration

Source

View Source on GitHub

package;

import flixel.FlxG;
import flixel.FlxSprite;
import flixel.FlxState;
import flixel.math.FlxPoint;
import flixel.tile.FlxTilemap;
import flixel.tweens.FlxTween;
import flixel.util.FlxSpriteUtil;

class PlayState extends FlxState
{
	var map:FlxTilemap;

	var center:FlxSprite;

	var target:FlxSprite;

	var endPoint:FlxPoint;

	var line:FlxSprite;

	override public function create()
	{
		bgColor = 0;

		add(map = new FlxTilemap());
		map.loadMapFromCSV("assets/ray-map.csv", "assets/tiles.png");
		map.screenCenter();

		add(center = new FlxSprite("assets/sprite.png"));
		center.offset.x = center.offset.y = 12;
		center.centerOrigin();
		center.screenCenter();

		add(target = new FlxSprite("assets/sprite.png"));
		target.offset.x = target.offset.y = 12;
		target.centerOrigin();

		add(line = new FlxSprite());
		line.makeGraphic(FlxG.width, FlxG.height, 0);

		endPoint = FlxPoint.get();

		FlxTween.circularMotion(target, FlxG.width / 2, FlxG.height / 2, FlxG.width / 2.8, 0,
			false, 4, true, {
				type: FlxTweenType.LOOPING
			});

		super.create();
	}

	override public function update(elapsed:Float):Void
	{
		super.update(elapsed);

		var madeIt:Bool = map.ray(center.getMidpoint(), target.getMidpoint(), endPoint);

		FlxSpriteUtil.fill(line, 0);
		if (madeIt)
			FlxSpriteUtil.drawLine(line, center.x, center.y, target.x, target.y,
				{thickness: 3, color: 0xFF00FF00});
		else
			FlxSpriteUtil.drawLine(line, center.x, center.y, endPoint.x, endPoint.y,
				{thickness: 3, color: 0xFFFF0000});
	}
}

Tags

tiles tileblock
Powered By HaxeFlixel Logo HaxeFlixel