2010-04-13 6 views
0

de ma classe principale i appel à créer une image-objet et l'ajouter à la scèneActionScript application rotation du sprite à startDrag() limites de rectangle

private function addSwatch(evt:MouseEvent):void 
{ 
if (stage.getObjectsUnderPoint(mousePoint()).length == 0) 
    { 
    var swatchSide:Number = 100; 
    var newSwatch:Sprite = new Swatch(0 - swatchSide/2, 0 - swatchSide/2, swatchSide, swatchSide); 
    newSwatch.x = mouseX; 
    newSwatch.y = mouseY; 
    addChild(newSwatch); 
    } 
} 

j'ai ajouté une image-objet swatch à l'étape qui , lorsqu'il est déplacé, est contenu dans les limites définies.

this.startDrag(false, swatchBounds()); 

... 

private function swatchBounds():Rectangle 
{ 
var stageBounds = new Rectangle ( 
     0 - defaultSwatchRect.x, 
     0 - defaultSwatchRect.y, 
     stage.stageWidth - defaultSwatchRect.width, 
     stage.stageHeight - defaultSwatchRect.height 
     ); 
return stageBounds; 
} 

si le sprite carré est mis à l'échelle, les travaux suivants limite rectangle retourné

private function swatchBounds():Rectangle 
{ 
var stageBounds = new Rectangle ( 
     0 - defaultSwatchRect.x * swatchObject.scaleX, 
     0 - defaultSwatchRect.y * swatchObject.scaleY, 
     stage.stageWidth - defaultSwatchRect.width * swatchObject.scaleX, 
     stage.stageHeight - defaultSwatchRect.height * swatchObject.scaleY 
     ); 
return stageBounds; 
} 

maintenant je suis en train d'inclure rotation, les sprites carrés dans le mélange. les mathématiques ne sont certainement pas mon fort, mais je sens que je suis sur la piste d'écriture. Cependant, je ne peux pas sembler envelopper la tête autour d'elle pour l'obtenir droit

private function swatchBounds():Rectangle 
{ 
var stageBounds = new Rectangle ( 
     0 - defaultSwatchRect.x * swatchObject.scaleX * Math.cos(defaultSwatchRect.x * swatchObject.rotation), 
     0 - defaultSwatchRect.y * swatchObject.scaleY * Math.sin(defaultSwatchRect.y * swatchObject.rotation), 
     stage.stageWidth - defaultSwatchRect.width * swatchObject.scaleX * Math.cos(defaultSwatchRect.width * swatchObject.rotation), 
     stage.stageHeight - defaultSwatchRect.height * swatchObject.scaleY * Math.sin(defaultSwatchRect.height * swatchObject.rotation) 
     ); 
return stageBounds; 
} 
+0

qu'est ce que defaultSwatchRect et qu'est-ce que cela signifie? – jonathanasdf

+0

oh, ouais c'est confus. Pardon. c'est la même chose que swatchObject (à ce stade). defaultSwatchRect sont les paramètres transmis pour que le site crée l'objet swatchObject. J'ai édité mon post afin que vous puissiez voir ce que je veux dire – TheDarkIn1978

+0

l'édition n'a pas vraiment aider à clarifier ce que fait defaultSwatchRect ... – jonathanasdf

Répondre

1

Mon idée est qu'au lieu d'utiliser TRIG compliqué, il suffit obtenir le rect bondissant de swatchObject à l'aide swatchObject.getRect() puis créez votre stageBounds base sur ça. Cela devrait être plus que suffisant pour vos objectifs.

Si ce n'est pas ce que vous voulez, je peux vous aider à comprendre les maths.

Et désolé, je ne peux pas vraiment vous donner une fonction jusqu'à ce que je devine ce que defaultSwatchRect est - où sont ses x et y et ce qu'il est censé faire. Une autre chose que vous pouvez garder à l'esprit pour le futur: les fonctions Math (cos, sin) attendent l'angle en radians, alors que la propriété .rotation est en degrés, donc vous devez convertir avant d'utiliser.

+0

ridicule! lol. C'est incroyablement plus facile que ce que j'ai essayé de faire toute la journée. merci un million! – TheDarkIn1978

+0

le résultat est parfois beaucoup plus simple que vous pensiez que ce serait :) et dans d'autres cas beaucoup plus difficile. – jonathanasdf