我正在使用nodejs来创建游戏。碰巧这次我无法使用Delete。它不起作用,我也不知道为什么。
我执行这一行:
delete Bullet.list[i]
并且Bullet.list
是具有属性的对象,执行此行后,所需的属性不会被删除。
这是我的代码(您可以在下面的上下文中看到以上代码行):
var Map = require("./Map.js")
var Player = require("./Player.js");
var Bullet = require("./Bullet.js");
var Fly = require("./Fly.js");
var Settings = require("./Settings.js");
var Simulation = function(SOCKET_LIST){
//Update Bullets
for(var i in Bullet.list){
var bullet = Bullet.list[i];
bullet.update();
var shooter = Player.list[bullet.parent];
//Bullets collide with flies
for(var i in Fly.list){
var fly = Fly.list[i];
if(!bullet.toRemove && bullet.getDistance(fly) < 15){
if(shooter){
shooter.updateCoins(fly.killCoins);
shooter.updateXp(fly.killXp);
}
bullet.toRemove = true;
fly.toRemove = true;
}
}
//Collide with player
for(var i in Player.list){
var player = Player.list[i];
if(player.death) continue;
if(!bullet.toRemove && bullet.getDistance(player) < 32 && shooter !== player.id && shooter.team != player.team && !player.immune){
player.hp -= 1;
player.hpChanged = true;
if(player.hp <= 0){
if(shooter)
player.kill(shooter);
else
player.kill();
}
bullet.toRemove = true;
}
}
//Collide with map
if(typeof shooter == "undefined" || shooter.shootsCollideMap && Map.isColliding(bullet))
bullet.toRemove = true;
//Remove bullets
if(bullet.toRemove){
delete Bullet.list[i]; /*HERE IS THE PROBLEM. THE PROPERTY IS NOT BEING DELETED*/
Bullet.removePack.push[bullet.id];
}
}
我无法从对象Bullet.list中删除属性“ i”。
您的三个for
循环都共享同一个变量i
,因此您没有删除i
想要的索引。这是因为var i
函数是作用域的,而不是作用于单个for
循环的作用域。
执行此操作时:
delete Bullet.list[i];
值i
是i
上一个for
循环之后的值,可能不是您实际要删除的项目。也许您的意思是for
事先打破循环,以便i
将其作为要删除的特定项目?
或者,您需要将要删除的项目的索引单独保存到另一个变量。或者,仅for
当循环的值为i
current时才删除循环中的一个项目。
请记住,这var
是函数范围的。因此var i
,两个嵌套for
循环中的两个声明实际上都引用了完全相同的变量,而不是声明一个新变量。我建议将两个循环之一中的循环索引的名称更改为一个单独的变量。
如果您在let
完全受支持的环境中运行,则可以使用let i
代替,var i
然后的值i
将唯一地限定在仅for
声明它的循环中。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句