ActionScript применяет вращение спрайта к границам прямоугольника startDrag () - PullRequest
0 голосов
/ 13 апреля 2010

из моего основного класса я звоню, чтобы создать спрайт и добавить его на сцену

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

1 Ответ

1 голос
/ 13 апреля 2010

Моя идея состоит в том, что вместо использования сложного триггера просто получите ограничивающий прямоугольник swatchObject с помощью swatchObject.getRect(), а затем создайте свои stageBounds на основе этого. Это должно быть более чем достаточно для ваших целей.

Если это не то, что вы хотите, я могу помочь вам разобраться в математике.

И извините, я не могу дать вам функцию, пока не выясню, что такое defaultSwatchRect - где его x и y и что он должен делать.

Еще одна вещь, которую вы можете иметь в виду на будущее: математические функции (cos, sin) рассчитывают угол в радианах, тогда как свойство .rotation указывается в градусах, поэтому перед использованием необходимо выполнить преобразование.

...