2

首先,我对 Flash 和 AS3 还很陌生。

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

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

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

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

所以这里的主要问题是“我怎样才能创建一个按钮列表并使用拖动方法(例如手机上的设置菜单)滚动列表而不将按钮彼此分开。” 所以包含的显示对象是可拖动的,按钮是可点击的。

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

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

4

1 回答 1

0

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

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

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

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

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

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

于 2013-11-14T00:26:53.930 回答