2013-06-01 56 views
0

我真的很习惯使用动作脚本,并且可以使用一个很好的解释如何做到这一点,以及它如何工作。AS3如何检测舞台上没有目标的startTouchDrag?

我想在Android的AS3中创建一个舞台事件。

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

我已经开始喜欢这个来检测他们是否触及阶段:

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); 
} 

任何有关如何做到这一点或解释目标的见解/建议,es特别的例子代码,将不胜感激。感谢您的时间!

+0

也许你不清楚'startTouchDrag()'方法应该做什么。它的意思是实际拖动一个对象,就像在拖放操作中一样。舞台不是你可以在屏幕上拖动的东西。您只能在正在或扩展'Sprite'类的对象上使用'startTouchDrag()'方法(其阶段不是)。我不擅长触摸事件,否则我会提供更多建议。但是绝对不可以在舞台上使用'startTouchDrag()'试试看[这里](http://help.adobe.com/en_US/as3/dev/WS1ca064e08d7aa93023c59dfc1257b16a3d6-7ffe.html) –

回答

0

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

尝试并拖动stage ... stage实际上就是您的Flash影片显示的阶段。它包含整个Flash应用程序,因此不能被拖动。

为了重申我在上面的评论中所述的内容,startTouchDrag()是您在Sprite上调用的一种方法(或者一些延伸为Sprite的对象)。当您想要在屏幕上拖动某些内容时(例如在拖放操作中)使用此方法。

+0

你已经说是有道理的。我只是在努力寻找如何跟踪他们的运动,我不确定要搜索什么。我的stageTouchBegin函数可以很容易地为我提供触摸的坐标,但我不知道如何使它保持跟踪它们的移动直到释放。 – Eric

+0

@Eric我强烈建议阅读我上面链接的评论中的Adobe文章。最后一个代码示例与您正在做的事情非常相似。由于触摸手势可能涉及多个“触点”,因此他们使用该事件的“touchPointID”属性来确定该事件来自哪个“手指”。当触摸终于结束时,只需确定结束的x/y坐标,并从头开始比较w/coords。 –

+0

感谢您的全力支持Sunil,我在您的指导下开展工作。我花了一段时间才明白如何正确使用touchPoint和事件。这就像你说的,我不需要startTouchDrag()。我只需要在我的函数中调用事件: 'stage.addEventListener(TouchEvent.TOUCH_MOVE,stageTouchMoveHandler);' 'function stageTouchMoveHandler(event:TouchEvent):void'然后它给我当前位置,用户在在飞行中。 – Eric