可拖动菜单,包含带有 AIR 的不可拖动按钮



首先,我对Flash和AS3非常陌生。

我正在尝试为移动应用程序创建一个包含 12 个按钮的显示对象。由于有十二个按钮将全部打开为单独的菜单,因此它们显然都不适合移动设备屏幕。这就是为什么我想将所有按钮放在一个显示对象上,可以上下拖动以显示当前未显示在屏幕上的按钮。

我在尝试此操作时遇到了许多问题。1)如果我使包含按钮的对象可拖动,位于按钮后面,我无法通过按钮单击它以拖动它(除非我击中没有任何按钮的最佳位置,但这对用户没有效率)。

2)如果我使包含按钮的对象可拖动并将其放在按钮前面,那么我无法单击按钮以打开菜单并访问其中包含的内容。

3)由于某种原因,当我不希望它们时,所有按钮都可以单独拖动。例如,我单击屏幕上的任意位置(无论 touchID 点是否在按钮上)来移动整个按钮列表,如果我碰巧单击一个按钮,那么它不会移动整个列表,而是移动一个按钮。

因此,这里的主要问题是"如何使用拖动方法(例如手机上的设置菜单)创建按钮列表并滚动列表,而无需将按钮彼此分开拖动。因此,包含的显示对象是可拖动的,按钮是可单击的。

一个叫格伦的人用他的例子做得很好:http://rabidgadfly.com/2010/03/as3-clickable-button-inside-a-draggable-movie-clip/

但是,如果您单击他示例中的黄色按钮,则可以将其拖出灰色框。我希望我的按钮相对于灰色框保持静止。因此,您可以移动灰色框,但黄色按钮仍保留在框中的相同位置,但不能在框中拖动按钮。

我不熟悉智能手机的加速度计事件,但我确实知道如何使用常规 actionscript 3 侦听器解决此问题。(您可以将这些转换为智能手机听众使用的任何内容)

想到的解决方案是在整个可拖动框上有一个鼠标向下侦听器和一个鼠标向上侦听器。当鼠标按下事件触发时,您启动一个计时器以在大约四分之一秒内关闭,当它触发时,您将设置一个输入帧(或基于计时器)的函数来触发每一帧。这将更新整个框的位置,对应于当前鼠标位置的每个帧(您的拖动框效果),当鼠标向上侦听器触发时,它会停止拖动(此时,如果鼠标向上,则用户根本不触摸屏幕)。

还要为每个按钮添加一个鼠标单击侦听器。这样,使用四分之一秒的计时器,您就知道如果用户只想单击一个按钮,那么他们将单击,在鼠标按下和鼠标向上事件之间留下不到四分之一秒的时间(因此拖动永远不会开始)并且仅单击按钮。如果用户按住鼠标超过四分之一秒,那么您就知道他们一定是在尝试拖动整个东西。

这就像区分想要拖动框的用户和想要单击其中按钮的用户的唯一方法。

显然,它

不必是四分之一秒,它可以是您想要的任何时间长度,甚至可以根本没有时间,但是当人们只想单击按钮并在单击时不小心滑动它时,这可能会搞砸事情。

如果您有任何问题或问题,请发表评论,我会尽力提供帮助。

最新更新