lufy's legend

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 9845|回复: 6
打印 上一主题 下一主题

按钮穿透问题,点击或mouseover两个按钮重叠部分会穿透

[复制链接]

1

主题

0

好友

15

积分

士兵

Rank: 1

跳转到指定楼层
楼主
发表于 2017-2-1 21:56:50 |只看该作者 |倒序浏览
demo中的猜拳游戏,我将一个按钮位置移动了一下与另一个有重叠,这时候点击会响应下面的。在论坛找了一圈,找到这个http://www.lufylegend.com/forum/ ... &extra=page%3D7,有说建立新层,并在层上绑定空事件的。尝试了一下也不行。不知道该怎么办了,求解答。
下面是修改的main.js:
init(50,"mylegend",800,400,main);
var loadingLayer,
backLayer,
resultLayer,
clickLayer,
selfBitmap,
enemyBitmap,
selfTextAll,
selfTextWin,
selfTextLoss,
selfTextDraw,
win = 0,
loss = 0,
draw = 0;
var imglist = {};
var imgData = new Array(
                {name:"title",path:"../images/title.png"},
                {name:"shitou",path:"../images/shitou.png"},
                {name:"jiandao",path:"../images/jiandao.png"},
                {name:"bu",path:"../images/bu.png"}
                );
var checkList = [
[0,1,-1],
[-1,0,1],
[1,-1,0]
];
var showList = new Array();
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(){
        showList.push(new LBitmapData(imglist["shitou"]));
        showList.push(new LBitmapData(imglist["jiandao"]));
        showList.push(new LBitmapData(imglist["bu"]));
        //添加游戏界面背景
        backLayer.graphics.drawRect(10,'#008800',[0,0,LGlobal.width,LGlobal.height],true,'#000000');
       
        //显示游戏标题
        var titleBitmap = new LBitmap(new LBitmapData(imglist["title"]));
        titleBitmap.x = (LGlobal.width - titleBitmap.width)/2;
        titleBitmap.y = 10;
        backLayer.addChild(titleBitmap);
        //玩家方出拳图片
        selfBitmap = new LBitmap(showList[0]);
        selfBitmap.x = 400 - selfBitmap.width - 50;
        selfBitmap.y = 130;
        backLayer.addChild(selfBitmap);
        //电脑方出拳图片
        enemyBitmap = new LBitmap(showList[0]);
        enemyBitmap.x = 400 + 50;
        enemyBitmap.y = 130;
        backLayer.addChild(enemyBitmap);
        //玩家电脑名称设定
        var nameText;
        nameText = new LTextField();
        nameText.text = "玩家";
        nameText.weight = "bolder";
        nameText.color = "#ffffff";
        nameText.size = 24;
        nameText.x = selfBitmap.x + (selfBitmap.width - nameText.getWidth())/2;
        nameText.y = 95;
        backLayer.addChild(nameText);
        nameText = new LTextField();
        nameText.text = "电脑";
        nameText.weight = "bolder";
        nameText.color = "#ffffff";
        nameText.size = 24;
        nameText.x = enemyBitmap.x + (enemyBitmap.width - nameText.getWidth())/2;
        nameText.y = 95;
        backLayer.addChild(nameText);
       
        //结果显示层初始化
        initResultLayer();
        //操作层初始化
        initClickLayer();
}
function initResultLayer(){
        resultLayer = new LSprite();
        resultLayer.graphics.drawRect(4,'#ff8800',[0,0,150,110],true,'#ffffff');
        resultLayer.x = 10;
        resultLayer.y = 100;
        backLayer.addChild(resultLayer);
        selfTextAll = new LTextField();
        selfTextAll.text = "猜拳次数 : 0";
        selfTextAll.weight = "bolder";
        selfTextAll.x = 10;
        selfTextAll.y = 20;
        resultLayer.addChild(selfTextAll);
        selfTextWin = new LTextField();
        selfTextWin.text = "胜利次数 : 0";
        selfTextWin.weight = "bolder";
        selfTextWin.x = 10;
        selfTextWin.y = 40;
        resultLayer.addChild(selfTextWin);
        selfTextLoss = new LTextField();
        selfTextLoss.text = "失败次数 : 0";
        selfTextLoss.weight = "bolder";
        selfTextLoss.x = 10;
        selfTextLoss.y = 60;
        resultLayer.addChild(selfTextLoss);
        selfTextDraw = new LTextField();
        selfTextDraw.text = "平局次数 : 0";
        selfTextDraw.weight = "bolder";
        selfTextDraw.x = 10;
        selfTextDraw.y = 80;
        resultLayer.addChild(selfTextDraw);
}
function initClickLayer(){
        clickLayer = new LSprite();
        clickLayer.graphics.drawRect(4,'#ff8800',[0,0,300,110],true,'#ffffff');
        var msgText = new LTextField();
        msgText.text = "请出拳:";
        msgText.weight = "bolder";
        msgText.x = 10;
        msgText.y = 10;
        clickLayer.addChild(msgText);
        var shitouLSprite=new LSprite();
        shitouLSprite.graphics.drawRect(0,"#ffffff",[0, 0, LGlobal.width, LGlobal.height]);
        var btnShitou = getButton("shitou");
        btnShitou.x = 30;
        btnShitou.y = 35;
        // clickLayer.addChild(btnShitou);
        shitouLSprite.addChild(btnShitou);
        shitouLSprite.addEventListener(LMouseEvent.MOUSE_UP, function(e){});
        clickLayer.addChild(shitouLSprite);
        btnShitou.addEventListener(LMouseEvent.MOUSE_UP,onclick);
        var btnJiandao = getButton("jiandao");
        var jiandaoLSprite=new LSprite();
        jiandaoLSprite.graphics.drawRect(0,"#ffffff",[0, 0, LGlobal.width, LGlobal.height]);
        btnJiandao.x = 55;
        btnJiandao.y = 35;
        // clickLayer.addChild(btnJiandao);
        jiandaoLSprite.addChild(btnJiandao);
        jiandaoLSprite.addEventListener(LMouseEvent.MOUSE_UP, function(e){});
        clickLayer.addChild(jiandaoLSprite);
        btnJiandao.addEventListener(LMouseEvent.MOUSE_UP,onclick);
        var btnBu = getButton("bu");
        btnBu.x = 200;
        btnBu.y = 35;
        clickLayer.addChild(btnBu);
        btnBu.addEventListener(LMouseEvent.MOUSE_UP,onclick);
        clickLayer.x = 250;
        clickLayer.y = 275;

        backLayer.addChild(clickLayer);
}
function onclick(event,display){
        var selfValue,enemyValue;
        if(display.name == "shitou"){
                selfValue = 0;
                console.log(0);
        }else if(display.name == "jiandao"){
                selfValue = 1;
                console.log(1);
        }else if(display.name == "bu"){
                selfValue = 2;
                console.log(2);
        }
        enemyValue = Math.floor(Math.random()*3);
        selfBitmap.bitmapData = showList[selfValue];
        enemyBitmap.bitmapData = showList[enemyValue];
        var result = checkList[selfValue][enemyValue];
        if(result == -1){
                loss += 1;
        }else if(result == 1){
                win += 1;
        }else{
                draw += 1;
        }
        selfTextWin.text = "胜利次数 : " + win;
        selfTextLoss.text = "失败次数 : " + loss;
        selfTextDraw.text = "平局次数 : " +  draw;
        selfTextAll.text = "猜拳次数 : " + (win + loss + draw);
}
function getButton(value){
        var btnUp = new LBitmap(new LBitmapData(imglist[value]));
        btnUp.scaleX = 0.5;
        btnUp.scaleY = 0.5;
        var btnOver = new LBitmap(new LBitmapData(imglist[value]));
        btnOver.scaleX = 0.5;
        btnOver.scaleY = 0.5;
        btnOver.x = 2;
        btnOver.y = 2;
        var btn = new LButton(btnUp,btnOver);
        btn.name = value;
        return btn;
}


