我目前正在尝试调试Flex 4中的问题,其中组件触发自定义事件,其本地坐标转换为全局坐标(即localToGlobal)和另一个组件(在显示器的单独“分支”中) list hierarchy)通过globalToLocal接收此类事件并将其用作动画的一部分。它应该是一个简单的坐标转换系统,但它不起作用。
我正在尝试调试这个,通过使用AS3的绘图API绘制Points应该是的圆圈。
以下是调度组件(下图中的组件A):
// Check where is the local x,y
this.graphics.beginFill(0x0000FF);
this.graphics.drawCircle(this.x,this.y, 10);
// Draw another circle in the "global" coordinates.
// pGC = Point in Global Coordinates.
var p: Point = new Point ( this.x, this.y);
var pGC:Point = Application(FlexGlobals.topLevelApplication).globalToLocal(p);
Application(FlexGlobals.topLevelApplication).graphics.beginFill( 0xFF0000)
Application(FlexGlobals.topLevelApplication).graphics.drawCircle(pGC.x,pGC.y,50);
// Dispatch the event
dispatchEvent( new ComponentLocationEvent( this.localToGlobal(this.x,this.y) );
以下是“监听”组件(下图中的组件B):
private var value_x:int;
private var value_y:int;
private function onComponentLocationData( pointInGlobalCoordinates:Point):void
{
var pointLocalCoord:Point = this.childContainer.globalToContent(
pointInGlobalCoordinates);
this.value_x = pointLocalCoord.x;
this.value_y = pointLocalCoord.y;
// More debugging circles
this.graphics.beginFill(0x00FF00, 0.5);
this.graphics.drawCircle(pointLocalCoord.x,pointLocalCoord.y);
}
可以预期三个圆圈(红色,绿色和蓝色)对应,每个圆圈在事件发送之前绘制,而一个(绿色)在事件侦听时绘制。实际发生的是:
有没有人知道我可以在这里尝试什么?这是我调试此错误的方法,请随时指出我做错了什么。
编辑:这是一张图片,解释了组件之间的关系以及绘制点的位置:
答案 0 :(得分:0)
首先, 你觉得蓝色圆圈是在预期的地方绘制的吗?
我假设您的第一部分代码是ComponentA的代码。
this.x和this.y是相对于它的父级的控件坐标。
在绘制组件的本地图形对象时,设置蓝色圆圈应该是其他位置,但不应位于组件的左上角。 我已经创建了自定义组件并对其进行了测试。 你可以自己尝试一下。圆形在组件中的位置取决于组件容器内的组件位置。
package components
{
import mx.controls.Button;
public class ComponentA extends Button
{
public function ComponentA()
{
super();
}
override protected function updateDisplayList(unscaledWidth:Number, unscaledHeight:Number):void
{
super.updateDisplayList(unscaledWidth, unscaledHeight);
this.graphics.beginFill(0x0000FF);
this.graphics.drawCircle(this.x,this.y, 10);
}
}
}
其次, var pGC:Point = Application(FlexGlobals.topLevelApplication).globalToLocal(p); 应该对翻译坐标没有影响(我没有测试它,但它应该是这样) 否则,如果不是应用程序级别坐标,那么全局坐标是什么......
在监听器代码中,您使用的是用于转换坐标的childContainer是什么?