2013-03-12 2 views
0

У меня проблема с моим кодом as3, Я пытаюсь связать видеоклип с другой сценой (сценарий викторины). Итак, у меня есть 2 викторины, первая викторина использует внешний скрипт (as) И вторая викторина имеет тот же скрипт, что и первая викторина, но я поместил скрипт действия внутри fla. и у него был другой xml. , но затем это сообщение об ошибке появилось:# 2007: Формат параметра должен быть не нулевым?

TypeError: Error #2007: Parameter format must be non-null. 
at flash.text::TextField/set defaultTextFormat() 
at hiragana/createText()[E:\flash\!!!! FLASH JADI\PAK ASHAR FIX\hiragana.as:80] 
at hiragana/kuisdua()[hiragana::frame209:48] 
at hiragana/frame209()[hiragana::frame209:249] 

это код:

// creates a text field 
    public function createText(text:String, tf:TextFormat, s:Sprite, x,y:   Number, width:Number): TextField { 
     var tField:TextField = new TextField(); 
     tField.x = x; 
     tField.y = y; 
     tField.width = width; 
     tField.defaultTextFormat = tf; //looks like this is the source of problem (-.-) 
     tField.selectable = false; 
     tField.multiline = true; 
     tField.wordWrap = true; 
     if (tf.align == "left") { 
      tField.autoSize = TextFieldAutoSize.LEFT; 
     } else { 
      tField.autoSize = TextFieldAutoSize.CENTER; 
     } 
     tField.text = text; 
     s.addChild(tField); 
     return tField; 
    } 

и это код ettire

import flash.display.*; 
import flash.text.*; 
import flash.events.*; 
import flash.net.URLLoader; 
import flash.net.URLRequest; 

