• 締切済み

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); } } }

  • Flash
  • 回答数1
  • ありがとう数0

みんなの回答

  • 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

  • AS3の拡大と縮小について

    下記の外部ASで試しているのですが比率を維持して拡大されます。 予想では横は100%で縦に300%伸びて表示されるはずなのですがなぜ比率が 維持されるのでしょうか? また、縦だけとこ横だけ拡大や縮小するにはどう書けばいいのでしょうか? package { import flash.display.*; import flash.events.*; import flash.text.*; public class Main extends MovieClip { private var mc:MovieClip; private var text:TextField; public function Main():void { mc = new MovieClip(); addChild(mc); text = new TextField(); text.text = "テスト"; text.scaleX = 1; text.scaleY = 3; mc.addChild(text); } } }

    • ベストアンサー
    • Flash
  • 外部ASを二つ組み合わせる方法

    flash初心者です。二つのASファイルを組み合わせて作ろうとしているのですが、 外部ASをドキュメントクラスを使用して読み込み複数ある場合、調べた結果importを利用してクラスを定義出来るとの事ですが、定義が重複していますと出てしまいます。 パッケージを二個書こうとしても外部から表示可能な複数の定義は使用出来ませんと出てしまいます。二つのスクリプトを一つに纏めた方がいいのでしょうか? どなたかご教授下さい。 ASは同じディレクトリ上に配置しています。 package { import flash.display.Sprite; import flash.display.MovieClip; import flash.events.MouseEvent; import flash.events.Event; public class CardMenu extends Sprite { private var cardList:Array = ["card01", "card02", "card03", "card04", "card05"]; private var _currentCard:MovieClip; public function CardMenu() { for ( var i:int = 0; i < cardList.length; i++ ) { var mc:MovieClip = this[cardList[i]]; mc.X = mc.x0 = mc.x; mc.Y = mc.y0 = mc.y; mc.R = mc.rot = mc.rotation; mc.S = mc.sca = mc.scaleX; mc.dep = getChildIndex(mc); mc.btn.addEventListener(MouseEvent.CLICK, openHandler); mc.addEventListener(Event.ENTER_FRAME, enterFrameHandler); } } private function openHandler( e:MouseEvent ):void { if (Boolean(_currentCard)) { _currentCard.X = _currentCard.x0; _currentCard.Y = _currentCard.y0; _currentCard.R = _currentCard.rot; _currentCard.S = _currentCard.sca; setChildIndex(_currentCard, _currentCard.dep); _currentCard.btn.visible = true; } _currentCard = e.target.parent as MovieClip; _currentCard.X = stage.stageWidth / 2; _currentCard.Y = stage.stageHeight / 2; _currentCard.R = 0; _currentCard.S = 1; setChildIndex(_currentCard, numChildren - 1); _currentCard.btn.visible = false; } private function enterFrameHandler( e:Event ):void { var card:MovieClip = e.target as MovieClip; card.x += ( card.X - card.x ) * 0.2; card.y += ( card.Y - card.y ) * 0.2; card.rotation += ( card.R - card.rotation ) * 0.2; card.scaleX += ( card.S - card.scaleX ) * 0.2; card.scaleY = card.scaleX; } } } package { import flash.display.Sprite; import box; public class box extends Sprite { public function Main() { var box:box = new box(); } } }

  • ActionSccript3.0 クラスについて

    Flash 初心者です。 現在AS3を勉強して半年くらいになります。一通り仕組みは理解できたのですが、2つのクラスを合わせて使うときに詰まってしまいました。内容は、 フルフラッシュで背景画像はリサイズ可能でメニュー・フッター等のサイズが固定のクラス 『BgSet.as』 package { import flash.events.Event; import flash.display.*; import flash.text.TextField; import flash.display.StageAlign; import caurina.transitions.Tweener; public class BgSet extends MovieClip { private var parH:Number; private var parW:Number; public function BgSet() { init(); } private function init():void{ stage.scaleMode = StageScaleMode.NO_SCALE; stage.align = StageAlign.BOTTOM_RIGHT; var bw:Number = back_mc.width; var bh:Number = back_mc.height; function arrangeMC():void{ var sw:int = stage.stageWidth; var sh:int = stage.stageHeight; menu_mc.x = sw; main_mc.x = sw/2; main_mc.y = sh/2; footer_mc.y = sh; logo_mc.x = sw; logo_mc.y = sh; back_mc.width = sw; back_mc.height = bh/bw*sw; } arrangeMC(); function stageOnResize(evt:Event):void { arrangeMC(); } } } } と、 背景画像にビットマップでドットを敷き詰めるクラス 『BgBtm.as』 package { import flash.display.BitmapData; import flash.display.Sprite; public class BgBtm extends Sprite { public function BgBtm() { var bmd:BitmapData = new BitmapData(3, 3, true, 0x00ffffff); bmd.setPixel32(0, 0, 0xffffffff); bmd.setPixel32(1, 1, 0xffffffff); var sp:Sprite = new Sprite(); sp.graphics.beginBitmapFill(bmd, null, true, false); sp.graphics.drawRect(0, 0, 1200, 1200); sp.graphics.endFill(); addChild(sp) } } } この二つのクラスを一つずつ実行することは問題なく出来るのですが、二つの.asファイルを『Main.as』から呼び出して実行しようと思いフォルダ『MyProgram』に入れました。 それぞれ package MyProgram{ として、 Main.asは package { import flash.display.MovieClip; import MyProgram.*; としたまでは良かったのですがこの先でつまづいています。。 ここまでで出てきた問題は、 1、BgSetのback_mc・menu_mcへアクセス出来ない。 2、BgBtmのビットマップが表示されない 3、仮にBgSetをflaファイルのドキュメントクラスに定義してBgSet.as内からBgBtmをnewして実行した場合でもビットマップが表示されない。 ということが起きています。 Main.asファイルをいろいろと書き換えて試しているのですが答えが出ません。 どなたかご教授お願い致します。

    • ベストアンサー
    • Flash
  • ASだけで○秒停止する方法

    AS3で下記のスクリプトを書いています。 画像をぼかした状態で徐々に表示させ、ぼかしがなくなったら○秒見せて ぼかしながら消していくという内容を想定しています。 ひとまず動くのですが、ぼかしながら消していく関数を実行する前に任意の 秒数(フレーム数?)停止させたいのですが、どうすればいいのでしょうか? package { import flash.display.*; import flash.events.*; import flash.utils.* import fl.events.*; import flash.filters.*; public class Main extends MovieClip { public var logoObj1:MovieClip = new logo1(); public var blur:BlurFilter; public var i:uint = 70; public var ii:uint = 0; public function Main():void { opening(); } private function opening(e:Event = null):void { blur = new BlurFilter(); addEventListener(Event.ENTER_FRAME, BlurMinus); } private function BlurMinus(e:Event):void { blur.blurX = i; blur.blurY = i; logoObj1.filters = [blur]; logoObj1.x = w / 2; logoObj1.y = h / 2; addChild(logoObj1); if ( i == 0 ) { // ここで任意の秒数を経過したらBlurPlasを実行させたい! addEventListener(Event.ENTER_FRAME, BlurPlas); } i = i - 2; } private function BlurPlas(e:Event):void { blur.blurX = ii; blur.blurY = ii; logoObj1.filters = [blur]; logoObj1.alpha += (0 - logoObj1.alpha) / 50; if ( logoObj1.alpha == 0 ) { removeEventListener(Event.ENTER_FRAME, BlurMinus); removeEventListener(Event.ENTER_FRAME, BlurPlas); } ii = ii + 2; } } }

    • ベストアンサー
    • Flash
  • AS3.0 自作ファイルのインポートしてnewができない

    AS3.0 自作ファイルのインポートと、newの仕方 flashCS3でWIndowsXP使用 下は、classA.asファイル package{ import flash.events.MouseEvent; import flash.events.Event; import flash.display.MovieClip; public class Bom{ var stage:MovieClip; public function Bom(stage:MovieClip){ this.stage = stage; } } } これを、あるフラッシュプロジェクトのタイムラインで使用したい。 import classA.as var bom = new Bom(stage); こうすると見て意義である可能性が高いBom()の呼び出しです。 とエラーが出ます。 解決方法を教えてください。 インポートはたぶん成功しています。

  • 外部から読み込んだ画像にリンクをつけたい

    ActionScript3.0についての質問です。 ボタンをクリックした時に外部から画像を読み込んで、 読み込んだ画像にそれぞれに外部リンクをつけたいのですが、 リンクのつけ方が分かりません。 ボタンをクリックして外部から画像を読み込むところまではできたのですが、 その画像にリンクをつけるところで困っています。 超初心者ですので、できるだけ現状のプログラムを生かして変更したいのですが… どなたか分かる方がいらっしゃいましたら、教えていただきたいです。 よろしくお願いいたします。 【Main.as】 package { import flash.display.Sprite; import flash.display.MovieClip; import flash.events.Event; import flash.events.MouseEvent; import flash.display.Loader; import flash.display.LoaderInfo; import flash.net.URLRequest; import flash.display.SimpleButton; public class Main extends Sprite { private var contentMC:MovieClip; private var contentLoader:Loader; //コンストラクタ public function Main(){ //外部ファイルを配置するムービークリップの生成 contentMC = new MovieClip(); contentMC.x=0; contentMC.y=0; addChild(contentMC); //Loaderオブジェクトを生成 contentLoader = new Loader(); contentMC.addChild(contentLoader); //ボタン処理 my1_btn.addEventListener(MouseEvent.CLICK,my1Handler); my2_btn.addEventListener(MouseEvent.CLICK,my2Handler); my3_btn.addEventListener(MouseEvent.CLICK,my3Handler); } //各ボタンをクリックしたときに外部ファイルを読み込む private function my1Handler(evt:MouseEvent):void{ var url="img/flashimg01.jpg"; loadContent(url); } private function my2Handler(evt:MouseEvent):void{ var url="img/flashimg02.jpg"; loadContent(url); } private function my3Handler(evt:MouseEvent):void{ var url="img/flashimg03.jpg"; loadContent(url); } //外部ファイル読込 private function loadContent(url){ var req:URLRequest = new URLRequest(url); contentLoader.load(req); } } }

    • ベストアンサー
    • Flash
  • as3 ムービークリップにビットマップデータを挿入するクラスがうまくい

    as3 ムービークリップにビットマップデータを挿入するクラスがうまくいかない 上記のとおりなんですが、 前提として ■ライブラリにjpgを一枚読み込んで、Photoというクラス名でリンケージしてあります。 ■ステージにmcというムービークリップを配置しています。 mcにビットマップ化したjpgをaddchildしたかったので、 メインフレームに下記を書きました。 -------------------------------------------------------- var name_str:String = "Photo"; var myClass:Class = Class(getDefinitionByName(name_str)); var bmd:BitmapData = new myClass(0, 0); var bm:Bitmap = new Bitmap(bmd); bm.pixelSnapping = PixelSnapping.ALWAYS; bm.smoothing = true; mc.addChild(bm); -------------------------------------------------------- ※今後動的に生成するのでクラス名は変数にしています。 これは問題なく行きました。 上記を外部クラス化したかったので、 下記のようにしました。 ■PhotoClass ---------------------------------------------------------------------- package { import flash.display.MovieClip; import flash.events.Event; import flash.display.Bitmap; import flash.display.BitmapData; import flash.utils.getDefinitionByName; import flash.display.PixelSnapping; public class PhotoClass extends Bitmap { private var myClass:Class;//クラス名 private var bmd:BitmapData; private var bm:Bitmap; //コンストラクタ public function PhotoClass(_name:String) { myClass = Class(getDefinitionByName(_name)); bmd = new myClass(0, 0); bm = new Bitmap(bmd); bm.pixelSnapping = PixelSnapping.ALWAYS; bm.smoothing = true; init(); } public function init():Bitmap { return bm; } } } ---------------------------------------------------------------------- ■メインフレーム var photoAdd:Bitmap = new PhotoClass("Photo"); mc.addChild(photoAdd); これがうまくいきません。 エラーはないのですが、ちゃんとmcに画像が読み込まれません。。。。 ご教授いただければと思います!

    • ベストアンサー
    • Flash
  • as3でのmc再生について

    as3でご質問です。 現在as3で、ほとんどをmain.asというasファイルに書いて配置など行っております。 モーションなどがあるmcに関しては、ムビークリップを作って、ライブラリに読み込んであるのをリンケージして呼び出しています。 そこで質問です。 var bn01:MovieClip = new fr_bn01(); var bn02:MovieClip = new fr_bn02(); var bn03:MovieClip = new fr_bn03(); addChild(bn01); addChild(bn02); addChild(bn03); //fr_bn01、fr_bn02はflash上で作成した何フレームかあるmcです。 例えば、bn01の最後のフレームまでいったら、bn02が出現して再生、bn02が最後のフレームまでいったらbn03が出現、再生。 とする場合、どのような書き方をすればよろしいでしょうか。 お手数をおかけしますが、ご教授いただけたらと思います。 よろしくお願いします。 環境:CS3、as3.0

    • ベストアンサー
    • Flash
  • as3.0 外部swfの読み込み

    はじめまして。 as3.0初心者です。 現在xmlを使用したメニューを使って,メニューのある同じページに外部swfを読み込ませたいと思っております。 どうしても,違うページが新たに開いてしまったり、外部swfだけのページになってしまいます。 どなたか,ご教授のほどよろしくお願い致します。 package{ import flash.display.MovieClip; import nablavector.treemenu.*; import flash.net.navigateToURL; import flash.net.URLRequest; public class Main extends MovieClip{ public function Main(){ var test:TreeMenu=new TreeMenu(); test.x=10; test.y=15; addChild(test); addEventListener(TreeMenuEvent.NODE_SELECTED,handle); } //just a demo callback public function handle(e:TreeMenuEvent):void{ navigateToURL(new URLRequest(e.id)); trace("You've clicked the node "+e.id); } } }

  • AS3.0でムービークリップ制御

    現在、AS3.0でswfファイルを読み込み、その再生・停止をコントロールするswfを作ろうとしています。 そこで自分なりにプログラム書いてみたのですが、停止ができなくて困っています。 以下ソース package { import flash.display.*; import flash.events.*; import flash.net.URLRequest; public class Test extends Sprite { private var mc:MovieClip = new MovieClip(); private var btn_load:SimpleButton = new SimpleButton(); //loadボタン private var btn_stop:SimpleButton = new SimpleButton(); //stopボタン private var l:Loader = new Loader(); public function Test() { mc.x = 30; mc.y = 30; btn_load.upState = this.drawCircle( 0x228822, 20 ); btn_load.overState = this.drawCircle( 0x225522, 21 ); btn_load.downState = this.drawCircle( 0x553355, 20 ); btn_load.hitTestState = btn_load.upState; btn_load.addEventListener( MouseEvent.CLICK, Load ); btn_stop.upState = this.drawCircle( 0x228822, 20 ); btn_stop.overState = this.drawCircle( 0x225522, 21 ); btn_stop.downState = this.drawCircle( 0x553355, 20 ); btn_stop.hitTestState = btn_stop.upState; btn_stop.x = 50; btn_stop.addEventListener(MouseEvent.CLICK, Stop); addChild(mc); addChild(btn_load); addChild(btn_stop); mc.addChild(l); } private function drawCircle( color:uint, r:Number ):Shape { var circle:Shape = new Shape(); circle.graphics.lineStyle( 1, 0x222222 ); circle.graphics.beginFill( color ); circle.graphics.drawCircle( 0, 0, r ); circle.graphics.endFill(); return circle; } private function Load(e:Event):void{ l.load(new URLRequest("animation.swf")); } private function Stop(e:Event):void{ mc.stop(); } } } なにが原因なのでしょうか・・・ わかる方ご回答お願いします。。

    • ベストアンサー
    • Flash

専門家に質問してみよう