我有一个创建对象并将其作为 ID 保存在另一个对象中的函数:
var enemyList = {}; //global var
Enemy = function () {
var id = Math.random(); //random id
var enemy = {
some properties
};
enemyList.id = enemy;
}
现在,我在网上搜索时发现了“for loop”,我进行了编辑以更新包含敌人对象 ref 的每个 id:
setInterval(update, 40); //execute update all the time
var frameCount = 0; //global var
function update {
if (frameCount % 100 === 0) // spawns new enemy every 4 seconds
Enemy();
for (var key in enemyList) {
enemyList.key.update(); //move them around...
}
}
每 4 秒创建一个新敌人,然后该循环应该根据某种逻辑移动每个敌人......事情是,一旦创建了一个新敌人,它就会取代旧敌人,四处移动然后是被下一个生成的敌人取代,尽管它不应该因为它们具有唯一的 ID。为什么会这样? 感谢您的宝贵时间。
最佳答案
当你说
enemyList.id = enemy;
您实际上是将 enemy
对象设置为 enemyList
对象的 id
属性,您没有创建值为编号
。应该是
enemyList[id] = enemy;
这同样适用于 for
循环。
enemyList[key].update();
其他建议:
for..in
将获得enemyList
对象的所有可枚举的继承属性,而不仅仅是它的属性。所以,像这样的if
条件是不太正常的for (var key in enemyList) { if (enemyList.hasOwnProperty(key)) // make sure it is the own property enemyList.key.update(); // move them around... }
setInterval(update, 40);
表示update
将每 40 毫秒执行一次,而不是4
秒。所以,它应该是setInterval(update, 4000);
关于Javascript - 试图在动态属性中包含对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33128517/