///*public class*/ kuisduaa extends MovieClip { 

    // question data 
    /*private*/ var dataXML2:XML; 

    // text formats 
    /*private*/ var questionFormat2:TextFormat; 
    /*private*/ var answerFormat2:TextFormat; 
    /*private*/ var scoreFormat2:TextFormat; 

    // text fields 
    /*private*/ var messageField2:TextField; 
    /*private*/ var questionField2:TextField; 
    /*private*/ var scoreField2:TextField; 

    // sprites and objects 
    /*private*/ var gameSprite2:Sprite; 
    /*private*/ var questionSprite2:Sprite; 
    /*private*/ var answerSprites2:Sprite; 
    /*private*/ var gameButton2:GameButton; 

    // game state variables 
    /*private*/ var questionNum2:int; 
    /*private*/ var correctAnswer2:String; 
    /*private*/ var numQuestionsAsked2:int; 
    /*private*/ var numCorrect2:int; 
    /*private*/ var answers2:Array; 

    /*public*/ function kuisdua() { 

     // create game sprite 
     gameSprite2 = new Sprite(); 
     addChild(gameSprite2); 

     // set text formats 
     questionFormat2 = new TextFormat("Arial",80,0xffffff,true,false,false,null,null,"center"); 
     answerFormat2 = new TextFormat("Arial",50,0xffffff,true,false,false,null,null,"left"); 
     scoreFormat2 = new TextFormat("Arial",30,0xffffff,true,false,false,null,null,"center"); 

     // create score field and starting message text 
     scoreField2 = createText("",scoreFormat,gameSprite,-30,550,550); 
     messageField2 = createText("Loading Questions...",questionFormat,gameSprite,0,50,550); 

     // set up game state and load questions 
     questionNum2 = 0; 
     numQuestionsAsked2 = 0; 
     numCorrect2 = 0; 
     showGameScore2(); 
     xmlImport2(); 
    } 

    // start loading of questions 
    /*public*/ function xmlImport2() { 
     var xmlURL:URLRequest = new URLRequest("kuis2.xml"); 
     var xmlLoader:URLLoader = new URLLoader(xmlURL); 
     xmlLoader.addEventListener(Event.COMPLETE, xmlLoaded); 
    } 

    // questions loaded 
    /*public*/ function xmlLoaded2(event:Event) { 
     dataXML = XML(event.target.data); 
     gameSprite.removeChild(messageField); 
     messageField = createText("Tap Untuk Memulai",scoreFormat,gameSprite,-10,250,500); 
     showGameButton("mulai"); 
    } 

    // creates a text field 
    /*public*/ function createText2(text:String, tf:TextFormat, s:Sprite, x,y: Number, width:Number): TextField { 
     var tField2:TextField = new TextField(); 
     tField2.x = x; 
     tField2.y = y; 
     tField2.width = width; 
     tField2.defaultTextFormat = tf; 
     tField2.selectable = false; 
     tField2.multiline = true; 
     tField2.wordWrap = true; 
     if (tf.align == "left") { 
      tField2.autoSize = TextFieldAutoSize.LEFT; 
     } else { 
      tField2.autoSize = TextFieldAutoSize.CENTER; 
     } 
     tField2.text = text; 
     s.addChild(tField2); 
     return tField2; 
    } 

    // updates the score 
    /*public*/ function showGameScore2() { 
     scoreField2.text = "Soal: "+numQuestionsAsked2+" Benar: "+numCorrect2; 
    } 

    // ask player if they are ready for next question 
    /*public*/ function showGameButton2(buttonLabel:String) { 
     gameButton = new GameButton(); 
     gameButton.label.text = buttonLabel; 
     gameButton.x = 240; 
     gameButton.y = 480; 
     gameSprite2.addChild(gameButton); 
     gameButton.addEventListener(MouseEvent.CLICK,pressedGameButton2); 
    } 

    // player is ready 
    /*public*/ function pressedGameButton2(event:MouseEvent) { 
     // clean up question 
     if (questionSprite2 != null) { 
      gameSprite2.removeChild(questionSprite2); 
     } 

     // remove button and message 
     gameSprite2.removeChild(gameButton); 
     gameSprite2.removeChild(messageField2); 

     // ask the next question 
     if (questionNum >= dataXML.child("*").length()) { 
      gotoAndStop(6); 
     } else { 
      askQuestion2(); 
     } 
    } 

    // set up the question 
    /*public*/ function askQuestion2() { 
     // prepare new question sprite 
     questionSprite2 = new Sprite(); 
     gameSprite2.addChild(questionSprite2); 

     // create text field for question 
     var question2:String = dataXML.item[questionNum].question2; 
     if (dataXML.item[questionNum][email protected] == "text") { 
      questionField2 = createText(question2,questionFormat2,questionSprite2,50,150,300); 
     } else { 
      var questionLoader2:Loader = new Loader(); 
      var questionRequest2:URLRequest = new URLRequest("triviaimages/"+question2); 
      questionLoader2.load(questionRequest2); 
      questionLoader2.y = 150; 
      questionLoader2.x = 180; 
      questionSprite2.addChild(questionLoader2); 
     } 

     // create sprite for answers, get correct answer and shuffle all 
     correctAnswer2 = dataXML.item[questionNum2].answers.answer[0]; 
     answers2 = shuffleAnswers(dataXML.item[questionNum2].answers); 

     // put each answer into a new sprite with a icon 
     answerSprites2 = new Sprite(); 
     var xpos:int = 0; 
     var ypos:int = 0; 
     for(var i:int=0;i<answers2.length;i++) { 
      var answerSprite2:Sprite = new Sprite(); 
      if (answers2[i].type == "text") { 
       var answerField2:TextField = createText(answers2[i].value,answerFormat2,answerSprite2,30,-35,200); 
      } else { 
       var answerLoader2:Loader = new Loader(); 
       var answerRequest2:URLRequest = new URLRequest("triviaimages/"+answers2[i].value); 
       answerLoader2.load(answerRequest2); 
       answerLoader2.y = -22; 
       answerLoader2.x = 25; 
       answerSprite2.addChild(answerLoader2); 
      } 
      var letter:String = String.fromCharCode(65+i); // A-D 
      var circle:Circle = new Circle(); // from Library 
      circle.letter.text = letter; 
      circle.answer = answers[i].value; 
      answerSprite2.x = 100+xpos*250; 
      answerSprite2.y = 350+ypos*100; 
      xpos++ 
      if (xpos > 1) { 
       xpos = 0; 
       ypos += 1; 
      } 
      answerSprite2.addChild(circle); 
      answerSprite2.addEventListener(MouseEvent.CLICK,clickAnswer); // make it a button 

      // set a larger click area 
      answerSprite2.graphics.beginFill(0x000000,0); 
      answerSprite2.graphics.drawRect(-50, 0, 200, 80); 

      answerSprites2.addChild(answerSprite2); 
     } 
     questionSprite2.addChild(answerSprites2); 
    } 

    // take all the answers and shuffle them into an array 
    /*public*/ function shuffleAnswers2(answers:XMLList) { 
     var shuffledAnswers2:Array = new Array(); 
     while (answers2.child("*").length() > 0) { 
      var r:int = Math.floor(Math.random()*answers.child("*").length()); 
      shuffledAnswers2.push({type: answers2.answer[r][email protected], value: answers2.answer[r]}); 
      delete answers2.answer[r]; 
     } 
     return shuffledAnswers2; 
    } 

    // player selects an answer 
    /*public*/ function clickAnswer2(event:MouseEvent) { 

     // get selected answer text, and compare 
     var selectedAnswer2 = event.currentTarget.getChildAt(1).answer; 
     if (selectedAnswer2 == correctAnswer2) { 
      numCorrect++; 
      messageField2 = createText("Hai, kamu benar ! ",scoreFormat2,gameSprite2,-30,280,550); 
     } else { 
      messageField2 = createText("Iie, Jawabanmu Salah, yang benar adalah:",scoreFormat2,gameSprite2,53,280,370); 
     } 

     finishQuestion(); 
    } 

    /*public*/ function finishQuestion2() { 
     // remove all but the correct answer 
     for(var i:int=0;i<4;i++) { 
      answerSprites2.getChildAt(i).removeEventListener(MouseEvent.CLICK,clickAnswer); 
      if (answers2[i].value != correctAnswer2) { 
       answerSprites2.getChildAt(i).visible = false; 
      } else { 
       answerSprites2.getChildAt(i).x = 200; 
       answerSprites2.getChildAt(i).y = 400; 
      } 
     } 

     // next question 
     questionNum2++; 
     numQuestionsAsked2++; 
     showGameScore2(); 
     showGameButton2("Lanjutkan"); 
    } 

    // clean up sprites 
    /*public*/ function CleanUp2() { 
     removeChild(gameSprite); 
     gameSprite2 = null; 
     questionSprite2 = null; 
     answerSprites2 = null; 
     dataXML2 = null; 
    } 

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

