2016-04-22 10 views
0

Ich habe bereits ein paar Fragen dazu gestellt, für andere Probleme, aber ich bin fast fertig!globalToLocal verhält sich nicht wie erwartet? (ziemlich sicher, dass ich es gerade nicht bekomme)

Ich arbeite an einer Drag & Drop-Interaktion in Animate CC, und ich habe es fast funktioniert. Es erkennt beim Ziehen und beim Ablegen, aber die Positionen in den Zielbereichen scheinen ausgeschaltet zu sein. Demo

Meine Vermutung ist, dass es etwas damit zu tun hat, dass ich globalToLocal() nicht richtig mache, aber ich bin mir nicht sicher. Bis jetzt haben das Ändern von Werten in meinem w1, w2, h1, h2 nichts geändert.

hier ist die Schnitttestfunktion, es ist ein ziemlich populäre Basis here

function intersect(obj1, obj2){ 
    var objBounds1 = obj1.nominalBounds.clone(); //used nominalBounds for shape in animateCC 
    var objBounds2 = obj2.nominalBounds.clone(); 

    var pt = obj1.globalToLocal(objBounds2.x, objBounds2.y); //is this what's wrong? 

    var h1 = -(objBounds1.height/2 + objBounds2.height); 
    var h2 = objBounds2.height/2; 
    var w1 = -(objBounds1.width/2 + objBounds2.width); 
    var w2 = objBounds2.width/2; 

    if(pt.x > w2 || pt.x < w1){ 
    spliceThis(hitTestArray, obj2); 
    return false; 
    } 
    if(pt.y > h2 || pt.y < h1){ 
    spliceThis(hitTestArray, obj2); 
    return false; 
    } 
    if(hitTestArray.indexOf(obj2) < 0){ //Obj2 not found 
    hitTestArray.push(obj2); 
    } 
    return true; 
} 

obj1 ist das Drag-Objekt, obj2 ist das Drop-Ziel. Ich weiß, Staffelei hat keine Breite und Höhe, also ist das vielleicht ein Teil davon? aber ich bin mir nicht sicher, wie ich es umgestalten würde, um das zu erklären. Auch, es funktioniert etwas, also bin ich mir nicht sicher, warum das der Fall wäre, wenn die Höhe und Breite einfach null sind?

Versteh ich das einfach nicht oder bin ich nah dran?

+0

Sind Ihr obj1 und obj2 skaliert? Denken Sie daran, dass "nominalBounds" die "unskalierten" Grenzen sind. Wenn also eines dieser Objekte skaliert oder deren Eltern skaliert werden, würde dies die Koordinaten beeinflussen. – Lanny

+0

sollten sie ihre ursprüngliche Höhe und Breite sein. Wenn Sie "skaliert" sagen, bedeutet das, dass es auf der Bühne skaliert wird - im Browser oder innerhalb von animiert skaliert wird (wie anders als das ursprüngliche Symbol)? Für mich scheint es, als ob es x und y auf 0 setzt, weil es immer noch gut ist, wenn ich links und oben auf die Ziele gehe. – Mike

+0

Ja, ich meine, wenn die Bibliotheksobjekte auf die Bühne gestellt und skaliert werden, oder eines ihrer Elternelemente werden skaliert (einschließlich der Stufe), dann wird nominalBounds nicht korrekt sein. – Lanny

Antwort

0

Technisch gesehen habe ich gefunden, was das Problem verursacht, aber ich weiß nicht warum.

enter image description here

Was ist hier los ist die x und y für die Grenzen sowohl auf obj1 und obj2 werden auf negative Werte auf der Bühne. Ich weiß noch nicht warum, aber hey, zumindest weiß ich, was jetzt nicht stimmt ... vielleicht könnte jemand anders etwas ausarbeiten? Ich bin noch neu in JavaScript und EaselJS.

UPDATE:

die Linie var pt = obj1.globalToLocal(obj2.x, obj2.y); fixiert, weil sie die negativen Grenzen wurde unter Verwendung von, aber obj2 war auf der x und y in Ordnung. änderte dann den Registrierungspunkt in die obere linke Ecke, weil es in diesem Teil gut war, aber ging immer noch weit in den leeren Bereich.

Es funktioniert jetzt wie beabsichtigt, obwohl ich immer noch nicht weiß, warum es negative Werte zurückgibt.