lufy's legend

标题: 关于用引擎写滑屏事件 [打印本页]

作者: chensz    时间: 2018-1-26 17:20
标题: 关于用引擎写滑屏事件
大神你好,我用引擎(LMouseEvent)写了滑屏的东西,比如一个很长的元件,上下滑动,在PC上移动的灵敏度和跟随度都没问题,搁在手机上移动跟随有点缓慢延迟的感觉。我就想了解一下是引擎本身在手持端上的问题还是我写的LMouseEvent写导致的问题?请大神赐教。

function VerMoveLesson() {
        base(this, LSprite, []);
        var self = this;
        self.Mobj;
        self.Mchild;
        self.es = true;
        self.crm = false;
}

VerMoveLesson.prototype.VerMove = function(obj, child, stagewidth, stageheight) {
        base(this, LSprite, []);
        var self = this;
        self.Mobj = obj;
        self.Mobj.removeAllEventListener();
        self.Mchild = child;
        self.Mchild.removeAllEventListener();
        self.Mobj.self = self;
        self.Mobj.removeAllEventListener();
        self.Mchild.removeAllEventListener();
        self.MIsDown = false;
        self.distance = 0;
        self.upDistance = 0;
        self.stageWidth;
        self.stageHeight;
        self.speed = 10;
        self.easing = 0.2;
        self.targetX;
        self.targetY;
        self.dir = 0;

        var tempMask = new LSprite();
        tempMask.graphics.drawRoundRect(0, "#333333", [0, 0, stagewidth, stageheight, 0], false, "#000000");
        child.mask = tempMask;

        var Mtimer;
        if(self.Mchild.getHeight() > stageheight) {
                self.stageHeight = stageheight;
                self.stageWidth = stagewidth;
                self.Mchild.addEventListener(LMouseEvent.MOUSE_DOWN, onMDown); //alert(self.Mchild);
                self.Mchild.addEventListener(LMouseEvent.MOUSE_UP, onMUp);
                self.Mobj.addEventListener(LMouseEvent.MOUSE_MOVE, onMMove);
                self.crm = true;
        }

        function onMDown(e) {
               
                        self.Mobj.removeEventListener(LEvent.ENTER_FRAME, self.onframe)
                        self.distance = e.selfY + self.Mobj.y;
                        self.upDistance = e.offsetY;
                        self.MIsDown = true;

        }

        function onMUp(e) {

                        if(self.Mchild.y<= self.stageHeight - self.Mchild.getHeight()) {
                                self.Mchild.y = self.stageHeight - self.Mchild.getHeight();
                        }
                        self.targetY = self.Mchild.y;
                        if(Math.abs(e.offsetY - self.upDistance) > 100) {
                                clearTimeout(Mtimer);
                                self.MIsDown = false;
                                var temp = e.offsetY - self.upDistance;
                                self.upDistance = temp;
                                self.targetY = self.Mchild.y + temp;
                                if(self.upDistance > 0) {
                                        self.dir = 1;
                                } else {
                                        self.dir = -1;
                                }
                        }

                        if(self.targetY <= self.stageHeight - self.Mchild.getHeight()) {
                                self.targetY = self.stageHeight - self.Mchild.getHeight();
                        }
                        if(self.targetY > 0) {
                                self.targetY = 0;
                        }
                        if(self.getEs() == true) {
                                self.Mobj.addEventListener(LEvent.ENTER_FRAME, self.onframe)
                        } else {
                                self.setEs(true);
                                self.targetY = self.Mchild.y;
                        }

        }

        function onMMove(e) {
                        if(self.MIsDown == true) {

                                var temp = e.offsetY;
                                self.upDistance = temp;
                                self.Mchild.y = e.offsetY - self.distance;
                                if(self.Mchild.y <= self.stageHeight - self.Mchild.getHeight() - 100) {
                                        self.Mchild.y = self.stageHeight - self.Mchild.getHeight() - 100;
                                }
                                if(self.Mchild.y >= 100) {
                                        self.Mchild.y = 100;
                                }
                        }
        }

}


VerMoveLesson.prototype.getEs = function() {
        var self = this;
        return self.es;
}
VerMoveLesson.prototype.setEs = function(es) {
        var self = this;
        self.es = es;
}

VerMoveLesson.prototype.onframe = function(e) {
        var self = e.currentTarget.self; //console.log(e.currentTarget.self);
        var dy = self.targetY - self.Mchild.y;
        if(Math.abs(dy) < 1) {
                self.Mchild.y = self.targetY;
                self.Mobj.removeEventListener(LEvent.ENTER_FRAME, self.onframe);
        } else {
                var vy = dy * self.easing;

                self.Mchild.y += vy;
        }
}function VerMoveLesson() {
        base(this, LSprite, []);
        var self = this;
        self.Mobj;
        self.Mchild;
        self.es = true;
        self.crm = false;
}

