Ошибка 1010 в ActionScript

После компиляции и запуска моей программы я сталкиваюсь с ошибкой времени выполнения 1010:

TypeError: Error #1010: A term is undefined and has no properties.
at DC/updateScore()[DC::frame74:36]

Это кусок кода:

function updateScore(e:MouseEvent) {
var i:uint=0;
for(;i<balls.length;i++)
    if(balls[i]==e.target)
        break;
if(balls[i].isCorrect) {
    score++;
    timeField.text = new String(score);
}
else {
    score--;
    timeField.text = new String(score);
}
}

В чем проблема? Как вы видите, я использую функцию updateScore для слушателя MouseEvent.

6 ответов

Пожалуйста, поместите {и} в цикл for!

function updateScore(e:MouseEvent) {
    var i:uint=0;
    for(;i<balls.length;i++) {
            if(balls[i]==e.target)
                break;
        if(balls[i].isCorrect) {
            score++;
            timeField.text = new String(score);
        }
        else {
            score--;
            timeField.text = new String(score);
        }
    }
}

Разрешается не использовать {и} с циклом, но тогда будет выполнено только первое утверждение.

Ошибка означает, что вы пытаетесь манипулировать свойствами неопределенной переменной. Вы, вероятно, пытаетесь получить доступ balls[i] когда нет элемента на i-й позиции. Или, возможно, есть другой объект без свойства, к которому вы хотите получить доступ.

На какой линии вы получаете ошибку. Уверены ли вы balls[i].isCorrect является действительным свойством.

Ответ @Jens есть, но его объяснение сбивает с толку.

Когда ваш цикл выходит,

i = balls.length

На следующей строке вы ссылаетесь

balls[i].isCorrect.

На этой конкретной линии, я на 1 больше, чем наибольший индекс в шарах. Следовательно, исключение.

Хотя вы, возможно, не захотите, чтобы каждая из этих строк выполнялась для каждого повторения цикла, как думал Дженс, вы должны решить эту проблему.

Попробуйте добавить

if(!balls){
   trace('balls missing');
   return;
}

до объявления цикла

На основании предоставленного вами небольшого кода вы либо не создали balls вектор или timeFiled текстовое поле.

var balls:Vector<Ball>;
balls.push(new Ball(whatever), new Ball(whatever), new Ball(whatever));
trace(balls);

//ERROR
//you must initialize the vector:  var vector:Vector<Ball> = new <Ball>;

какая часть кода находится в строке 36?

проблема также может быть связана с Ball объекты isCorrect имущество.

Вы пропустили первое правило в цикле for:

for(;i<balls.length;i++)

Я думаю ты имел ввиду

for(i;i<balls.length;i++)
Другие вопросы по тегам