- 注册时间
- 2013-2-20
- 最后登录
- 2020-1-26
- 阅读权限
- 45
- 积分
- 1866
- 精华
- 1
- 帖子
- 181
|
在我的塔防游戏中有一个类:
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前辈更新吧。
最后,我把这个类要用的图片奉上,方便测试:
|
|