2015-11-24 2 views
0

поэтому я получаю сообщение об ошибке в строке 342, котораяWeird error AS3. Срок не определен

myTextField.text = object[curPart]["text"] 

это говорит о том, что термин не определен. Трассировка curPart дает мне нулевое значение, хотя в коде, который выполняется буквально для этого момента, curPart является частью3. Ничего не меняет. Это то, что работает перед ним, функция эффекта записи типа.

private function addCharackter():void 
{ 
    if (!textFinished) 
    { 
     // add the charackter to the Textfield 
     myTextField.text = object[curPart]["text"].substring(0,counter) 
     counter++ 
     trace(curPart) // prints "part3" 
     // if you reached the end of the String stop Timer 
     if (counter == object[curPart]["text"].length+1 && !textFinished) 
     { 
      textFinished = true; 
      trace("Text finished:",textFinished) 
      clearInterval(sInt) 
      counter = 0; 
      if (object[curPart]["text"].indexOf("What do you do?") >= 0) 
      { 
       trace("H!!!") 
       choosing = true 
       createOptions(); 
      } 
      if (object[curPart]["text"].indexOf("What do you do?") >= 0) 
      { 
       dead = true; 
      } 
     } 
    } 

Еще одна странная вещь, что ошибка не произойдет, если я закончу пишущего эффект типа, нажав пространство, которое сделано здесь:

public function onEnter(key:KeyboardEvent):void 
{ 
    if (key.charCode == 32) 
    { 
     if (dead && textFinished && !choosing) 
     { 
      curPart = object[curPart]["lastPart"] 
      textFinished = false 
      dead = false; 
      myTextField.text = "" 
      counter = 0; 
      sInt = setInterval(addCharackter, textSpeed) 
     } 
     if (!textFinished && !choosing && !dead) 
     { 
      trace(textFinished) 
      trace("finishing") 
      trace(curPart) 
      myTextField.text = object[curPart]["text"] 
      if (object[curPart]["text"].indexOf("What do you do?") >= 0) 
      { 
       trace("H!") 
       choosing = true 
       createOptions(); 
      } 
      if (object[curPart]["text"].indexOf("You have died") >= 0) 
      { 
       dead = true; 
      } 
      clearInterval(sInt) 
      textFinished = true; 
     } 
     else if (textFinished && !choosing && !dead) 
     { 
      trace("Hi!!!!") 
      curPart = object[curPart]["nextPart"] 
      myTextField.text = "" 
      counter = 0; 
      sInt = setInterval(addCharackter, textSpeed) 
      textFinished = false 
     } 
    } 
} 

Я просмотрел мой код в течение нескольких часов. текст внутри part3 и part3 существуют, поскольку это работает, если я пропущу процесс ввода, нажав пробел. (это также не происходит, если я должен был пропустить процесс ввода текста перед part3.)

Редактировать: Еще одна вещь, которую я только что понял, строка 342 никогда не должна запускаться, потому что textFinished должен быть равен true (что это за минуты до этого, но когда я нажимаю пробел, это волшебство не является. Я не изменяю его на ложное где-либо, кроме тех частей, которые не работают при возникновении ошибки)

+0

FWIW, возможно, вы можете упорядочить свой код, просто сохранив ссылку на currentObject (currentObject = object [curPart]), а затем просто ссылаясь на это всюду. И сохраняя его текст один раз, а не перечитывая полную ссылку каждый раз, когда вы хотите что-то проверить по тексту. Наконец, «объект» - ужасное имя переменной. Это может противоречить зарезервированному слову. –

+0

Я знаю, что объект ужасен. Я назвал это для тестирования и никогда не менял его. – Badfitz66

ответ

0

Ничего. Нашел, почему он не работает. Ошибка глупого пользователя.