По поводу первого способа с помощью graphics. Я набросал быстрый пример. Тут игрок просто двигается к курсору мышки, рисует за собой путь, и если сталкивается со своим путем то игрок становится красным. Посмотрите, может это поможет вам.
Класс Main:

Код AS3:
package
{
import flash.display.Sprite;
import flash.events.Event;
import flash.events.MouseEvent;
import flash.filters.GlowFilter;
/**
* ...
* @author Samana
*/
public class Main extends Sprite
{
private var player:Player;
private var path:Sprite;
public function Main():void
{
player = new Player();
addChild(player);
//.....................
path = new Sprite();
path.graphics.lineStyle(3, 0x008000);
path.graphics.moveTo(player.x, player.y);
addChild(path);
//.....................
stage.addEventListener(Event.ENTER_FRAME,enter_frame)
}
private function enter_frame(e:Event):void
{
player.move(mouseX, mouseY);
if (path.hitTestPoint(player.x, player.y, true))
{ player.filters = [new GlowFilter(0xFF0000,1,10,10,50,3)] }
else { player.filters = [] }
drawPath();
}
private function drawPath():void
{
path.graphics.lineTo(player.x, player.y);
}
}
}
И класс Player:

Код AS3:
package
{
import flash.display.Sprite;
/**
* ...
* @author Samana
*/
public class Player extends Sprite
{
public function Player()
{
drawPlayer()
}
private function drawPlayer():void
{
graphics.beginFill(0xFF8000);
graphics.drawCircle(0, 0, 2);
graphics.endFill()
}
public function move(targetX:Number,targetY:Number):void
{
var dx:Number = targetX - x;
var dy:Number = targetY - y;
var ang:Number = Math.atan2(dy, dx);
x += Math.cos(ang) * 3;
y += Math.sin(ang) * 3;
}
}
}