2017-09-15 1 views
0

Ich habe eine Liste von Videoclips, die jeweilsAS3 Ziehen Ausgabe

stage.addEventListener(TouchEvent.TOUCH_BEGIN, fl_TouchBeginHandler); 
stage.addEventListener(TouchEvent.TOUCH_MOVE, fl_TouchMoveHandler); 

var last_posY: Number; 
function fl_TouchBeginHandler(eve: TouchEvent): void { 

    last_posY= eve.stageY; 
} 
function fl_TouchMoveHandler(eve: TouchEvent): void { 
    for(var i=0;i<movieClipsArray.lenght;i++){ 
     movieClipsArray[i].y-=eve.stageY - delta_posY; 
} 
    last_posY= eve.stageY; 
} 

im Versuch, blättert die Liste der Filmclips viel Kind hat alles funktioniert, wenn ich in einem Teil der Bühne Drage wo leer ist, aber während Bei Filmclips hat es ein Problem (zum Beispiel während des Scrollens schüttelt es ohne Grund) und nach einigem Debugging habe ich herausgefunden, wenn ich drage und das eve.target chang (von einem der Filmclips verschachtelte childs zu einem anderen) eve.stageY ändert einen verdrahteten Weg, der dieses Shake verursacht, wie kann ich es verhindern?

Antwort

0

Ihr Problem ist am ähnlichsten wie Sie die y Position berechnen. Wenn Sie es sich relativ wollen, sollten Sie nur den Delta-Wert verwenden müssen (und nur den stageY Wert verwenden, um festzustellen, nach oben oder unten)

var direction:int = eve.stageY > lastPosY ? 1 : -1; //if the latest mouse/touch position is greater than before (lower on the screen), use a value of 1 (down) 
movieClipsArray[i].y -= delta_posY * direction; //multiply the delta by the direction 

Das heißt, können Sie finden es viel einfacher, eine zu verwenden, Container und blättern Sie diesen Container. Wenn Sie AnimateCC verwenden, können Sie einfach alle Ihre Clips auswählen, F8 drücken und einen neuen MovieClip erstellen, der sie alle enthält. Oder tut es durch Code:

var container:Sprite = new Sprite(); 
addChild(container); 

container.addChild(mc1); //do this for all your clips instead of using an array 

Dann Ihren Code ändern, wie so:

stage.addEventListener(TouchEvent.TOUCH_BEGIN, fl_TouchBeginHandler); 
stage.addEventListener(TouchEvent.TOUCH_MOVE, fl_TouchMoveHandler); 

var offset: Number = 0; 
function fl_TouchBeginHandler(eve: TouchEvent): void { 
    offset = container.y - eve.stageY; 
    //offset is the initial difference between the touch point and container's y. You use this to make sure it doesn't jump when you first touch it 
} 

function fl_TouchMoveHandler(eve: TouchEvent): void { 
    container.y = eve.stageY + offset 
} 
+0

Liebes BadFeelingAboutThis dank aloot, aber über meinen Fall ich denke, wegen des schlechten Englisch i nicht in der Lage war es zu klären, , Ich habe eine Reihe von Videoclips der Spieler meines Spiels, die ich die Daten von PHP-Seite, aber jeder dieser Player Movie Clips enthält einige andere Videoclips wie das Spieler Bild, Taste und .... und ich habe die Dragee Event-Listener auf die Bühne –

+0

aber wenn ich drage, wenn ich es auf den Spielern Filmclips tun die Kinder-Videoclips werden als Ziel durch das Ereignis erkannt und dies verursacht das Problem, wegen der eve.stageY versuche ich sowas wie eve.stopPropagation(); das löste das Problem, aber nur die Teile, die kein Kind (die Bühne es selbst) exsits möglich ist, zu drage und Ihre Hilfe vollständige Post https://stackoverflow.com/questions/31328666/flash-as3-how-to-disable-child -swf-mouse-clicks-ohne-disabled-mouse-hove –

+0

die eve.stopPropagation() löste das Problem fast, aber mein Problem ist, dass das Kind, dem das Bühnenereignis zugespielt hat, die Bühne selbst nicht die Bühne erkannte ist der Besitzer des Ereignis Listener –