事件,点击屏幕触发事件的bug
http://blog.csdn.net/lufy_legend/article/details/7654607昨天学习了这篇文章创建刚体的文章,在本地测试通过,拿到chrome里模拟手机端时,出现了问题。
本来应该是点击屏幕才触发事件,但是点击其他地方也触发了。
如图
backLayer.addEventListener(LMouseEvent.MOUSE_UP, add);本来点击1,即舞台层才触发点击。
bug复现:第一次点击,只有点击1才触发,点击一次1位置后,再点击2或者1都会触发。
请问这是什么原因呢?
还是说屏幕backLayer层大小位置变了?
至少我得知道你代码怎么写的,backLayer上都有什么东西才能回答吧 本帖最后由 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);
}
}代码几乎都是你文章上面的 wklc2015 发表于 2015-6-3 09:54 static/image/common/back.gif
代码几乎都是你文章上面的
多谢了
我看了下,确实有这个问题,这是因为我将touchend事件添到了document上而导致的,之所以这么做,就是为了让手机上体验更好一些,是故意这么做的,但是导致了不全屏的时候的这个问题,
你可以先用mouse_down来替换mouse_up,可以防止这个问题
以后更新的时候我得再好好想一想要不要解决一下 lufy 发表于 2015-6-3 10:32 static/image/common/back.gif
多谢了
我看了下,确实有这个问题,这是因为我将touchend事件添到了document上而导致的,之所以这么做, ...
多谢老大指点
页:
[1]