我正在使用Flex组件,可以使用右侧和左侧的手柄调整大小(即,如果单击并拖动左侧,如果单击并向右拖动,组件将向左增长,它会成长为正确的。)
现在我正在使用:
var oldX:Number = this.x;
this.x = event.stageX + (initial.x - initial.stageX); // Move the left edge to the left
this.width += oldX - this.x; // Increase the width to compensate for the move to the left
但这会使右侧跳跃,并且通常看起来很丑陋。
这样做的“权利”是什么?我有什么根本的错误吗?
谢谢!
编辑:抖动发生在组件的右侧。当我设置this.x
时,组件向左移动,屏幕重绘,然后宽度更新,屏幕再次重绘。
答案 0 :(得分:1)
我不是Flex的人,但我想你的抖动与内部使用Stage.invalidate()
的Flex框架有关,或者在帧执行期间会导致重绘。
我想可能有一种“框架”方式来处理这个问题,但是为了让你的变换成一个原子操作,你可以直接更新对象的变换,按照以下几行:
var dx:Number = // however you're finding this
var m:Matrix = new Matrix();
m.scale( scaleX*(width-dx)/width, scaleY );
m.translate( x+dx, y );
transform.matrix = m;
这应该适用于简单的图形,但我不确定它是否适用于可能需要捕获尺寸已更改的事件并重绘自身的组件。我认为这是使你的更新成为原子的唯一方法,所以如果这些方面的内容没有帮助那么你需要更多关于框架的人的答案。
答案 1 :(得分:1)
有同样的问题。
问题在于舞台不够爽快。
只需添加stage.invalidate();在你的2个任务之后......
答案 2 :(得分:0)
根据你设置句柄的监听器的方式,问题可能是一遍又一遍地调用resize代码,因为当你为组件设置新的x位置时,句柄将有效地放在鼠标光标下再次调用resize代码等等。