Actionscript 3 当某物处于透视图中时改变位置
我想在透视图中画一个网格,在左下角画一个圆。 但我没能把它做好 首先,我画了一个没有透视的网格和圆Actionscript 3 当某物处于透视图中时改变位置,actionscript-3,geometry,flash-builder,Actionscript 3,Geometry,Flash Builder,我想在透视图中画一个网格,在左下角画一个圆。 但我没能把它做好 首先,我画了一个没有透视的网格和圆 public class test extends MovieClip { private var _gridSprite:Sprite; private var _xLineHolder:Sprite; private var _yLineHolder:Sprite; private var _circle:Sprite;
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);
}
}
}
结果已经不好了。圆不再位于网格的左下角
我的问题是:如何更改圆的位置,使其在透视图中位于网格的左下角?
我试了很多,但我的数学不再那么好了。
这是一个示例代码,它没有将圆放在左下角
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);
我希望你能理解我的问题,并能帮助我
谢谢
文森特我认为你把问题复杂化了。只需在同一容器中旋转栅格和圆。在本例中,您的“test”类是容器,但您始终可以创建另一个sprite作为容器
因此,如果您想旋转栅格和圆,只需执行
this.rotationY=-20
而不是\u gridSprite.rotationY=-20代码>谢谢,这很有效,笨蛋,我忘了。但现在我想通过拖动圆来更改网格的尺寸。当我这样做时,鼠标指针不在透视图中,但圆圈在透视图中。所以我需要同样的公式把红色圆圈放在鼠标指针下,请接受这个答案。我不知道你所说的“鼠标指针不在透视图中”到底是什么意思。您可能需要为此创建另一个问题。另外,为什么不使用3D库,因为您似乎正在尝试创建某种3D编辑器?
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);