2016-08-08 48 views
1

Was ist in elastelJS der beste Weg, ein Objekt um ein anderes zu drehen? Was ich versuche ist ein Verfahren zu erreichen, das Fadenkreuz um den Kreis zu drehen unten dargestellt, wie ein Planet umkreist die Sonne:Ein Objekt um ein anderes rotieren In createJS/staffelJS

enter image description here

Ich habe in der Lage Objekte um ihren eigenen Mittelpunkt dreht , aber es fällt mir schwer, einen Weg zu finden, um ein Objekt um den Mittelpunkt eines zweiten Objekts zu drehen. Irgendwelche Ideen?

+1

kann man nicht einfach mit der parametrischen Gleichung des Kreises das Fadenkreuz auf einer Kreisbahn bewegen? – ampawd

+0

@ampawd danke für diesen Vorschlag, dass die Parametergleichung genau das war, was ich brauchte. Wenn ich jedoch die Drehung mit einem Winkel von 1 Grad in der Gleichung beginne, bewegt sich mein Punkt zuerst zu einem Punkt direkt rechts von dem Ursprung, um den er sich dreht. Um einen Punkt von einem willkürlichen Anfangspunkt zu bewegen, bin ich jedoch richtig im Denken, dass ich zuerst den Winkel bestimmen müsste, der durch den Ursprung, diesen Punkt nach rechts und meinen willkürlichen Punkt gebildet wird? Wäre das Gesetz des Kosinus der richtige Weg dafür? Ich kann eine Illustration meiner Frage liefern, wenn dies keine klare Erklärung ist. – flemingslone

+1

Wenn Sie die Koordinaten des Fadenkreuzes kennen, bewegen Sie es einfach auf der Kreisbahn mit dieser Formel: 'x = Abstand * Math.cos (Winkel) + cricle.center.x, y = Abstand * Math.sin (Winkel) + circle.center. y 'wo' distance' ist ein Abstand zwischen Fadenkreuz und Kreis – ampawd

Antwort

1

Es könnte sinnvoll sein, Inhalt in einen Container zu packen. Übersetzen Sie die Koordinaten so, dass der Mittelpunkt an der gewünschten Position liegt, und drehen Sie dann den Container.

+0

Wenn Sie sagen, die Koordinaten übersetzen, meinen Sie, den Mittelpunkt als Mittelpunkt des Containers zu setzen? Dies ist eine großartige Idee, aber ich werde sehen, ob ich es ausarbeiten kann. Du warst eine großartige Quelle für all meine Staffelei-Fragen, danke Mann! – flemingslone

+0

Ja, wenn du möchtest, dass der Mittelpunkt bei 100x100 liegt, kannst du deinen Inhalt einfach in einen Container legen, den Container regX/regY auf diesen Punkt setzen und dann deinen Inhalt um 100x100 so verschieben, dass er sichtbar an derselben Stelle ist. Freue mich zu helfen :) – Lanny

1

Um darauf aufzubauen, was Lanny vorschlägt, kann es Fälle geben, in denen Sie den gesamten Container nicht drehen möchten. Eine Alternative wäre, trigonometrische Funktionen und einen Inkrementierungswinkel zu verwenden, um die x/y-Position des Fadenkreuzes zu berechnen. Sie können x/y mit einem Winkel (in Radianten) und Math.cos(angleInRadians) für x und Math.sin(angleInRadians) für y, multiplizieren mit dem Radius der Umlaufbahn finden.

Siehe working example als Referenz.

Hier ist ein komplettes Snippet.

var stage = new createjs.Stage("stage"); 
var angle = 0; 

var circle = new createjs.Shape(); 
circle.graphics.beginFill("#FF0000").drawEllipse(-25, -25, 50, 50).endFill(); 
circle.x = 100; 
circle.y = 100; 

var crosshair = new createjs.Shape(); 
crosshair.graphics.setStrokeStyle(2).beginStroke("#FF0000").moveTo(5, 0).lineTo(5, 10).moveTo(0, 5).lineTo(10, 5).endStroke(); 

stage.addChild(circle); 
stage.addChild(crosshair); 

createjs.Ticker.addEventListener("tick", function(){ 

    angle++; 
    if(angle > 360) 
    angle = 1; 

    var rads = angle * Math.PI/180; 
    var x = 100 * Math.cos(rads); 
    var y = 100 * Math.sin(rads); 
    crosshair.x = x + 100; 
    crosshair.y = y + 100; 

    stage.update(); 
});