2016-07-12 9 views
0

Ich versuche, einen MovieClip einem benutzerdefinierten Mauszeiger (einem MovieClip) zu folgen, aber immer an einer definierten Position (in Bezug auf Koordinaten)), eine Entfernung vom Mauszeiger entfernt auf wo der Mauszeiger ist. Unten ist der Code:So definieren Sie die Position eines Movieclips in Relation zu der eines anderen MovieClips

import flash.display.MovieClip; 
import flash.events.Event; 
Mouse.hide(); 



var mouseCounter:int = 0; 
var mouseDelay:int = 5;// how many frames the mouse must stay still before the follow code is run.  
var speed:Number = 5; 

stage.addEventListener(MouseEvent.MOUSE_MOVE, mouseMove); 

stage.addEventListener(Event.ENTER_FRAME,follow); 

// set counter back to zero whenever the mouse is moved. 
function mouseMove(e:MouseEvent):void 
{ 
    wand.x = stage.mouseX; 
    wand.y = stage.mouseY; 
    e.updateAfterEvent(); 
    mouseCounter = 0; 
} 

function follow(e:Event):void 
{ 

    // increment the counter each frame 
    mouseCounter++; 

    // now run the follow block if the mouse has been still for enough frames. 
    if (mouseCounter >= mouseDelay) 
    { 
     orb_mc.x -= (orb_mc.x - mouseX)/speed; 
     orb_mc.y -= (orb_mc.y - mouseY)/speed; 

     orb_mc.x = mouseX + 46.5; 
     orb_mc.y = mouseY +50.95; 
    } 
} 

Die letzten beiden Zeilen von Codes (26 & 27), ist das, was ich verwenden, um die orb_mc Position in Bezug auf den benutzerdefinierten Mauszeiger zu definieren, die „Zauberstab“ ist jedoch scheint es zu haben in Folge der Leichtigkeit der Bewegung des Kugel behindert, nicht so einfach, wenn der Code Positionierung ich falsch verwendet wird, ist

+1

Bitte klären Sie, was Sie brauchen. Entweder möchten Sie, dass Ihr 'orb_mc' an der Position bei einem bestimmten Versatz von der Mausposition nachgibt oder dorthin springt? – Vesper

+0

Ja, ich möchte, dass es dort leichter wird, anstatt dort zu springen. Ich war in der Lage, die Lockerung vorher zu erreichen, bis ich die Position – SoloWalker

+0

Ich habe dich @SoloWalker definiert. eine Minute. –

Antwort

1
function follow(e:Event):void 
{ 

    // increment the counter each frame 
    mouseCounter++; 

    // now run the follow block if the mouse has been still for enough frames. 
    if (mouseCounter >= mouseDelay) 
    { 
     // Do this: 
     orb_mc.x -= (orb_mc.x - mouseX + 46.5)/speed; 
     orb_mc.y -= (orb_mc.y - mouseY + 50.95)/speed; 

     // OR this: 
     //orb_mc.x = orb_mc.x - (orb_mc.x - mouseX + 46.5)/speed; 
     //orb_mc.y = orb_mc.y - (orb_mc.y - mouseY + 50.95)/speed; 

     // but not both. 
    } 
} 

sehen Sie, wenn Sie eine der Zuwachs Zuweisungsoperatoren verwenden (-=, +=, /=, *=) unmittelbar darauf folgt ein regulärer Zuweisung Operator wird offensichtlich jeden Wert überschreiben, den es zuvor hatte. Sie verstehen, dass Actionscript vom Computer "gelesen" wird (das ist wahrscheinlich das falsche Wort, aber Sie bekommen meine Drift) und es liest jeden Block (ein Bereich innerhalb einer geschweiften Klammer setzen { }) von oben nach unten. Also das erste Mal, dass Ihre follow Methode aufgerufen wird, tut es 4 Dinge in der Reihenfolge:

  1. Erhöhung der Zähler
  2. bewerten, wenn mouseCounter >= mouseDelay
  3. Schritten orb_mc x/y Koordinaten
  4. Abtretungs orb_mc x/y Koordinaten zum Endziel

Es macht dies auf die allererste Zeit der follow Block wird gelesen. Aus diesem Grund beide akzeptabel Bit-Code in meiner Antwort tun 2 Dinge:

  1. sie erhöhen die x/y-Koordinaten (nicht setzen sie auf einen Endwert)
  2. sie auf einem variablen Faktor basierend ändern (speed)

Froh, dass es funktioniert!

+0

Dank Davis, es funktioniert genau so, wie ich es will. Ich habe das + Zeichen einfach durch ein - ersetzt, damit die Kugel nicht vom Boden, sondern vom Boden entfernt ist. – SoloWalker

+0

Oh, gut zu hören! Sehen Sie meine Bearbeitungen für etwas mehr Klarheit für zukünftige Referenz. –

Verwandte Themen