Я к вам с очередным вопросом, коллеги.
Представьте себе следующую ситуацию:
Есть некая круглая область (далее "арена"), внутри которой находится также круг много меньшего радиуса (далее "герой"). Мне удалось заставить героя бегать за курсором мыши в пределах арены (герой это в моем случае класс, а арена - просто мувик на сцене):
Герой:

Код AS3:
package glar.main
{
import flash.display.MovieClip;
public class Hero extends MovieClip
{
var step:Number = 6;
var radius:Number = 80;
public function Hero()
{
//
}
}
}
Основной класс:

Код AS3:
package glar.main
{
import flash.display.MovieClip;
import flash.display.Stage;
import flash.events.Event;
import flash.geom.Point;
public class Main extends MovieClip
{
var hero:Hero = new Hero();
public function Main()
{
super();
addChild(hero);
hero.x = stage.width/2;
hero.y = stage.height/2;
hero.addEventListener(Event.ENTER_FRAME, heroGo);
}
private function heroGo(event:Event):void {
var dx:Number = mouseX - hero.x;
var dy:Number = mouseY - hero.y;
var angle:Number = Math.atan2(dy, dx);
var dist:Number = Math.sqrt(dx*dx + dy*dy);
if(dist > hero.step) {
var tgtX:Number = hero.step * Math.cos(angle);
var tgtY:Number = hero.step * Math.sin(angle);
hero.rotation = angle*180/Math.PI;
var heroPnt:Point = new Point(hero.x, hero.y);
var arenaPnt:Point = new Point(arena.x, arena.y);
if (Point.distance(arenaPnt, heroPnt) + hero.radius/2 < arena.height/2) {
hero.x += tgtX;
hero.y += tgtY;
}
}
}
}
}
И вот основные вопросы начинаются дальше, когда я хочу, чтобы была возможность вывести мышь за пределы арены, но герой за ее пределы не выбегал. В скрипте выше эта проблема решена, НО при возвращении мыши назад в зону арены - герой по прежнему стоит у стенки. Я понимаю, что по моему алгоритму герой и не должен "отлипать" от стены, но вот хочу спросить вашего совета - как лучше сделать это "отлипание" и по-новому заставить героя бежать за мышью.
И еще важный нюанс (к которому даже страшно приступиться) - хочется, чтобы при следующих условиях (мышь за пределами арены, герой коснулся стенки арены) герой не просто стоял у стенки, а двигался до тех пор по контуру арены, пока не достигнет своим центром линии, соединяющей 2 точки (центр арены и текущее положение курсора).