lufy's legend

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 948|回复: 5

关于用引擎写滑屏事件

[复制链接]

3

主题

0

好友

31

积分

士兵

Rank: 1

发表于 2018-1-26 17:20:24 |显示全部楼层
大神你好,我用引擎(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;
        }
}


回复

使用道具 举报

30

主题

5

好友

8280

积分

诸侯王

Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15

发表于 2018-1-26 21:50:20 |显示全部楼层
手机性能不可能跟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的效率就取决于显示的内容了
不回答与技术和引擎不相关的问题
回复

使用道具 举报

3

主题

0

好友

31

积分

士兵

Rank: 1

发表于 2018-1-29 09:46:43 |显示全部楼层
lufy 发表于 2018-1-26 21:50
手机性能不可能跟PC来比,即使你写的代码没有任何问题,画面上显示的对象大小以及对象多少都是影响效率的因 ...

嗯,好,感谢大神指点,厉害。
回复

使用道具 举报

3

主题

0

好友

31

积分

士兵

Rank: 1

发表于 2018-1-29 16:01:49 |显示全部楼层
chensz 发表于 2018-1-29 09:46
嗯,好,感谢大神指点,厉害。

UIListView有局限啊感觉,LListView能将几个不同高度的元素添加到列表吗?
回复

使用道具 举报

3

主题

0

好友

31

积分

士兵

Rank: 1

发表于 2018-1-29 16:02:41 |显示全部楼层
lufy 发表于 2018-1-26 21:50
手机性能不可能跟PC来比,即使你写的代码没有任何问题,画面上显示的对象大小以及对象多少都是影响效率的因 ...

ListView有局限啊感觉,LListView能将几个不同高度的元素添加到列表吗?
回复

使用道具 举报

30

主题

5

好友

8280

积分

诸侯王

Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15

发表于 2018-1-30 07:56:58 |显示全部楼层
chensz 发表于 2018-1-29 16:02
ListView有局限啊感觉,LListView能将几个不同高度的元素添加到列表吗?

不同高度暂时不能用LListView,你用LScrollbar也可以,但是最好自己加一些优化处理,比如不在显示窗口内的对象就设置visible让它不显示,这样能提高不少性能
不回答与技术和引擎不相关的问题
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

Archiver|lufy's legend

GMT+8, 2018-9-26 13:53 , Processed in 0.084787 second(s), 24 queries .

Powered by Discuz! X2.5

© 2001-2012 Comsenz Inc.

回顶部