回复

使用道具 举报

37

主题

8

好友

9309

积分

诸侯王

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

沙发
发表于 2017-2-2 09:34:38 |只看该作者
你这个应该不涉及到层的问题
你用的引擎版本是多少呢?如果不是最新版本的话,换最新版本试一下

如果是最新版的引擎,那默认是开启了鼠标容器的,下面是API文档中鼠标容器的dispatchAllEvent的说明
http://lufylegend.com/api/zh_CN/ ... ty_dispatchAllEvent
里面有demo链接,你可以测试一下,两个按钮可以同时触发,也可以只触发一个
不回答与技术和引擎不相关的问题
回复

使用道具 举报

1

主题

0

好友

15

积分

士兵

Rank: 1

板凳
发表于 2017-2-2 11:03:17 |只看该作者
lufy 发表于 2017-2-2 09:34
你这个应该不涉及到层的问题
你用的引擎版本是多少呢?如果不是最新版本的话,换最新版本试一下

感谢大神,回复好快,这样确实可以实现按钮只响应上层触发。
但是,按钮在鼠标指上的时候会切换状态还是会穿透的,下层的也会切换,这个能调吗?
回复

使用道具 举报

37

主题

8

好友

9309

积分

诸侯王

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

地板
发表于 2017-2-2 11:09:27 |只看该作者
robin 发表于 2017-2-2 11:03
感谢大神,回复好快,这样确实可以实现按钮只响应上层触发。
但是,按钮在鼠标指上的时候会切换状态还是会 ...

你是做PC的开发吗?
如果是移动开发的话,其实可以不考虑这些的,因为手机上是直接用手指点的,而PC上是鼠标移过去的
不回答与技术和引擎不相关的问题
回复

使用道具 举报

1

主题

0

好友

15

积分

士兵

Rank: 1

5#
发表于 2017-2-2 12:56:47 |只看该作者
lufy 发表于 2017-2-2 11:09
你是做PC的开发吗?
如果是移动开发的话,其实可以不考虑这些的,因为手机上是直接用手指点的,而PC上是 ...

哦,对,移动端没问题呢,lufy大神你真勤快。问题不大,即使不能设置添加自定义事件还是可以的。
请问下一版会考虑这个问题吗?毕竟pc端不太方便。
monkey。d。lufy
回复

使用道具 举报

37

主题

8

好友

9309

积分

诸侯王

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

6#
发表于 2017-2-2 13:48:41 |只看该作者
robin 发表于 2017-2-2 12:56
哦,对,移动端没问题呢,lufy大神你真勤快。问题不大,即使不能设置添加自定义事件还是可以的。
请问下 ...

我看看吧,如果不影响引擎效率的话,会调整一下的
不回答与技术和引擎不相关的问题
回复

使用道具 举报

6

主题

0

好友

94

积分

士兵

Rank: 1

7#
发表于 2017-9-1 14:58:05 |只看该作者
您好,这个游戏,下面请出拳,为什么石头点不动啊?
回复

使用道具 举报

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

防止垃圾广告,请填写任意字符

Archiver|lufy's legend

GMT+8, 2024-4-19 18:30 , Processed in 0.052841 second(s), 21 queries .

Powered by Discuz! X2.5

© 2001-2012 Comsenz Inc.

回顶部