我有一个'对象':
function Rock()
{
this.size = 30.0;
this.body;
this.isDead = false;
this.vertexPosBuffer;
this.vertexColBuffer;
}
我给出了一个功能:
Rock.prototype.Tick = function()
{
this.body.ApplyForce(new b2Vec2(0, 10), this.body.GetPosition());
}
然后我制作了一系列的岩石:
var rocks;
function NewRandomRock()
{
var newRock = new Rock;
var pos = new b2Vec2;
pos.x = Math.random()*(gl.viewportWidth+1);
pos.y = Math.random()*(gl.viewportHeight+1);
newRock.InitRand(pos);
rocks.push(newRock);
}
然后我调用Tick函数:
function TickRocks()
{
for(var rock in rocks)
{
rock.Tick();
}
}
现在出现问题,我收到以下错误:
未捕获的TypeError:对象0没有方法'Tick'
虽然我以同样的方式添加到Rock的“InitRand(...)”方法确实有用......
我做错了什么?
答案 0 :(得分:2)
您的问题是使用for in
不是为了迭代数组。它用于枚举对象属性。
你应该使用普通的for循环:
for(var i = 0; i < rocks.length; i++) {
rocks[i].Tick();
}
答案 1 :(得分:1)
您必须初始化变量:
function Rock() {
this.size = 30.0;
this.body = {}; //Initialize at an object
...
}
var rocks = []; //Initalize an array
function NewRandomRock() {
...
此外,由于rocks
是一个数组,我建议使用for( ; ; )
循环:
function TickRocks()
{
for(var i=0, l=rocks.length; i<l; i++)
{
var rock = rocks[i];
rock.Tick();
}
}