Ошибка 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++)