我有一个电影剪辑列表,每个剪辑都有很多孩子的
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 changs(从其中一个电影剪辑嵌套的孩子到另一个)eve.stageY改变了导致摇动的有线方式,我该如何防止呢?
答案 0 :(得分:0)
您的问题与计算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
}