Метод JavaScript не найден - PullRequest
       0

Метод JavaScript не найден

0 голосов
/ 05 ноября 2011

У меня есть «объект»:

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();
    }
}

Теперь проблема, я получаю следующую ошибку:

Uncaught TypeError: Объект 0 не имеет метода 'Tick'

Хотя методы «InitRand (...)», которые я так же добавляю в Скалу, работают ...

Что я делаю не так?

Ответы [ 2 ]

2 голосов
/ 05 ноября 2011

Ваша проблема в том, что использование for in не предназначено для перебора массивов.Это сделано для перечисления свойств объекта.

Вы должны использовать обычный цикл for:

for(var i = 0; i < rocks.length; i++) {
    rocks[i].Tick();
}
1 голос
/ 05 ноября 2011

Вы должны инициализировать ваши переменные:

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();
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...