• 締切済み

AS3.0 カスタムクラスのMCをMainで呼び出

AS3.0 カスタムクラスのMCをMain.asで呼び出ししたいのですが、上手く機能しません。 どうして動かないのか具体的に教えてもらえると助かります。 エラー・コード:Main.as, Line 20 1180: Call to a possibly undefined method createBox. 【Main.as】 package{ import flash.display.*; import flash.events.Event; import flash.events.TimerEvent; import flash.utils.Timer; import boxClass; public class Main extends Sprite{ //property private var item:boxClass; //constractor public function Main(){ box(); } //method public function box():void{ item=new boxClass(); item.createBox(this); } } } 【boxClass.as】 package{ import flash.display.*; import flash.events.Event; public class boxClass extends MovieClip{//boxクラス //property private var thisClass:Object; //constractor public function boxClass():void{} //method public function createBox(tm:MovieClip):void{ thisClass = this; trace("テスト"); var mc:boxMC=new boxMC(); thisClass.addChild(mc); } } }

みんなの回答

  • BlurFiltan
  • ベストアンサー率91% (1611/1754)
回答No.1

「boxClass.as」と「Main.as」があるフォルダと同じフォルダに 新規 ActionScript 3.0 ドキュメント「名称未設定-1.fla」を保存し その FLA のドキュメントのクラスに「Main」を設定した上で 無条件にムービープレビューやパブリッシュをしてみましたが 書かれていらっしゃるのと同じエラーは出ませんでしたよ。 つまり状況が再現できません。 私の方で 上に書いた条件でムービープレビューなどをしたときに出るエラーは 「1067:型 Main の値が、関連しない型 flash.display:MovieClip に暗黙で型変換されています。」 です(Flash CS4 Professional 日本語版)。 状況が再現できない(=状況が把握できない)ので それに対する対処方を書くことはできません。 それに対する対処方を書くことはできないので 最初に書いた私が作成したものに対する対処法例を書きます。 まず, ドキュメント「名称未設定-1.fla」のライブラリ内に 「boxMC」というクラス名を付けたムービークリップシンボルを作成します。 そして, 書かれていらっしゃる2つのクラスファイルを次のように変更します。 (変更箇所は★を付けた2行のみ。) //===「boxClass.as」======================== package { import flash.display.*; import flash.events.Event; import flash.events.TimerEvent; import flash.utils.Timer; import boxClass; //★↓継承を Sprite から MovieClip に変更 public class Main extends MovieClip { //property private var item:boxClass; //constractor public function Main() { box(); } //method public function box():void { item = new boxClass(); item.createBox(this); } } } //========================================== //===「boxClass.as」======================== package { import flash.display.*; import flash.events.Event; public class boxClass extends MovieClip {//boxクラス //property private var thisClass:Object; //constractor public function boxClass():void { } //method public function createBox(tm:MovieClip):void { //↓★ this ではなく tm では??? thisClass = tm; trace("テスト"); var mc:boxMC = new boxMC(); thisClass.addChild(mc); } } } //========================================== こうすればエラーも出ませんし 「boxMC」というクラス名を付けたムービークリップも SWFムービーのメインタイムラインのステージ上に addChild されます。 もっとも, 「boxMC」とは何のことか実際にはわかりません。 どこにも定義されていませんし,何の説明もないのでわかるはずがありません。 上記の対処方法例では 簡易的に実験できるように 私が勝手に「名称未設定-1.fla」内に定義(用意)したMovieClipクラスを継承する「boxMC」クラスを用意してみました。

関連するQ&A