VerMoveLesson.prototype.VerMove = function(obj, child, stagewidth, stageheight) {
        base(this, LSprite, []);
        var self = this;
        self.Mobj = obj;
        self.Mobj.removeAllEventListener();
        self.Mchild = child;
        self.Mchild.removeAllEventListener();
        self.Mobj.self = self;
        self.Mobj.removeAllEventListener();
        self.Mchild.removeAllEventListener();
        self.MIsDown = false;
        self.distance = 0;
        self.upDistance = 0;
        self.stageWidth;
        self.stageHeight;
        self.speed = 10;
        self.easing = 0.2;
        self.targetX;
        self.targetY;
        self.dir = 0;

        var tempMask = new LSprite();
        tempMask.graphics.drawRoundRect(0, "#333333", [0, 0, stagewidth, stageheight, 0], false, "#000000");
        child.mask = tempMask;

        var Mtimer;
        if(self.Mchild.getHeight() > stageheight) {
                self.stageHeight = stageheight;
                self.stageWidth = stagewidth;
                self.Mchild.addEventListener(LMouseEvent.MOUSE_DOWN, onMDown); //alert(self.Mchild);
                self.Mchild.addEventListener(LMouseEvent.MOUSE_UP, onMUp);
                self.Mobj.addEventListener(LMouseEvent.MOUSE_MOVE, onMMove);
                self.crm = true;
        }

        function onMDown(e) {
               
                        self.Mobj.removeEventListener(LEvent.ENTER_FRAME, self.onframe)
                        self.distance = e.selfY + self.Mobj.y;
                        self.upDistance = e.offsetY;
                        self.MIsDown = true;

        }

        function onMUp(e) {

                        if(self.Mchild.y<= self.stageHeight - self.Mchild.getHeight()) {
                                self.Mchild.y = self.stageHeight - self.Mchild.getHeight();
                        }
                        self.targetY = self.Mchild.y;
                        if(Math.abs(e.offsetY - self.upDistance) > 100) {
                                clearTimeout(Mtimer);
                                self.MIsDown = false;
                                var temp = e.offsetY - self.upDistance;
                                self.upDistance = temp;
                                self.targetY = self.Mchild.y + temp;
                                if(self.upDistance > 0) {
                                        self.dir = 1;
                                } else {
                                        self.dir = -1;
                                }
                        }

                        if(self.targetY <= self.stageHeight - self.Mchild.getHeight()) {
                                self.targetY = self.stageHeight - self.Mchild.getHeight();
                        }
                        if(self.targetY > 0) {
                                self.targetY = 0;
                        }
                        if(self.getEs() == true) {
                                self.Mobj.addEventListener(LEvent.ENTER_FRAME, self.onframe)
                        } else {
                                self.setEs(true);
                                self.targetY = self.Mchild.y;
                        }

        }

        function onMMove(e) {
                        if(self.MIsDown == true) {

                                var temp = e.offsetY;
                                self.upDistance = temp;
                                self.Mchild.y = e.offsetY - self.distance;
                                if(self.Mchild.y <= self.stageHeight - self.Mchild.getHeight() - 100) {
                                        self.Mchild.y = self.stageHeight - self.Mchild.getHeight() - 100;
                                }
                                if(self.Mchild.y >= 100) {
                                        self.Mchild.y = 100;
                                }
                        }
        }

}


VerMoveLesson.prototype.getEs = function() {
        var self = this;
        return self.es;
}
VerMoveLesson.prototype.setEs = function(es) {
        var self = this;
        self.es = es;
}

VerMoveLesson.prototype.onframe = function(e) {
        var self = e.currentTarget.self; //console.log(e.currentTarget.self);
        var dy = self.targetY - self.Mchild.y;
        if(Math.abs(dy) < 1) {
                self.Mchild.y = self.targetY;
                self.Mobj.removeEventListener(LEvent.ENTER_FRAME, self.onframe);
        } else {
                var vy = dy * self.easing;

                self.Mchild.y += vy;
        }
}



作者: lufy    时间: 2018-1-26 21:50
手机性能不可能跟PC来比,即使你写的代码没有任何问题,画面上显示的对象大小以及对象多少都是影响效率的因素,
另外,以下两个组件是引擎提供的
http://lufylegend.com/api/zh_CN/out/classes/UI:LListView.html
http://lufylegend.com/api/zh_CN/out/classes/UI:LScrollbar.html
滚动一个大的对象,可以用LScrollbar,显示一个列表,可以用LListView
LListView完全不用担心效率问题,但LScrollbar的效率就取决于显示的内容了
作者: chensz    时间: 2018-1-29 09:46
lufy 发表于 2018-1-26 21:50
手机性能不可能跟PC来比,即使你写的代码没有任何问题,画面上显示的对象大小以及对象多少都是影响效率的因 ...

嗯,好,感谢大神指点,厉害。
作者: chensz    时间: 2018-1-29 16:01
chensz 发表于 2018-1-29 09:46
嗯,好,感谢大神指点,厉害。

UIListView有局限啊感觉,LListView能将几个不同高度的元素添加到列表吗?
作者: chensz    时间: 2018-1-29 16:02
lufy 发表于 2018-1-26 21:50
手机性能不可能跟PC来比,即使你写的代码没有任何问题,画面上显示的对象大小以及对象多少都是影响效率的因 ...

ListView有局限啊感觉,LListView能将几个不同高度的元素添加到列表吗?
作者: lufy    时间: 2018-1-30 07:56
chensz 发表于 2018-1-29 16:02
ListView有局限啊感觉,LListView能将几个不同高度的元素添加到列表吗?

不同高度暂时不能用LListView,你用LScrollbar也可以,但是最好自己加一些优化处理,比如不在显示窗口内的对象就设置visible让它不显示,这样能提高不少性能




欢迎光临 lufy's legend (http://lufylegend.com/forum/) Powered by Discuz! X2.5