Что не так с тем, как я объявляю эту переменную Javascript?

У меня есть объект TruckModel, который определен ранее в моем файле JavaScript с именем milktruck.js.

Я пытаюсь создать массив этих объектов TruckModel, потому что я не знаю в любой момент времени, сколько объектов TruckModel потребуется, когда игроки моей многопользовательской игры входят и выходят.

Я знаю, что мой текущий код не работает, потому что модель не будет отображаться, когда я использую функцию teleportToThat ниже.

Мне удалось отобразить модель, объявив только один объект TruckModel() в моем файле index.html, а затем используя функцию teleportToThat.

Вот мой код для этого, вы видите какие-либо ошибки в том, как я это делаю?

Нерабочая версия:

 var opponentTrucks = [];

 for (var i = 0; i < markers.length; i++) {

      opponentTrucks[i] = new TruckModel();
      opponentTrucks[i].teleportToThat( lat, lng, heading );

 }

Рабочая версия: (Разница в том, что я пытаюсь иметь различное количество объектов TruckModel)

Объявлено в файле index.html:

 var model;

Объявлено в файле JavaScript:

 model.teleportToThat( lat, lng, heading );

Вот весь файл JavaScript:

http://thehobbit2movie.com/milktruck.js


person user671891    schedule 31.05.2011    source источник
comment
Пожалуйста, добавьте описание того, как и почему вы узнали, что это ошибочно.   -  person Pointy    schedule 31.05.2011
comment
Добавлено, теперь должно быть немного более описательным.   -  person user671891    schedule 31.05.2011


Ответы (2)


Если вы хотите иметь возможность находить объекты по числовому индексу, вам нужен массив, а не простой объект:

var opponentTrucks = [];

То, что у вас есть, будет работать, но нет причин не использовать настоящий массив, если вы все равно собираетесь обращаться с ним как с массивом.

редактировать до сих пор не совсем ясно, в чем проблема. Вот эта строка:

opponentTrucks[i].teleportToThat( lat, lng, heading );

Что это должно делать? Откуда звонит? Каково значение «я»? Если у вас просто есть этот оператор после цикла, то он не сработает. Если вы хотите, чтобы функция "teleportToThat()" вызывалась для каждого в массиве, вам следует поместить вызов функции внутри цикла "for".

person Pointy    schedule 31.05.2011
comment
Это все равно не исправило. У меня нет сообщений об ошибках, но я знаю, что это не работает, потому что модель никогда не появляется. - person user671891; 31.05.2011
comment
Что ж, было бы полезно, если бы вы изначально сказали, что код не работает. Однако код (с моими изменениями или без), который вы разместили, вряд ли будет проблемой. - person Pointy; 31.05.2011
comment
Хорошо, теперь я добавил больше описания. - person user671891; 31.05.2011
comment
Извините, да, это должно быть в цикле for, я просто напортачил, набирая код на этом сайте. Функция teleportToThat принимает объект TruckModel и телепортирует/отображает модель в новых координатах широты, долготы и направления. - person user671891; 31.05.2011
comment
Хорошо, в этом коде я вообще не вижу проблем. Что не работает? Другими словами, что заставляет вас думать, что есть проблема, и почему вы думаете, что это связано с этим кодом? - person Pointy; 31.05.2011
comment
Я думаю, проблема в том, что функция teleportToThat не работает. Модель никогда не появляется. Я считаю, что это связано с тем, как устроен код, потому что я могу заставить его работать, не используя массив, а просто используя объект. - person user671891; 01.06.2011
comment
Ну, вы пробовали отлаживать его? Например, с Firebug или отладчиком Chrome? Эта часть кода выглядит хорошо для меня. - person Pointy; 01.06.2011
comment
Я пробовал отлаживать с помощью Firebug, но это, похоже, не помогает. Каждый раз, когда я пытаюсь запустить Firebug, происходит сбой. Я считаю, что это потому, что Firebug слишком много компонентов для разделения и анализа. - person user671891; 01.06.2011
comment
@ user671891 это кажется маловероятным. Вы можете попробовать Chrome или просто добавить в свой код сообщения console.log(), чтобы отслеживать, что происходит. - person Pointy; 01.06.2011

Если вы используете только цифровые клавиши, вам нужен массив, а не объект:

var opponentTrucks = [];

for (var i = 0; i < markers.length; i++) {
     opponentTrucks.push(new TruckModel());
}

Это, вероятно, не остановит работу вашего кода, но почти наверняка будет улучшением.

Если есть еще ошибки, возможно, вы могли бы сказать, что они есть :-)

person lonesomeday    schedule 31.05.2011
comment
Это все равно не исправило. У меня нет сообщений об ошибках, но я знаю, что это не работает, потому что модель никогда не появляется. - person user671891; 31.05.2011