Actionscript 3 Flash builder Mobile AS3项目:将DisplayObject居中

Actionscript 3 Flash builder Mobile AS3项目:将DisplayObject居中,actionscript-3,flash,object,mobile,center,Actionscript 3,Flash,Object,Mobile,Center,编辑:另请参见关于Stackoverflow的下一个问题: 它与DPI设置有关 我想将DisplayObject置于屏幕中央。这是从资源动态创建的图像。创建对象后,我使用以下代码将其居中: public function showProgress(bValue : Boolean = true):void { this.imgProgress.visible = bValue; if( bValue ) { this.imgProgress.x = (this.stage

编辑:另请参见关于Stackoverflow的下一个问题:

它与DPI设置有关


我想将DisplayObject置于屏幕中央。这是从资源动态创建的图像。创建对象后,我使用以下代码将其居中:

public function showProgress(bValue : Boolean = true):void
{
  this.imgProgress.visible = bValue;
  if( bValue )
  {
    this.imgProgress.x = (this.stage.stageWidth - this.imgProgress.width) * 0.5;
  }
}
看起来很简单,但物体仍然不在中心。例如:

this.stage.stageWidth == 500;
this.imgProgress.width == 480;
Result is: 10px; (this.imgProgress.x) /* 10px is correct */
我尝试了几种方法,也尝试了localToGlobal和GlobalToLocal,但得到了不可预测的结果,仍然没有居中

我想这和屏幕的dpi或者其他什么有关?但是Capabilities.screenDPI返回奇怪的结果。例如,作为iPhone3GS运行时,它返回163dpi

如何计算正确的中心位置

编辑: 一些额外信息:

public class Main extends Sprite
{
// setup stage
this.stage.color = 0;
this.stage.align = StageAlign.TOP_LEFT;
this.stage.scaleMode = StageScaleMode.NO_SCALE;

imgProgress是这个阶段的一个子阶段,它与纵横比有关(当计算时,您可以正确地将其居中)

另见:
(stage.stageWidth-displayObject.width)/2
正确,因此,可能是图像的注册点有问题,或者图像中有一些透明的空间,或者甚至您刚刚用
scaleMode
放大/缩小了SWF,但未设置为
TOP\u LEFT
。同意此代码仅在displayObject是舞台的子对象时才正确,如果它是另一个DisplayObjectContainer的子容器,而该容器在阶段中不在0,0,则将关闭居中。哇,太快了,谢谢。DisplayObject被添加到该阶段,this.stage.align=StageAlign.TOP\u左,this.stage.scaleMode=StageScaleMode.NO\u缩放。除以2等于乘以0.5。乘法更安全,因为避免因某种原因被零除。