lufy's legend

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

LSprite成员鼠标事件失效

[复制链接]

46

主题

3

好友

1866

积分

偏将军

Rank: 4

跳转到指定楼层
楼主
发表于 2014-1-11 23:43:09 |只看该作者 |倒序浏览
在我的塔防游戏中有一个类:
function CCloseButton(func){
        var self = this;
        base(self,LSprite,[]);
       
        var normalBitmapData = new LBitmapData(CGlobal.datalist["widgets"],350,303,36,33);
        self.normalBitmap = new LBitmap(normalBitmapData);
        var overBitmapData = new LBitmapData(CGlobal.datalist["widgets"],350,336,36,33);
        self.overBitmap = new LBitmap(overBitmapData);
       
        self.button = new LButton(self.normalBitmap,self.normalBitmap);
        self.addChild(self.button);
       
        var back = new LSprite();
        back.graphics.drawRect(0,"",[-20,-20,self.button.getWidth()+40,self.button.getHeight()+40],true,"transparent");
        self.addChild(back);
       
        self.button.addEventListener(LMouseEvent.MOUSE_DOWN,function(event,o){
                if(CLock.lockCharaOperating)return;
                o.removeChild(o.bitmap_over);
                o.bitmap_over = o.parent.overBitmap;
                o.addChild(o.bitmap_over);
        });
       
        self.button.addEventListener(LMouseEvent.MOUSE_UP,function(event,o){
                if(CLock.lockCharaOperating)return;
                o.removeChild(o.bitmap_over);
                o.bitmap_over = o.parent.normalBitmap;
                o.addChild(o.bitmap_over);
                func(event,o.parent.parent);
        });
       
        self.addEventListener(LMouseEvent.MOUSE_MOVE,function(event,o){
                if(
                        event.selfX < self.button.x
                        || event.selfY < self.button.y
                        || event.selfX > self.button.x + self.button.getWidth()
                        || event.selfY > self.button.y + self.button.getHeight()
                ){
                        o.button.removeChild(o.button.bitmap_over);
                        o.button.bitmap_over = o.normalBitmap;
                        o.button.addChild(o.button.bitmap_over);
                }
        });
}

这个类在1.7.7版本上鼠标事件有效。但是到了1.8.6就出问题了,经我实验,发现是self.button不响应事件,但是self还是要响应的。还有几个类似的类也出了相同的问题。可能是LSprite的成员会出现鼠标事件失效的问题。
当然,也许可以直接给self加事件,但是我这里有个需求:鼠标碰到按钮后不会有任何反应,但是点击后就会更换按钮图片,这时候如果玩家把鼠标保持点击拖动出按钮,第二次碰到按钮后就会立刻更换图片达不到效果了。所以我在self.button后面还加了一个稍微大一点的透明矩形,然后如果鼠标移动到那上面时就把数据全部调回。这样效果就基本实现了。所以直接给self加事件不太现实。
如果这是引擎的bug,请及时更新吧。我看过lufylegend.js的代码,鼠标事件部分我只能说是了解一点。我本打算自己看看能不能解决,但是太绕,所以就恳请lufy前辈更新吧。

最后,我把这个类要用的图片奉上,方便测试:

回复

使用道具 举报

37

主题

8

好友

9312

积分

诸侯王

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

沙发
发表于 2014-1-12 00:05:33 |只看该作者
1.7.7中的鼠标事件没有涉及到遮挡,所有的鼠标事件都可以触发
1.8.6中的一般的鼠标事件,当父级对象有事件触发的时候,子类的事件不会触发
因为你在父级对象和它的子对象上同时加入了鼠标事件,点击子对象就相当于点击了自己本身,所以只有父级对象的事件触发了,
如果想让所有的事件都能触发,
解决办法是使用鼠标容器,方法很简单,设定下面三个容器有效就可以了
LMouseEventContainer.set(LMouseEvent.MOUSE_DOWN,true);
LMouseEventContainer.set(LMouseEvent.MOUSE_UP,true);
LMouseEventContainer.set(LMouseEvent.MOUSE_MOVE,true);
不回答与技术和引擎不相关的问题
回复

使用道具 举报

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

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

Archiver|lufy's legend

GMT+8, 2024-5-5 22:45 , Processed in 0.045669 second(s), 20 queries .

Powered by Discuz! X2.5

© 2001-2012 Comsenz Inc.

回顶部