AS3拖动问题
问题描述:
我有影片剪辑的列表,每个有许多孩子的AS3拖动问题
stage.addEventListener(TouchEvent.TOUCH_BEGIN, fl_TouchBeginHandler);
stage.addEventListener(TouchEvent.TOUCH_MOVE, fl_TouchMoveHandler);
var last_posY: Number;
function fl_TouchBeginHandler(eve: TouchEvent): void {
last_posY= eve.stageY;
}
function fl_TouchMoveHandler(eve: TouchEvent): void {
for(var i=0;i<movieClipsArray.lenght;i++){
movieClipsArray[i].y-=eve.stageY - delta_posY;
}
last_posY= eve.stageY;
}
我尝试滚动影片剪辑的名单,当我在舞台的一部分,这里是空的,但同时糖衣片每一件事情的工作原理我嘲笑电影剪辑它有一个问题(例如,当滚动它没有任何理由的摇动),并经过一些调试后,我发现当我drage和eve.target变化(从一个电影剪辑嵌套孩子到另一个) eve.stageY改变了导致抖动的有线方式,我该如何防止它?
答
你的问题最像你计算y
位置的方式。如果你希望它是相对的,你必须只使用delta值(和只使用不自然的价值,以确定向上或向下)
var direction:int = eve.stageY > lastPosY ? 1 : -1; //if the latest mouse/touch position is greater than before (lower on the screen), use a value of 1 (down)
movieClipsArray[i].y -= delta_posY * direction; //multiply the delta by the direction
这就是说,你可能会发现它更容易使用容器并滚动该容器。如果您使用的是AnimateCC,则可以选择所有剪辑,按F8并制作一个新的包含它们的MovieClip。或者,不必通过代码:
var container:Sprite = new Sprite();
addChild(container);
container.addChild(mc1); //do this for all your clips instead of using an array
然后修改,像这样的代码:
stage.addEventListener(TouchEvent.TOUCH_BEGIN, fl_TouchBeginHandler);
stage.addEventListener(TouchEvent.TOUCH_MOVE, fl_TouchMoveHandler);
var offset: Number = 0;
function fl_TouchBeginHandler(eve: TouchEvent): void {
offset = container.y - eve.stageY;
//offset is the initial difference between the touch point and container's y. You use this to make sure it doesn't jump when you first touch it
}
function fl_TouchMoveHandler(eve: TouchEvent): void {
container.y = eve.stageY + offset
}
亲爱BadFeelingAboutThis感谢aloot,但对我来说,我想是因为英文不好的我没能澄清,我有我的游戏玩家的电影剪辑阵列,我从PHP端获取数据,但这些球员电影剪辑中的每一个都包含一些其他的电影剪辑,如播放器图片,按钮和....我添加了拼图事件监听器到舞台 –
但是当我拼命如果我在播放器电影剪辑上做了这个事情,孩子电影剪辑被事件识别为目标,并且这导致了问题,由于eve.stageY,我尝试像eve.stopPropagation();这解决了问题,但只是没有孩子存在的部分(它自己的阶段)是可能drage和你的帮助完整发布https://stackoverflow.com/questions/31328666/flash-as3-how-to-disable-child -swf-mouse-clicks-without-disable -ing-mouse-hove –
eve.stopPropagation()几乎解决了这个问题,但我的问题是,舞台事件已经冒泡给它的孩子认识到它的舞台自我不是舞台是事件监听器 –