数组选择中的Javascript对象
Javascript Objects in array selection
你好,stackoverlowians~!
是我,一个孤独的程序员,在我的探索过程中遇到了一个问题。你看问题出在这段代码上。
for(var a = 0; a < bullets.length; a++) {
for(var b = 0; b < pigs.length; b++) {
if(bullets[a].y < 300) {
if(bullets[a].x > pigs[b].x && bullets[a].x < pigs[b].x + pigImage.width &&
bullets[a].y > pigs[b].y && bullets[a].y < pigs[b].y + pigImage.height) {
pigExplode(pigs[b].x);
bullets.pop(a);
pigs.pop(b);
player.kills++;
}
}
}
}
问题如下。我有两个数组,里面有对象;一个数组包含所有项目符号对象的项目符号和一个猪阵列,它容纳了所有的猪(在我的游戏中要射击的目标)(然而,我不鼓励以任何方式射杀猪)
现在我要做的是看看阵列中的一颗子弹是否击中了阵列中的其中一个清管器,我已经将清管器和子弹添加到阵列中,如下所示:
bullets.push(new Bullet());
pigs.push(new Pig());
当我试图移除这个数组中的某个对象时,比如说我有5个猪。
这将是0、1、2、3、4。如果我要射杀2号猪。4个会死。如果我要射杀1号猪。4个会死。如果我要射杀4号猪。4个会死。
所以,无论我射杀谁,它都会带走最后一头猪。这个问题的错误是:
Uncaught TypeError: Cannot read property 'y' of undefined
它指示的行是:
if(bullets[a].y < 300) {
这是在双for循环中,我检查是否有子弹击中了猪。然而,只有当我碰到一只不是数组中最后一只的猪时,错误才会弹出。
有人知道我的代码是怎么回事吗?我已经处理这个问题好几天了,我不知道自己做错了什么。提前感谢!
代码有两个问题:
-
您正在使用
pop
从数组中删除项,这将始终删除最后一个项。这就是为什么它总是杀死最后一头猪。 -
命中后,您将继续执行内部循环,因此您将检查是否有子弹不再在数组中。如果您正在检查最后一个项目符号,那么变量
a
现在指向数组中最后一个项之外。
使用splice
删除数组中的项目,通过项目符号向后循环,这样就可以在不打乱循环的情况下删除一个项目,并在命中后结束内部循环:
for (var a = bullets.length - 1; a >= 0; a--) {
for (var b = 0; b < pigs.length; b++) {
if (bullets[a].y < 300) {
if (bullets[a].x > pigs[b].x && bullets[a].x < pigs[b].x + pigImage.width &&
bullets[a].y > pigs[b].y && bullets[a].y < pigs[b].y + pigImage.height) {
pigExplode(pigs[b].x);
bullets.splice(a, 1);
pigs.splice(b, 1);
player.kills++;
break; // end the inner loop
}
}
}
}
如果清管器命中,这将从清管器阵列中移除清管器
if(bullets[a].x > pigs[b].x && a bunch of other stuff) {
pigExplode(pigs[b].x);
bullets.splice(a,1);//remove bullit at a
pigs.splice(b,1);//remove pig at b
player.kills++;//smell bacon, jummy
//always forget this both bullits and pigs are one shorter
// if you dont decrease the counters you'll skip one pig and bullit
a--;
b--;
}
.pop总是删除数组的最后一项。
相关文章:
- Chrome开发工具(如何知道我在调用哪个javascript对象)
- 循环遍历以数组为值的Javascript对象
- 从ajax请求中获取javascript对象
- 如何从对象的原型方法访问JavaScript对象属性
- 将XML转换为普通的旧JavaScript对象
- 通过引用传递JavaScript对象
- javascript对象操作:根据指定条件选择属性
- Javascript对象类在单击时打开窗口进行颜色选择,并在更改时替换对象背景颜色
- 如何在异步函数中使用javascript对象
- 临时Javascript对象
- 如何在ASP中为用户控件添加Javascript对象网
- 使用数组向下搜索Javascript对象
- Rails将JavaScript对象存储到Model的有效方式
- JavaScript对象不是从原型链继承的
- 如何创建具有默认值的JavaScript对象字段?(AngularJS模型相关)
- SetInterval在javascript对象中表现怪异
- Javascript 对象和 this 关键字
- 如何在不知道关键字的情况下访问javascript对象值
- 在 JavaScript 对象中设置要使用的运算符的属性
- 如何搜索JavaScript对象并更改值