2013-07-08 43 views
2

我会得到锚点相对的DisplayObjectAS3我怎样才能得到锚点(支点,报名点)位置的显示对象

例如: enter image description here

// HOW GET THIS VALUES IN CODE 
    Object height = 90px 
    Object width = 40px 

    anchor point X = 20px 
    anchor point Y = 72px 
// 


    real anchor point X = anchor point X/Object width = 0.5 
    real anchor point y = anchor point Y/Object height = 0.8 

预先感谢您

enter image description here

import flash.events.Event; 
import fl.motion.*; 

run(); 

var frameID:uint; 
var plistText:String; 

function run() 
{ 
    plistText = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n"; 
    processFrame(null); 
    this.addEventListener(Event.ENTER_FRAME,processFrame); 

} 

function processFrame(e:Event) 
{ 
    if (this.currentFrameLabel != null) { 
     if (this.currentFrame != 1) 
     plistText += "</array>\n"; 
     frameID = 0; 
     plistText += "<key>"+this.currentFrameLabel+"</key>\n<array>\n"; 
    } 
    plistText+="<dict>\n"; 
    plistText +="<key>FrameID</key>\n<string>"+frameID+"</string>\n" 
    frameID++; 
    for (var i:uint = 0; i < this.numChildren; i++) 
    { 
     var currentObject = this.getChildAt(i); 
     plistText += "<key>"+currentObject.name+"</key>\n" 
     plistText += "<dict>\n" 
     plistText += "<key>positionX</key>\n<string>"+currentObject.x+"</string>\n"; 
     plistText += "<key>positionY</key>\n<string>"+currentObject.y+"</string>\n"; 
     plistText += "<key>scaleX</key>\n<string>"+currentObject.scaleX+"</string>\n"; 
     plistText += "<key>scaleY</key>\n<string>"+currentObject.scaleY+"</string>\n"; 
     plistText += "<key>rotation</key>\n<string>"+currentObject.rotation+"</string>\n"; 
     plistText += "<key>alpha</key>\n<string>"+currentObject.alpha+"</string>\n"; 
     plistText += "<key>visible</key>\n<string>"+currentObject.visible+"</string>\n"; 
     plistText += "</dict>\n" 
    } 
    plistText+="</dict>\n"; 
    if (this.currentFrame == totalFrames) 
    { 
     plistText += "</array>\n</dict>\n</plist>"; 
     trace(plistText) 
     removeEventListener(Event.ENTER_FRAME, processFrame); 
     this.stop(); 
    } 
} 
+0

你需要重组你的问题 - 我不知道你在问什么。 – Marty

+0

我需要获得定位点位置 –

+0

这对实现您自己的注册点可能很有用:http://www.emanueleferonato.com/2010/08/04/changing-a-movieclip-registration-point-on-the-fly -with-as3/ –

回答

5

您可以通过getBounds()getRect()调用派生对象的定位点。为了做到这一点,您的DisplayObject应该有权访问stage,否则getBounds()getRect()会返回伪造值(测试)。实际上,定位点对应于其自身坐标空间中的对象的(0,0)点,因此,为您的测试对象运行test.getRect(test)将返回(-20,-18,40,90) - 请注意Y坐标向下增长,而不是向上。然后,您得到该矩形的左上角点,将其反转,即对象相对于其尺寸的锚点。

function getAnchorPoint(o:DisplayObject):Point { 
    var onStage:Boolean; 
    var p:DisplayObject=o.parent; 
    onStage=(o.stage!=null); 
    if (!onStage) stage.addChild(o); 
    var res:Point=new Point(); 
    var rect:Rectangle=o.getRect(o); 
    res.x=-1*rect.x; 
    res.y=-1*rect.y; 
    if (!onStage) { 
     stage.removeChild(o); 
     if (p) p.addChild(o); 
    } 
    return res; 
} 
+0

感谢您的帮助 –

2

你不能。锚点未导出,它们仅存在于* .fla文件中。

但是,您可以实现自己的锚定系统(尽可能多的库),但访问原始fla中的那些是不可能的。

+0

您不能在运行时更改锚点位置,但您确实可以获取对象的锚点。而且,它们存在于SWF中,它们只是不可见。 – Vesper

相关问题