日期:2014-05-16  浏览次数:20345 次

为什么只能发一颗子弹,js
function fire(){//点击页面响应这个函数
var zidan=document.createElement('div');
        zidan.id='zidan';
zidan.style.left='79px';
zidan.style.top='180px';
zidan.style.position='absolute';
zidan.style.width='15px';
zidan.style.height='5px';
zidan.style.backgroundColor='blue';
$('div').appendChild(zidan);
window.setInterval('movezidan(zidan)',100);//子弹创建后就不停的移动
}
function movezidan(zidan){
var left = zidan.style.left;
left = parseInt(left.substr(0, left.length - 2));
left+=15;
if(left>500){
deleteElement('zidan');
}
zidan.style.left=left+'px';
}
问题来了:只能同时发一颗子弹,当第一个子弹消失后才能发第二颗,要不子弹就卡死不动了。

------解决方案--------------------
引用:
Quote: 引用:

zidan.id='zidan';
这句去掉就可以创建多个子弹了
id在整个页面不允许重复
我试过,但是没有这局话就跑不起来,最后也删除不了


不用id你就找不到加载的标签了?
数组保存所有加载的子弹div不就行了,你这样的js基础写游戏,挺难的,不打击你了,加油吧,写小游戏也是提升水平的好方法
------解决方案--------------------
window.setInterval('movezidan(zidan)',100);


这里改成

window.setInterval(function(){
    movezidan(zidan);
},100);


即可。

因为想你那样写的话,JS会去全局对象里找zidan这个变量,又因为找不到,所以就会根据dom的ID去找,于是每次只能找到一个。

这个还是设计setInterval作用域的问题,第一个参数是字符串的话,作用域是window,所以以后这样的函数还是写成下面那种形式,避免不必要的错误。