egret开发mud客户端解决socket发送多个包导致无法定点滚动弹窗scrv高度的问题

egret开发mud客户端解决socket发送多个包导致无法定点弹窗内容起点高度的问题。
以下为判断滚动窗口是否到达底部

   if (this.messageContain.contentHeight > this.messageContain.height) 

当每次前端回调接受一个socket信息的时候,会将信息添加到弹窗

 this.messageContain.addChild(maintext);

但由于mud战斗或者其他操作上,一次性会发送多个包。例如释放pfm连招时。就要执行多次判断文字是否到达弹窗底部的定点代码。
每次文字到达底部会执行如下代码:

   this.messageContain.scrollV = this.messageContain.contentHeight - this.messageContain.height;

将弹窗内容物起始点定点,但如果是一次性发送多个包多个文字时。将scrollv打印,会出现该属性会多次执行后保持不变。但是如果是单个包多行文字则不会出现这样的问题。

打印调试以后猜测原因:
首先打印addChild的执行毫秒数,查看egret官方文档。socket回调是异步方法。由此可知当由于将内容物执行进弹窗的运行比判断窗口慢,即便他们在同一方法内,但由于处理回调信息是异步的。同时addchild在运行时并不会阻碍下面的代码执行。所以定点代码永远执行比添加快。另外由于内容label添加进弹窗时会有一个5-6的高度错位,例如一个原来有1000高度滚动窗口,加入35高度的label以后,他的可视区域是1040,而不是1035.所以添加前添加后进行值判断代码都是不可取的。

这里是解决方法:`

if (this.messageContain.contentHeight > this.messageContain.height) {
                        var timer: egret.Timer = new egret.Timer(100, 1);
                        timer.addEventListener(egret.TimerEvent.TIMER_COMPLETE,function() {
                            this.messageContain.scrollV = this.messageContain.contentHeight - this.messageContain.height;
                        }, this);
                        timer.start();
                        console.error(this.messageContain.scrollV);
                    }

即将内容物添加进弹窗以后,延迟100毫秒调用定位代码。即可解决。

上一篇:Egret Inspector google 插件 浏览器报错的解决方案:


下一篇:使用Egret粒子编辑器实现烟雾效果