【问题标题】:AS3 Dragging issueAS3 拖动问题
【发布时间】:2017-09-15 15:06:11
【问题描述】:

我有一个电影剪辑列表,每个剪辑都有很多孩子的

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 改变了导致抖动的有线方式,我该如何防止它?

【问题讨论】:

    标签: actionscript-3 flash air


    【解决方案1】:

    您的问题最像您计算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
    }
    

    【讨论】:

    • 亲爱的 BadFeelingAboutThis 非常感谢,但关于我的情况,我认为由于英语不好我无法澄清,我有一系列我的游戏玩家的电影剪辑,我得到了数据从 php 方面来看,但这些播放器影片剪辑中的每一个都包含其他一些影片剪辑,例如播放器图片、按钮和....并且我将拖动事件侦听器添加到舞台
    • 但是当我在播放器影片剪辑上拖动时,子影片剪辑会被事件识别为目标,这导致了问题,因为 eve.stageY,我尝试类似eve.stopPropagation();这解决了问题,但只有没有孩子存在的部分(它自己的阶段)可以拖动并且您的帮助完整发布stackoverflow.com/questions/31328666/…
    • eve.stopPropagation() 几乎解决了这个问题,但我的问题是舞台事件已经冒泡到它的孩子认识到它自己的 stageY 而不是事件监听器的所有者的舞台
    • 关于你对我的问题的回答有一个问题,因为播放器电影剪辑是舞台的孩子,他们有自己的孩子,比如播放器图片等等......这些嵌套的孩子是可能的通过拖动来定位目标实际上不可能计算到作为主容器的舞台的偏移量
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多