0

从我的主类中,我调用创建一个精灵并将其添加到舞台

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);
  }
 }

我在舞台上添加了一个样本精灵,当拖动它时,它包含在设定的边界内。

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;
 }

如果方形精灵被缩放,则以下返回的矩形边界有效

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;
 }

现在我正在尝试将方形精灵旋转包含在混合中。数学当然不是我的强项,但我觉得我在写作轨道上。但是,我似乎无法将头绕在它周围以使其正确

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;
 }
4

1 回答 1

1

我的想法是,不要使用复杂的三角,只需使用 swatchObject 的边界矩形,swatchObject.getRect()然后基于它创建你的 stageBounds。它应该足以满足您的目的。

如果这不是你想要的,我可以帮你算出数学。

抱歉,在我弄清楚 defaultSwatchRect 是什么之前,我不能真正给你一个函数——它的 x 和 y 在哪里以及它应该做什么。

将来您可能要记住的另一件事:数学函数 (cos, sin) 期望以弧度为单位的角度,而 .rotation 属性以度为单位,因此您必须在使用前进行转换。

于 2010-04-13T03:23:52.117 回答