我有一个电影剪辑列表,每个剪辑都有许多孩子的
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;
}我正在尝试滚动电影剪辑列表当我拖拽在舞台的一部分是空的,每件事都工作,但当我拖拽电影剪辑它有一个问题(例如,当滚动它抖动没有任何原因),在一些调试后,我发现当我拖拽和eve.target的变化(从一个电影剪辑嵌套的孩子到另一个)的eve.stageY改变有线方式导致的震动,我如何防止它?
发布于 2017-09-15 23:45:14
您的问题最像是您计算y位置的方式。如果你想让它是相对的,你必须只使用delta值(并且只使用stageY值来确定向上或向下)
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
}https://stackoverflow.com/questions/46242642
复制相似问题