gpt4 book ai didi

actionscript-3 - 哈?!.. event.localX 在缩放的 Sprite 上保留 "proportions"?

转载 作者:行者123 更新时间:2023-12-04 06:48:08 26 4
gpt4 key购买 nike

我计划为我的媒体播放器安排简单的进度条,绘制一个彩色矩形,然后根据需要更改它的宽度属性。从视觉上看它看起来不错 - 缩放得很好(我无法用零宽度绘制它,所以我指定了最小值 0.1)。

但真正的问题是不同的,而且看起来很奇怪,或者至少绝对不明显。由于我需要监视用户对该进度条的点击,以支持媒体流中的搜索操作,我想 - 我会检测点击事件,将 x 坐标作为父 DisplayObject 的偏移量,重新计算时间并进行搜索。现在事实证明,event.localX 并没有真正与 Sprite 一起“缩放”。正如我所说,进度条最右边的 x 坐标最初是 0.1,并且它保持这种状态(!),无论实际进度条变得多宽 - 5、100、1000。如果您单击进度条最右边的像素,它将是 - 0.1!

嗯?..

我显然做错了什么。也许有一种方法,比如 - refreshCoordinates() 之类的?它是什么?..

最佳答案

了解为什么会发生这种情况对于了解 Flash 的工作原理非常重要。关键是要意识到每个显示对象都有自己的坐标系,当您的范围在该系统内时,对象本身是否旋转、缩放等都无关紧要。如果您住在条形图中,您就知道是图形为 0.1 像素宽,并且在右边框上发生了单击。您不知道您所在的显示对象是否已被拉伸(stretch)或变换到层次结构中的某处。这就是为什么您正在查看的事件属性称为 localX - 它告诉您点击发生在 local 的显示对象中。

这就是为什么在这种情况下,通常将条形图设置为 100 像素宽,然后在舞台上根据需要调整其大小。如果图形内部为 100px,并且您检测到该范围内的点击,那么您可以将 localX 视为百分比。如果您随后重新设计页面并更改栏的视觉宽度,则无需触摸代码。

顺便说一句,如果您想将一个位置从一个坐标系转换到另一个坐标系,只需同时使用 localToGlobalglobalToLocal。即:

var localToThis:Point = new Point( someX, someY );
var globalToStage:Point = localToGlobal( localToThis );
var localToParent:Point = parent.globalToLocal( globalToStage );

(或者另一种解决问题的方法是简单地在显示层次结构的更上层捕获点击事件,其中栏实际上是 100 像素宽,而不是在图形内部,而它不是。)

最后一点:不要养成使图形宽度为 0.1 像素的习惯。对于与渲染相关的值,如 xrotation 等,Flash 有时会出于性能原因四舍五入,低于视觉上可区分的大小。只需将对象设置为 100px 或其他大小,然后将其缩小到您喜欢的大小即可。

关于actionscript-3 - 哈?!.. event.localX 在缩放的 Sprite 上保留 "proportions"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4453762/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com