Я новичок в as3, поэтому мне все еще недостает во многих отношениях, может кто-нибудь мне помочь? я действительно apreciate это .. :)

ответ

0

Если меня не хватает чего-то, ваш вопрос здесь:

messageField2 = createText("Loading Questions...",questionFormat,gameSprite,0,50,550); 

&

messageField = createText("Tap Untuk Memulai",scoreFormat,gameSprite,-10,250,500); 

Я вижу questionFormat2 и scoreFormat2 инстанцируются, но я никогда не вижу questionFormat или scoreFormat. Ваша ошибка говорит о том, что (или TextFormat, поставляемый с использованием setTextFormat(), для справок в будущем) не может быть нулевым. Null означает, что объект еще не был создан/создан. questionFormat и scoreFormat никогда не создаются. Черт, их переменные даже не существуют. Если вы используете правильную разработку IDE (FlashBuilder, FlashDevelop и т. Д.), Вы никогда не сможете скомпилировать этот код.

Переключите эти две строки, чтобы использовать правильные форматы, и все должно быть хорошо.

+0

Я понял, что: D я набрал его неправильно, но есть еще одна ошибка: Ошибка # 1009: не удается получить доступ к свойству или методу ссылки на нулевой объект. \t at hiragana/xmlLoaded() [E: \ flash \ !!!! FLASH JADI \ PAK Ашар FIX \ hiragana.as: 69] \t на flash.events::EventDispatcher/dispatchEventFunction() \t в flash.events::EventDispatcher/dispatchEvent() \t в flash.net :: URLLoader/onComplete() – ichirui21

+0

Используйте IDE. Найдите строку 69. У вас есть anothe r null контрольная ошибка есть. Основы ООП: вы не можете использовать объект перед его созданием. –

1

Вы уверены, что вы разбираете непустой TextFormat экземпляр в качестве второго аргумента createText()?

Ошибка означает, что вы поставляете значение null для tf:TextFormat.

+0

Я не понимаю, извините ..: '(я отправляю весь свой код выше, что мне делать тогда? Спасибо за ваш ответ .. – ichirui21

+1

Должен выглядеть что-то вроде 'if (tf) {\\ установить формат текста по умолчанию } ' –

Смежные вопросы