2014-10-29 2 views
0

Итак, у меня есть задание для школы на следующей неделе, но я получаю сообщение об ошибке. Я спросил об этом, но она тоже не была уверена. Я некоторое время искал Google и этот сайт, но не смог найти ничего, что могло бы мне помочь. Точный выход/ошибка заключается в следующем:Actionscript 3.0, TypeError: Error # 1006: Значение не является функцией

1:false 
usedfunction Function() {} 
Maybe 
TypeError: Error #1006: value is not a function. 
    at Assign6/usedAnswer() 
    at Assign6/ballEndDrag() 

Проблема, кажется, в пределах, если заявление

if(usedAnswer(msg)==false) 

Программа даже не прослеживая значение для

trace(usedAnswer(msg)); 

Любая помощь быть оцененным. Спасибо!!

package 
{ 
    import flash.display.*; 
    import flash.events.*; 


    public class Assign6 extends MovieClip 
    { 
     var ballDisplay:Array = new Array("Yes","No","It is certain!","Ask again","Try again","Better not","Most likely","Maybe","Reply is No","Doubtful","Outlook good"); 
     var usedList: Array = new Array(); 
     var magicInt:Number; 

     public function Assign6() 
     { 

      magicBall.addEventListener(MouseEvent.MOUSE_DOWN, ballStartDrag); 
      magicBall.addEventListener(MouseEvent.MOUSE_UP, ballEndDrag); 
     } 

     // When the user presses the mouse down on magicBall, this function is called 
     function ballStartDrag(evt: MouseEvent) 
     { 
      magicBall.startDrag(); 
      magicBall.magicText.text = " "; 
      magicBall.eightDisplay.text = "8"; 
     } 

     // When the user lets the mouse up on magicBall, this function is called 
     function ballEndDrag(evt: MouseEvent) 
     { 
      magicBall.stopDrag(); 
      magicBall.eightDisplay.text = " "; 
      var checkVal = false; 
      while(checkVal==false){ 
       trace("1:" + checkVal); 
       trace("used" + usedAnswer); 
       var msg:String = randomAnswer(); 
       trace(msg); 
       trace(usedAnswer(msg)); 
        if(usedAnswer(msg)==false){ 
         usedList.push(ballDisplay[magicInt]); 
         checkVal = true; 
         trace("2" + checkVal); 
       } 
      } 
     } 

     //Display random answer in magicText 
     function randomAnswer():String 
     { 
      magicInt = Math.round(Math.random() * 11); 
      magicBall.magicText.text = ballDisplay[magicInt]; 
      return ballDisplay[magicInt]; 
     } 

     // Check whether answer has already been used 
     // Returns true if answer is in usedList and false if not 
     function usedAnswer(answer: String): Boolean 
     { 
      var i = 0; 
      for (i==0; i<usedList.length(); i++) 
      { 
       if (answer == usedList[i]) 
       { 
        return true; 
       } 
      } 
     return false; 
     } 
    } 
} 
+0

Вы должны получить бесконечный цикл, который является первой проблемой, вы должны исправить. – BotMaster

ответ

2
var i = 0; 
for (i==0; i<usedList.length(); i++) 

должен быть

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

Нет?

В качестве альтернативы вы можете заменить цикл for indexOf.

function usedAnswer(answer: String): Boolean 
{ 
    return usedList.indexOf(answer) !== -1; 
} 
0

В вашем цикле for-loop и while имеются ошибки.

заменить этот

for (i==0; i<usedList.length(); i++) 

с

for (i=0; i<usedList.length; i++) 
+0

Я бы не рекомендовал 'while (checkVal = false)' change, что вызовет бесконечный цикл! –

+0

Оба ваших решения просты. Читатели не применяют ни одно из показаний Fergoso в вашем коде. length() недействительна, = присваивание не сравнивается. – BotMaster

+0

@BotMaster: спасибо, я обновил длину. Я не уверен, исправил ли его проблему. Ожидание обратной связи OP. – Fergoso

0

Расширяя @ ответ Bariş Uşaklı в:

Ваша usedAnswer() функция ссылается usedList, который является типом массива. В ActionScript 3 у массивов есть свойство length, которое вы можете ссылаться вместо функции length(), которую вы можете вызвать. Вы можете прочитать больше в Array as3docs.

Ваше практическое исправление просто:

var i = 0; 
for (i==0; i<usedList.length; i++) 
Смежные вопросы