wklc2015 发表于 2015-6-3 09:13:32

事件,点击屏幕触发事件的bug

http://blog.csdn.net/lufy_legend/article/details/7654607
昨天学习了这篇文章创建刚体的文章,在本地测试通过,拿到chrome里模拟手机端时,出现了问题。

本来应该是点击屏幕才触发事件,但是点击其他地方也触发了。

如图

backLayer.addEventListener(LMouseEvent.MOUSE_UP, add);本来点击1,即舞台层才触发点击。
bug复现:第一次点击,只有点击1才触发,点击一次1位置后,再点击2或者1都会触发。

请问这是什么原因呢?

还是说屏幕backLayer层大小位置变了?





lufy 发表于 2015-6-3 09:29:28

至少我得知道你代码怎么写的,backLayer上都有什么东西才能回答吧

wklc2015 发表于 2015-6-3 09:54:25

本帖最后由 wklc2015 于 2015-6-3 10:02 编辑

lufy 发表于 2015-6-3 09:29 static/image/common/back.gif
至少我得知道你代码怎么写的,backLayer上都有什么东西才能回答吧init(10, "mylegend", 300, 300, main);
        var backLayer, cLayer, wallLayer, bitmap, loadingLayer;
        var imglist = {};
        var imgData = new Array(
                {name : "bird1", path : "./img/bird1.png"},
                {name : "bird2", path : "./img/bird2.png"},
                {name : "stage01", path : "./img/stage01.png"}
        );
        function main() {
                LGlobal.setDebug(true);

                backLayer = new LSprite();
                addChild(backLayer);

                loadingLayer = new LoadingSample3();
                backLayer.addChild(loadingLayer);
                LLoadManage.load(
                        imgData,
                        function(progress) {
                                loadingLayer.setProgress(progress);
                        },
                        function(result) {
                                imglist = result;
                                backLayer.removeChild(loadingLayer);
                                loadingLayer = null;
                                gameInit();
                        }
                );
        }
        function gameInit() {
//                console.log(new LBox2d())
                LGlobal.box2d = new LBox2d();
                wallLayer = new LSprite();
                wallLayer.graphics.drawRect(0, "#000000", , true, "#cccc80");
                wallLayer.alpha = 1;
                backLayer.addChild(wallLayer);
                //top
                wallLayer = new LSprite();
                wallLayer.x = 150;
                wallLayer.y = 0;
                backLayer.addChild(wallLayer);
                wallLayer.addBodyPolygon(300, 0, 0);
                //left
                wallLayer = new LSprite();
                wallLayer.x = 0;
                wallLayer.y = 150;
                backLayer.addChild(wallLayer);
                wallLayer.addBodyPolygon(0, 300, 0);
                //bottom
                wallLayer = new LSprite();
                wallLayer.x = 150;
                wallLayer.y = 300;
                backLayer.addChild(wallLayer);
                wallLayer.addBodyPolygon(300, 0, 0);
                //right
                wallLayer = new LSprite();
                wallLayer.x = 300;
                wallLayer.y = 150;
                backLayer.addChild(wallLayer);
                wallLayer.addBodyPolygon(0, 300, 0);
                backLayer.addEventListener(LMouseEvent.MOUSE_UP, add);
        }
        function add(event) {
                var x = event.offsetX;
                var y = event.offsetY;
                var rand = Math.random();
                if(rand < 0.33){
                        cLayer = new LSprite();
                        bitmap = new LBitmap(new LBitmapData(imglist["bird1"]));
                        if(x + bitmap.getWidth() >= LGlobal.width){
                                x = LGlobal.width - bitmap.getWidth();
                        }
                        cLayer.x = x;
                        cLayer.y = y;
                        backLayer.addChild(cLayer);
                        cLayer.addChild(bitmap);
                        cLayer.addBodyCircle(bitmap.getWidth() * 0.5, bitmap.getHeight() * 0.5, bitmap.getWidth() * 0.5, 1, .5, .4, .5);
                        cLayer.setBodyMouseJoint(true);
                } else if(rand < 0.66){
                        cLayer = new LSprite();
                        backLayer.addChild(cLayer);
                        bitmap = new LBitmap(new LBitmapData(imglist["bird2"]));
                        cLayer.addChild(bitmap);
                        var shapeArray = [
                                [, , ]
                        ];
                        cLayer.addBodyVertices(shapeArray, 27, 27, 1, .5, .4, .5);
                        cLayer.box2dBody.SetPosition(new LGlobal.box2d.b2Vec2((50 + Math.random() * 700) / LGlobal.box2d.drawScale, 50 / LGlobal.box2d.drawScale));
                        cLayer.setBodyMouseJoint(true);
                } else{
                        cLayer = new LSprite();
                        bitmap = new LBitmap(new LBitmapData(imglist["stage01"]));
                        if(x + bitmap.getWidth() >= LGlobal.width){
                                x = LGlobal.width - bitmap.getWidth();
                        }
                        cLayer.x = x;
                        cLayer.y = y;
                        backLayer.addChild(cLayer);
                        cLayer.addChild(bitmap);
                        cLayer.addBodyPolygon(bitmap.getWidth(), bitmap.getHeight(), 1, 5, .4, .2);
                }
        }代码几乎都是你文章上面的

lufy 发表于 2015-6-3 10:32:27

wklc2015 发表于 2015-6-3 09:54 static/image/common/back.gif
代码几乎都是你文章上面的

多谢了
我看了下,确实有这个问题,这是因为我将touchend事件添到了document上而导致的,之所以这么做,就是为了让手机上体验更好一些,是故意这么做的,但是导致了不全屏的时候的这个问题,
你可以先用mouse_down来替换mouse_up,可以防止这个问题
以后更新的时候我得再好好想一想要不要解决一下

wklc2015 发表于 2015-6-3 10:43:12

lufy 发表于 2015-6-3 10:32 static/image/common/back.gif
多谢了
我看了下,确实有这个问题,这是因为我将touchend事件添到了document上而导致的,之所以这么做, ...

多谢老大指点
页: [1]
查看完整版本: 事件,点击屏幕触发事件的bug