lufy's legend

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

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前辈更新吧。

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

回复

使用道具 举报

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

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

Archiver|lufy's legend

GMT+8, 2024-5-19 02:48 , Processed in 0.045384 second(s), 20 queries .

Powered by Discuz! X2.5

© 2001-2012 Comsenz Inc.

回顶部