微信小游戏 拖动选牌会卡,有代码,有视频

微信小游戏里的拖动touch, 在拖动距离比较大时,会有很大的延迟。
下面是录的视频,拖动时手指绝对一条线直接滑过,但是touch里的回调却延迟了很久
在web和native里都是没有问题的。视频下面附上关键代码
creator.rar (672.5 KB)
视频中卡顿的时候,根本就没到touch方法里面来。求官方关注一下。

onTouch(event,d){
if(this.cards[0].length == 0){
return;
}
if(event.type == cc.Node.EventType.TOUCH_START){
for(var i=0; i<this.cards[0].length; i++){
var card =this.cards[0][i];
card.color = this.normalColor;
if(card.y == this.startPoint[0].y){
card.isSelect = false
}
}
event.stopPropagation();
if(this.selectFunc){
this.selectFunc();
}
}
var pos = this.cardNode[0].convertToNodeSpace(event.getLocation())
var card = this.getCardByTouch(pos.x-this.cardNode[0].width/2);
if(card && !card.isControl){
card.color = this.selectColor;
card.isControl = true;

       this.console.string = 'touch'+ card.cardData
    }

    if(event.type == cc.Node.EventType.TOUCH_END || event.type == cc.Node.EventType.TOUCH_CANCEL){
      var cards = [];
        for(var i=0; i<this.cards[0].length; i++){
            var card = this.cards[0][i];
            card.color = this.normalColor;
            if(card.isControl){
                card.isSelect = !card.isSelect;
            }
            if(card.isSelect){
                cards.push(card.cardData);
            }
            card.isSelect = false
            card.y = 0
            card.isControl = false;
        }
        if(cards.length == 0){
            this.selectCards = [];
            return
        }
        
        if(this.selectCards.length == 0){
            this.selectCards = GameLogic.SearchOutCards({type:GameLogic.CardType.invalid},cards);
        } else {
            this.selectCards = cards;
        }

        console.log(this.selectCards);
        for(var i=0; i<this.selectCards.length; i++){
            var cardData = this.selectCards[i];
            var card = null;
            for(var j=0; j<this.cards[0].length; j++){
                var c = this.cards[0][j];
                if(c.cardData == cardData){
                    card = c;
                    break;
                }
            }
            if(card){
                card.isSelect = true;
                card.y = this.startPoint[0].y+30
            }
        }

        if(this.selectCards.length > 0 && this.selectFunc){
            SoundMgr.playSound('xuanpai.wav')
            this.selectFunc(this.selectCards);
        }
    }
},

getCardByTouch(x){
    var startx = this.cards[0][0].x;
    if(x < startx){
        return null;
    }
    var len = Math.floor((x - this.cards[0][0].x) /65)
    
    if(len >= this.cards[0].length){
        if(len <= this.cards[0].length+2){
            return this.cards[0][this.cards[0].length-1]
        }
        return null;
    }
    return this.cards[0][len]
},

上面方法中moved的时候,才不过5-6代码,不会计算量过大的问题

别沉啊,求指点一下

按理说是不会有这个问题的,你可以附件上传个demo,具体分析一下。

找到原因了,因为card.color = this.selectColor;,选完牌后,修改了一下颜色,就是因为这个,所以会顿卡

后面我在牌的node上添加一个灰色的层,拖动选牌时,来控制显示这个层,就没有一点问题了