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がどこにあり、何をするのかを理解するまで、実際に関数を提供することはできません。

将来のために覚えておきたいもう1つのこと:数学関数(cos、sin)はラジアン単位の角度を期待しますが、.rotationプロパティは度単位であるため、使用する前に変換する必要があります。

于 2010-04-13T03:23:52.117 に答える