2011-12-10 11 views
2

何が起こっているのか分かりませんか?私はタイムラインに他のクラスをインポートし、それらをうまく使うことができますが、このクラスは私に大きな問題を与えていますか?私は自分のサーバーからXMLデータを解析しており、このようなエラーが出ています。As3タイムラインからクラスを参照する

タイムラインの参照と使用方法:

 import networkScores; 

    var network:networkScores = new networkScores(); 
    addChild(network); 

    score1Textfield.text = network.score1.toString(); 

クラス定義:私は取得しています

package 
{ 
      import flash.net.URLLoader; 
      import flash.net.URLRequest; 
      import flash.events.Event; 
      import flash.display.MovieClip; 

     public class networkScores extends MovieClip 
     { 
       public var myXML:XML, myXMLNames:XML; 
       public var xmlLoaderScores = new URLLoader(); 
       public var score1:int; 

       public function networkScores() 
       { 
        xmlLoaderScores.addEventListener(
           Event.COMPLETE, xmlLoadedScores); 
        xmlLoaderScores.load(new URLRequest("pathtoxmlfile")); 
       } 

       public function xmlLoadedScores(e:Event):void 
       { 
         myXML = new XML(e.target.data); 
         var qName1:QName = new QName(
          "http://www.w3.org/2005/Atom", "score1"); 
         score1 = myXML.descendants(qName1)[0].toString(); 
       } 

     } 

    } 

エラー:

シーン1、レイヤー[アクション]、フレーム4 、Line 149 1119:静的型networkScoresを持つ参照を介した、おそらく未定義のプロパティscore1へのアクセス。

1067:networkScores型の値を、関連のない型flash.display:DisplayObjectに暗黙的に強制します。

これはキャストの問題ですか?

どうすればこの問題を解決できますか?

+0

を、あなたはどのエラーが発生しましたラインを私に言うことができますか? – apscience

+0

申し訳ありません、はい、addChild(ネットワーク)。行は1067エラーを受信し、network.score1.toString(); 1119エラーが発生しました。 – AgnosticDev

+0

あなたのコードはうまく見える、私はフラッシュがクラスnetworkScoresの定義を見つけることができないと思う。 networkScores.asファイルはどこですか? – Louis

答えて

1

あなたのタイムラインは、ドキュメントクラスを参照しようとするべきではありません。ドキュメントクラスはすべてを制御する必要があります。オブジェクトがステージに追加され、対処する準備ができていることを知るには、いくつかの方法があります(ステージに追加することなど)。オブジェクトが追加され、でもが返されたことがわかったら、ドキュメントクラスで公開した子オブジェクトの変数を設定できます。詳細については、このブログ記事http://www.developria.com/2010/04/combining-the-timeline-with-oo.htmlと、付随するコードhttp://flexdiary.blogspot.com/2010/04/sample-code-for-oop-timeline-insideria.htmlを参照してください。

コード表示EDITED:

に、それはこのようなものに見えるかもしれませんためのコード:

package { 
    public class Main extends MovieClip { 
     private var _stageInstance:StageInstance; 
     private var _score:String; 
     private var _loader:URLLoader;//hold loader in memory so it doesn't gc before it returns 
     //by using a getter/setter pair, we know when Flash has added the instance to the stage 
     public function get stageInstance():StageInstance{ 
      return _stageInstance; 
     } 
     public function set stageInstance(value:StageInstance):void { 
     _stageInstance = value; 
     if (_stageInstance != null && _score != null) { 
      _stageInstance.score = _score; 
     } 
     } 
     public function onScoreLoaded(e:Event):void { 
     myXML = new XML(e.target.data); 
     var qName1:QName = new QName("http://www.w3.org/2005/Atom", "score1"); 
     _score = myXML.descendants(qName1)[0].toString(); 
     if (stageInstance != null) { 
      stageInstance.score = _score; 
     } 
     } 
     public function Main() { 
     _loader = new URLLoader(); 
     _loader.addEventListener(Event.COMPLETE, onScoreLoaded); 
     _loader.load(new URLRequest('pathToXML')); 
     } 
    } 

} 

package { 
    public Class StageInstance extends MovieClip { 
     pubic var score1TextField:TextField;//populated by Flash Player 
     private vare _score:String; 
     //note how the setter here is doing something useful, not just passing through the value 
     public function get score():String { 
      return _score; 
     } 
     public function set score(value:String):void { 
      _score=value; 
      score1TextField.text=score; 
     } 
     public function StageInstance() { 
      super(); 
     } 

    } 

} 
+0

右ですが、メイン文書クラスは、データクラスとタイムラインクラスの間の関係を編成する必要があります。タイムラインオブジェクトはこれを処理しようとすべきではありません。 –

+0

はい。ベストプラクティスを気にするタイプと、何らかの方法で動作させることを気にするタイプの2種類の開発者があります。 StackOverflowのようなフォーラムに尋ねるなら、少なくともベストプラクティスが何であるか知りたいと思っています。 –

+0

こんにちは、皆様のご意見をお寄せいただきありがとうございます。 AsTheWormTurns氏のように、私はタイムラインから単にライブラリからリンケージクラス識別子としてnetworkScores.asファイルを参照しようとしていません。私はクラスがこのように以前に参照されているのを見ました。そして、私はクラスがAmyが話す方法を参照しているのを見ました。私はどちらが正しいのか分からず、両方の方法を使用できると仮定しました。 Thanks Scientific – AgnosticDev

関連する問題