2011-05-17 105 views
1

我想透視畫出一個網格,並在左下角畫一個圓。 但我無法弄清楚。當透視物體時改變位置

因此,首先我繪製網格和圓而沒有透視。

public class test extends MovieClip 
    { 
     private var _gridSprite:Sprite; 
     private var _xLineHolder:Sprite; 
     private var _yLineHolder:Sprite; 
     private var _circle:Sprite; 

     public function test() 
     { 
      init(); 
     } 

     private function init() 
     { 
      _gridSprite = new Sprite(); 
      this.addChild(_gridSprite); 

      _xLineHolder = new Sprite(); 
      _gridSprite.addChild(_xLineHolder); 
      _yLineHolder = new Sprite(); 
      _gridSprite.addChild(_yLineHolder); 

      draw(); 

      _circle = new Sprite();   
      _circle.graphics.beginFill(0xFF0000); 
      _circle.graphics.drawCircle(0, 0, 5); 
      this.addChild(_circle); 

        //Here do I set the position of the circle 
      _circle.x = _gridSprite.width + _gridSprite.x; 
      _circle.y = _gridSprite.height + _gridSprite.y; 
     } 

     private function draw() 
     { 
      var spaceXDiv:Number = 160/20; 
      var spaceYDiv:Number = 160/20; 

      _xLineHolder.graphics.clear(); 
      _yLineHolder.graphics.clear(); 

      _xLineHolder.graphics.lineStyle(1); 
      _yLineHolder.graphics.lineStyle(1); 

      for(var i:int = 0; i <= spaceXDiv; i++){ 
       _xLineHolder.graphics.moveTo(i * 20, 0); 
       _xLineHolder.graphics.lineTo(i * 20, 160); 
      } 

      for(var j:int = 0; j <= spaceYDiv; j++){ 
       _yLineHolder.graphics.moveTo(0, j * 20); 
       _yLineHolder.graphics.lineTo(160, j * 20); 
      } 
     } 
    } 

有了這個代碼,我得到以下結果

result from code above

這一切ok,圓是TE左下角。

現在我在init()設置網格的角度。我使用rotationY(我不知道這是否正確)。角度是20度。

_gridSprite = new Sprite(); 
this.addChild(_gridSprite); 
_gridSprite.rotationY = -20; 

結果不再好。該圓形不再位於網格的左下角。

Circle is not in bottom left corner of grid

我的問題是:我該如何改變圓的位置,使其在透視網格的左下角?

enter image description here

我嘗試了很多,但我的數學是不是那麼好了。 這是不會將圓圈放在左下角的示例代碼。

var gridLeft:Number = _gridSprite.width + _gridSprite.x; 
_circle.x = gridLeft - gridLeft * Math.tan(20 * Math.PI/180); 

var gridBottom:Number = _gridSprite.height + _gridSprite.y; 
_circle.y = gridBottom - gridBottom * Math.tan(20 * Math.PI/180); 

我希望你明白我的問題,你可以幫助我。

感謝,

文森特

回答

3

我覺得你過於複雜的問題。您只需要在同一個容器中旋轉網格和圓形。在這種情況下,你的'test'類是容器,但你總是可以創建另一個精靈作爲容器。

所以,如果你想旋轉兩個網格,圓,只是做的_gridSprite.rotationY = -20;this.rotationY = -20代替

+0

感謝,TIS工作的,愚蠢的我忘了。但現在我想通過拖動圓圈來改變網格的尺寸。當我這樣做時,鼠標指針不是透視圖,而是圓圈。所以我需要相同的公式把鼠標指針下的紅圈放在 – Vinzcent 2011-05-17 14:33:56

+0

那麼請接受這個答案。我不確定'鼠標指針是不是透視'的意思。您可能想爲此創建另一個問題。另外,爲什麼不使用3D庫,因爲您似乎在嘗試創建某種3D編輯器? – 2011-05-17 14:37:12