Ok jeg har lavet et eksempel. Se det på:
http://www.densorteantilope.dk/heeris/eksperten/779952/Prik_der_flytter_sig_low_level_solution.htmlDu kan downloade fla filen fra siden.
Jeg håber det var noget i den retning du søgte. Denne løsning gør brug af en Listener og er designet til at kunne modificeres fra koden til at passe til hvad d nu skal bruge det til. det er muligt at bruge noget hit test i stedet, og der er sikker mange andre måder man kunne gøre det på, men dette var den jeg lige syntes var fedest.
Jeg gør opmærksom på at jeg bruger "det gamle" action script 2.0, jeg er ikke nok inde i 3.0. Håber ikke det giver komplikationer.
For god ordens skyld poster jeg lige koden og en opskrift på hvordan fla'en er bygget:
1. Opret et objekt på scenen, ca 20pixles i diameter
2. Konverter dette objekt til et symbol og giv det instancenavnet "prik"
3. paste følgende kode i første frame (der er kun en frame i denne film)
Koden:
/*
Denne kode gør brug af Pytagores' læresætning for at beregne afstanden mellem to koordinater
f.eks. P1(x1,y1) og P2(x2,y2). Beregningen formuleres som:
afstand^2 = (x2-x1)^2 + (y2-y1)^2, hvor forskellen mellem x'erne og y'erne betegnes som delta.
*/
/*
ATRIBUTTER.
*/
// Denne LoadVars indeholder parametre der vil beskrive et område omkring prik objektet.
var aura = new LoadVars();
// Her bestemmes den afstand auraen skal have omkring prikken
aura.Distance = 25;
// Disse to variabler beskriver det punkt hvor til prikken skal holde sig.
var centerX:Number = 200;
var centerY:Number = 200;
// Disse to variabler vil indeholde forskellen på x og y værdierne mellem musen og centeret.
var deltaX:Number = undefined;
var deltaY:Number = undefined;
// Denne variable vil indeholde afstanden mellem musen og centeret. Den hedder SQ til sidst
// fordi kvadratroden ikke beregnes (Se næste comment).
var distanceSQ:Number = undefined;
// Den tilladte afstand mellem musen og centeret bestemmes her. Den er sat i anden pga.
// pytagores der siger c^2 = a^2 + b^2. For at undgå at beregne kvadratroden holdes
// værdierne på begge sider af lighedsteget kvadreret. En sammenligning er stadig mulig.
var thresholdSQ:Number = Math.pow( 50, 2 );
// Her placeres prikken i centrum. Prikken er forankret i sit øverste venstre hjørne og derfor
// kompenseres der for at få prikkens centrum til at ligge lige over centreret.
prik._x = centerX - prik._width / 2;
prik._y = centerY - prik._height / 2;
/*
MOUSE LISTENER OG TILHØRENDE FUNCTIONER.
*/
// Opret nyt object til at lytte med.
var mouseObj = new Object();
// Tilføj din nye listener til det indbyggede Mouse object.
Mouse.addListener(mouseObj);
// Tilføj function der kaldes når musen bevæger sig.
mouseObj.onMouseMove = function()
{
// Beregn forskellen i x or y værdierne mellem musen of centeret.
deltaX = _xmouse - centerX;
deltaY = _ymouse - centerY;
// Afstanden beregenes som Pytagores forskriver.
distanceSQ = Math.pow( deltaX, 2 ) + Math.pow( deltaY, 2 );
// Hvis musen er uden for den tilladte afstand skal prikken placeres i centeret.
if ( distanceSQ > thresholdSQ )
{
// Prikken flyttes til centeret
prik._x = centerX - prik._width / 2;
prik._y = centerY - prik._height / 2;
}
// Hvis musen er inde for den tilladte afstand skal prikken flytte sig væk fra musen.
else
{
// Her beregenes og sætts auraen. Den beskrives som en boks med top, bund, vensre og højre.
aura.Top = prik._y - aura.Distance;
aura.Bottom = prik._y + prik._height + aura.Distance;
aura.Left = prik._x - aura.Distance;
aura.Right = prik._x + prik._width + aura.Distance;
// Undersøg om musen er lige over eller lige under prikken.
if ( _xmouse > aura.Left && _xmouse < aura.Right )
{
// Undersøg om musen berører øverste del af auraen.
if ( _ymouse > aura.Top && _ymouse < prik._y )
{
// Translater prikken i modsat retning.
prik._y = prik._y + prik._height;
}
// Undersøg om musen berører nederste del af auraen.
else if ( _ymouse < aura.Bottom && _ymouse > prik._y + prik._height )
{
// Translater prikken i modsat retning.
prik._y = prik._y - prik._height;
}
}
// Undersøg om musen er på vensre eller højre side at prikken.
if ( _ymouse > aura.Top && _ymouse < aura.Bottom )
{
// Undersøg om musen berører venstre del af auraen.
if ( _xmouse > aura.Left && _xmouse < prik._x )
{
// Translater prikken i modsat retning.
prik._x = prik._x + prik._width;
}
// Undersøg om musen berører højre del af auraen.
else if ( _xmouse < aura.Right && _xmouse > prik._x + prik._width )
{
// Translater prikken i modsat retning.
prik._x = prik._x - prik._width;
}
}
}
};