2013-07-08 2 views
2

Я собираюсь точка прибудет якорь относительно DisplayObjectAS3 Как я могу получить опорную точку (точка опоры, точка регистрации) положение с Display Object

пример: 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 должен иметь доступ к этапу, в противном случае getBounds() и getRect() возвращают значения фикции (проверены). Фактически, опорная точка соответствует (0,0) точке объекта в своем собственном пространстве координат, таким образом, выполняется запуск test.getRect(test) для вашего тестового объекта (-20, -18,40,90) - обратите внимание, что координата Y 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