【问题标题】:AS3 How to detect startTouchDrag on Stage with no target?AS3 如何在没有目标的情况下检测舞台上的 startTouchDrag?
【发布时间】:2013-06-01 00:26:59
【问题描述】:

总的来说,我对使用动作脚本很陌生,可以很好地解释如何执行此操作以及它是如何工作的。

我正在尝试在 AS3 for Android 中创建舞台活动。

当用户触摸舞台而不是特定对象时,我需要检测他们是否正在拖动以及手指拖动到的位置。

我已经开始这样检测他们是否触摸了舞台:

stage.addEventListener(TouchEvent.TOUCH_BEGIN, stageTouchBegin); 

var stageTouchDragBounds:Rectangle = new Rectangle(0, 0, stage.stageWidth, stage.stageHeight);

function stageTouchBegin(event:TouchEvent):void
{
event.target.startTouchDrag(event.touchPointID, false, stageTouchDragBounds:Rectangle);
trace(event.stageX);
trace(event.stageY);
}

这一行是我得到错误的地方,我假设这是因为目标通常会引用电影符号或其他东西,但在这种情况下,并不是因为它是舞台。我尝试用舞台替换目标,但没有成功:

event.target.startTouchDrag(event.touchPointID, false, stageTouchDragBounds:Rectangle);

这是错误:1061:通过静态类型为 flash.events:TouchEvent 的引用调用可能未定义的方法 startTouchDrag。


从那里我的计划是继续使用这样的东西开始记录他们所在的位置:

var curPosX; var curPosY;

function stageTouchMoveHandler(event:TouchEvent):void
{   
trace(event.stageX);
this.curPosX = event.stageX;
trace(event.stageY);
this.curPosY = event.stageY;
}

然后这样处理结尾:

function stageTouchEndHandler(event:TouchEvent):void
{
event.target.stopTouchDrag(event.touchPointID);
}

任何关于如何做到这一点的见解/建议或对目标的解释,尤其是示例代码,将不胜感激。感谢您的宝贵时间!

【问题讨论】:

  • 也许你不清楚startTouchDrag() 方法应该做什么。它用于实际拖动对象,例如拖放操作。舞台不是您可以在屏幕上拖动的东西。您只能对属于或扩展Sprite 类(舞台不是)的对象使用startTouchDrag() 方法。我对触摸事件不是超级熟练,否则我会提供更多建议。但绝对不可能在舞台上使用startTouchDrag() :) 尝试阅读here

标签: android actionscript-3 drag stage


【解决方案1】:

在考虑了您要做什么之后,我认为您的问题的答案是不要调用 startTouchDrag() 方法并按照您的计划进行。您所展示的是确定用户在何处开始/停止其“触摸移动”手势的正确方法。

尝试拖动stage 是没有意义的...stage 实际上是您的Flash 电影放映的舞台。它包含整个 Flash 应用程序,因此无法拖动。

重申我在上面的评论中所说的,startTouchDrag() 是您在 Sprite(或扩展 Sprite 的某些对象)上调用的方法。当您想在屏幕上拖动某些东西时使用此方法,例如在拖放操作中。

【讨论】:

  • 你说的很有道理。我只是在努力寻找如何跟踪他们的运动,我不确定要搜索什么。我的 stageTouchBegin 函数可以很容易地为我提供他们触摸的坐标,但我不知道如何让它在释放之前一直跟踪他们的运动。
  • @Eric 我强烈建议阅读我在上面链接的评论中的 Adob​​e 文章。最后一个代码示例与您正在做的事情非常相似。由于触摸手势可能涉及多个“触摸点”,因此它们使用事件的touchPointID 属性来确定事件来自“哪个手指”。当触摸最终结束时,只需确定结束的 x/y 坐标,并与开始的坐标进行比较。
  • 感谢您的所有帮助 Sunil,在您的指导下我得到了它。我花了一段时间才了解如何正确使用 touchPoint 和事件。就像你说的那样,我不需要 startTouchDrag()。我只需要在我的函数中调用事件:stage.addEventListener(TouchEvent.TOUCH_MOVE, stageTouchMoveHandler);function stageTouchMoveHandler(event:TouchEvent):void 然后它会告诉我用户当前所处的位置。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-11-25
  • 1970-01-01
  • 2013-02-10
相关资源
最近更新 更多