2017-03-03 7 views
2

Ich arbeite auf einige ziehbare/Dropbarbar.So es ist nur ziehbar x, weil dies Bar auswählen ist. Problem ist Schaltfläche auswählbar außerhalb der Bühne Grenze. Ich möchte nur in stage limit ziehen. Ich habe einige Methoden hitTestPoint und NewsShape versucht, aber es hat nicht funktioniert.Wie setze ich Drag X Limit

// define lock on y-axis 
var LOCKY:Number = secbuton.y; 
  
stage.addEventListener(MouseEvent.MOUSE_MOVE, _mouseMove); 
function _mouseMove(e:MouseEvent):void 
{ 
if(secbuton.y != LOCKY) secbuton.y = LOCKY; 
} 
  
// dragging 
secbuton.addEventListener(MouseEvent.MOUSE_DOWN, _mouseDown); 
function _mouseDown(e:MouseEvent):void 
{ 
secbuton.startDrag(false, new Rectangle(35,345,420)); 
secbuton.addEventListener(MouseEvent.MOUSE_UP, _mouseUp); 
} 
  
// dropping 
function _mouseUp(e:MouseEvent):void 
{ 
secbuton.stopDrag(); 
secbuton.removeEventListener(MouseEvent.MOUSE_UP, _mouseUp); 

      if(secbuton.hitTestObject(kose1)){ 
    secbuton.x = levcbk1.x +5 
    } 

    if(secbuton.hitTestObject(lev2)){ 
    secbuton.x = levcbk2.x +5 
    } 
if(secbuton.hitTestObject(lev3)){ 
    secbuton.x = levcbk3.x +5 
    } 
       if(secbuton.hitTestObject(lev4)){ 
    secbuton.x = levcbk4.x +5 
    } 

         if(secbuton.hitTestObject(lev5)){ 
    secbuton.x = levcbk5.x +5 
    } 
} 

UPDATE

Normalerweise bar arbeiten wie diese.

[! [Enter image description here] [1]] [1]

Aber Problem gibt es, wenn die Grenzen treffen oder wenn versuchen ziehen, um y-Achse.

[! [Enter image description here] [2]] [2]

+0

Zweites Argument: ** öffentliche Funktion startDrag (lockCenter: Boolean = false, bounds: Rectangle = null): void ** http://help.adobe.com/de_DE/FlashPlatform/reference/actionscript/3/flash/ display/Sprite.html # startDrag() – Organis

+0

Ich bin neu in der Klasse.Ich verwende Frame-Code.Wie kann ich das in Frame-Code tun? – KucuKeko

+0

** secbuton.startDrag (false, new Rectangle (...)); ** und im Rectangle-Konstruktor übergeben Sie ** left, top, width, height ** des rechteckigen Bereichs, der ein Bounding-Box zum Ziehen sein soll Ihr secbutton Objekt. – Organis

Antwort

1

Verwenden MOUSE_LEAVE nicht. Verwenden Sie MOUSE_UP aber auf stage Objekt - MOUSE_UP von stage Objekt ausgelöst wird sogar Sie Entriegelungsknopf außerhalb des Flash-Player-Fenster (im Grunde überall)

So einfach diese Zeilen ändern

secbuton.addEventListener(MouseEvent.MOUSE_UP, _mouseUp); 
secbuton.removeEventListener(MouseEvent.MOUSE_UP, _mouseUp); 

dazu:

stage.addEventListener(MouseEvent.MOUSE_UP, _mouseUp); 
stage.removeEventListener(MouseEvent.MOUSE_UP, _mouseUp); 

Und wie sagte Organis. Rectangle Parameter sind x , y , width and height. Also von dem, was ich auf den Gifs sehen Sie setzen wollen es:

secbuton.startDrag(false, new Rectangle(35,345,420-35,0));

Wenn Sie Rechteck heigh auf 0 gesetzt ist, wird das Objekt auf der y-Achse verriegelt werden (345 in diesem Fall), so dass Sie don Verwenden Sie nicht die Variable LOCKY und verschieben Sie den Listener.

+0

Danke, es hat funktioniert. – KucuKeko

Verwandte Themen