ActionScript3.0でエラーがでる

このQ&Aのポイント
  • ActionScript3.0を使ってフルフラッシュサイトを作っていますが、タイムラインの1フレーム目でエラーが発生しています。
  • エラーメッセージは「Error #1009: null のオブジェクト参照のプロパティまたはメソッドにアクセスすることはできません。」です。
  • Main.asファイルが2フレーム目のインスタンスを参照しているため、ドキュメントクラスを2フレーム目に読み込ませる方法を知りたいです。
回答を見る
  • ベストアンサー

ActionScript3.0でエラーがでる

初めまして、今非常に困っていましてどなたかお力を貸してください。 ActionScript3.0を使ってフルフラッシュサイトを作っているところなのですが、タイムラインの1フレーム目でローダーでrootを読み込み、終わったら2フレーム目(gotoAndStop(2)で)へ移動という形にしているのですが、ムービープレビューすると「Error #1009: null のオブジェクト参照のプロパティまたはメソッドにアクセスすることはできません。at Main()」 と出てしまいます。Mainはドキュメントクラスで外部asファイルに記述しています。 こんな感じで書いています↓ 『1フレーム目のタイムラインスクリプト』 stop(); ~中略~ if(info.bytesLoaded==info.bytesTotal){ if(load_mc.nowScene=="finish"){ Object(root).gotoAndStop(2); } } 『外部Main.asファイル』 package{ ~中略~ public class Main extends MovieClip{ ~中略~ public function Main() { addEventListener(Event.ENTER_FRAME, checkHandler); } function checkHandler(ev:Event):void { if (Object(root).currentFrame==1) {//フレームが1なのかを判別 return; } removeEventListener(Event.ENTER_FRAME, checkHandler); init(); } function init(){ ~中略~ } } } すみません、ホントはもっとあるのですがスクリプトが長過ぎて書ききれないのでざっくりですが、こんな感じです。 checkHandler()は、エラーが出ないように2フレーム目に来たらMain.asを参照できるようにしています。ほかになにかやり方があれば教えてほしいです。。。←なんとなくこれが怪しい気もするので。 一応こんな感じでも順調に作業出来ていたのですが、なぜか急にエラーが出始めました。 ムービープレビューすると先ほど書いたエラーメッセージがでて、画面がチカチカなり、1フレーム目と2フレーム目を繰り返しているような現象です。 いまMain.asファイルは2フレーム目にあるインスタンスを参照しているので、ドキュメントクラスを2フレーム目にきたら読み込ませる方法とかあるのでしょうか? すみませんホントに誰かご教授お願いします!!!

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

質問者が選んだベストアンサー

  • ベストアンサー
  • amane123
  • ベストアンサー率60% (6/10)
回答No.1

たぶん、Main.asで1フレーム目にないオブジェクトを扱っているためです。 1フレーム目で見せたくないものはalpha=0やvisible=falseで見えないようにしておいて、 配置自体は1フレーム目からにしてみてください。 タイムラインとスクリプトを合わせて使用する際はいろいろ癖があるので気をつけた方がいいですよ。

関連するQ&A

  • as3 衝突判定のエラーについて

    現在、衝突判定について簡単な実験を行っています。 以下の記述において、インスタン1(player)がインスタント2(enter1)に当たった時に フレームが移動して別の場面になるようにしようと思いました。 実験の結果は、ちゃんとフレームの移動を確認できましたが、 衝突判定が行われた時点で、以下のメッセージが大量発生しました。 TypeError: Error #1009: null のオブジェクト参照のプロパティまたはメソッドにアクセスすることはできません。 at _fla::MainTimeline/go() これは何を意味しているのでしょうか? よろしくお願い致します。 // stop(); player2.addEventListener(Event.ENTER_FRAME,go) function go(event:Event):void { player2.x +=5; if(player2.hitTestObject(enter1)) { this.gotoAndStop("inhouse");   trace("ok") } }

    • ベストアンサー
    • Flash
  • すべてのMCを1フレーム目へ

    ステージ上にMCのインスタンスが100個あるとします。 ボタンのクリックで全部のMCを1フレーム目へ移動させたいと思っています。 _root.EVENT_btn.onRelease = function() { _root.A_mc.gotoAndStop(1); _root.B_mc.gotoAndStop(1); _root.C_mc.gotoAndStop(1); _root.D_mc.gotoAndStop(1); : : } とひとつずつ書くしかないのでしょうか? ほかに効率のよい書き方はありますか? (注)すべてのインスタンスの親は同一オブジェクトではありません。

    • ベストアンサー
    • Flash
  • flashcs4 as3.0のエラーについて

    フレーム1にボタンを配置して ボタン(myb)を押すと、ボタンが消えると同時にマウスがmc表示に変わり mcをドラッグしてmc1に当たると、フレーム2の画面が表示するようにしたいのですが ムービープレビューして試してみると、フレーム2の画面(TツールでCLEARを書いているだけ)は表示するのですが、次のエラーが表示されてしまいます。 「TypeError: Error #1009: null のオブジェクト参照のプロパティまたはメソッドにアクセスすることはできません。」 どのように回避したらよいのでしょうか。よろしくお願いいたします。 stop(); mc.visible=false; myb.stage.addEventListener(MouseEvent.CLICK, mystart); function mystart(event){ myb.visible=false; Mouse.hide(); mc.visible=true; mymouse(event); } mc.stage.addEventListener(MouseEvent.MOUSE_MOVE,mymouse); function mymouse(event):void{ mc.x = stage.mouseX; mc.y = stage.mouseY; event.updateAfterEvent(); } mc.stage.addEventListener(Event.ENTER_FRAME,mymc); function mymc(e:Event):void{    if(mc1.hitTestObject(mc)){ gotoAndStop(2); } }

    • ベストアンサー
    • Flash
  • actionscript 3.0 勉強中のもです。

    よろしくお願いします。 ある右へ動いていく四角をクリックするとそれ自体のvisibleプロパティに変化(消える)を起こす事を意図して以下のような、プログラムを作りました。しかしながら、横移動の動作を確認しましたが、クリックをしても横移動を続けるだけでした。_mc.addEventListener(Event.ENTER_FRAME,onGo)を抜かした状態で見てみると、しっかり消えることを確認しました。しかし_mc.addEventListener(Event.ENTER_FRAME,onGo) を加えると上記のようになります。2つのイベントリスナーをつなげて書く事は間違った事ではないと思っています。どのように考えて書き直したらしたらよろしいのでしょうか?お心当たりございましたらどうぞよろしくお願いします。 package { import flash.display.Sprite; import flash.events.Event; import flash.events.MouseEvent; public class Main extends Sprite { var _mc:Sprite = new Sprite; function Main() { _mc.graphics.beginFill(0x334455); _mc.graphics.drawRect(0,0,120,120); _mc.graphics.endFill(); _mc.x= 130; _mc.y= 220; addChild(_mc); _mc.addEventListener(MouseEvent.CLICK,onClick2); _mc.addEventListener(Event.ENTER_FRAME,onGo); } function onClick2(event:MouseEvent):void { trace(event.target.name + "をクリックしました。"); _mc.visible= !(_mc.visible); } function onGo(event:Event):void { if(_mc.visible=true) { _mc.x += 1 } } } }

    • ベストアンサー
    • HTML
  • ActionScript3.0 初心者です

    ActionScript3.0 初心者です。 ムービークリップballに対して、以下のようなスクリプトを書いて、 ロールオーバーすると徐々に大きく、 アウトすると徐々に小さくなるようにしています。 しかし、初めはうまくいくのですが、 オーバー、アウトの回数を重ねるごとに、 縮尺の間隔が短くなってしまいます。 常に同じ間隔で縮尺させるにはどうすればいいのでしょうか? よろしくお願いします。 ball.addEventListener (MouseEvent.MOUSE_OVER, r_over); ball.addEventListener (MouseEvent.MOUSE_OUT, r_out); var c:int; var nDeceleration:Number = 0.1; function r_over(event:MouseEvent):void { c = 400; ball.addEventListener(Event.ENTER_FRAME, ballsize); function ballsize(event:Event):void { if(ball.width==c){ ball.removeEventListener(Event.ENTER_FRAME,ballsize); } else{ ball.width +=(c - ball.width) *nDeceleration; ball.height +=(c - ball.height) *nDeceleration; } } } function r_out(event:MouseEvent):void { c = 150; ball.addEventListener(Event.ENTER_FRAME, ballsize); function ballsize(event:Event):void { if(ball.width==c){ ball.removeEventListener(Event.ENTER_FRAME,ballsize); } else{ ball.width +=(c - ball.width) *nDeceleration; ball.height +=(c - ball.height) *nDeceleration; } } }

  • ActionScript3.0の質問です

    このようなプログラムも考えました。 デバッグではエラーは出ませんでしたが、論理的、プログラム的に問題はありますでしょうか? function fl_GenerateRandomNumber(limit:Number):Number { var randomNumber:Number = Math.floor(Math.random()*(limit+1)); return randomNumber; } var xxx:Number=fl_GenerateRandomNumber(3); Button_1.addEventListener(MouseEvent.CLICK, fl_ClickToGoToAndStopAtFrameButton); function fl_ClickToGoToAndStopAtFrameButton(event:MouseEvent):void { if(xxx==0) {this.gotoAndStop(3);} else {this.gotoAndStop(7);} } function fl_GenerateRandomNumber2(limit:Number):Number { var randomNumber:Number = Math.floor(Math.random()*(limit+1)); return randomNumber; } var xxx2:Number=fl_GenerateRandomNumber2(3); Button_2.addEventListener(MouseEvent.CLICK, fl_ClickToGoToAndStopAtFrame2Button); function fl_ClickToGoToAndStopAtFrame2Button(event:MouseEvent):void { if(xxx2==1) {this.gotoAndStop(4);} else {this.gotoAndStop(7);} }

    • ベストアンサー
    • Flash
  • ActionScript コンパイルエラー

    こんにちは。 ActionScript3.0のサンプルデータを起動しようとしたら以下のようなエラーが出ました。 ArgumentError: Error #1063: TestRecRed5() の引数の数が一致していません。1 が必要ですが、0 が指定されました。 実際のプログラムの重要部分は以下となります。 public function TestRecRed5(display:DisplayObjectContainer):void { this._display = display; this._init(); } private function _init():void { var btn:SimpleButton = this._display.getChildByName('rec_btn') as SimpleButton; btn.addEventListener(MouseEvent.CLICK, _btnEventHandler); this._nc = new NetConnection(); this._nc.objectEncoding = ObjectEncoding.AMF0; this._nc.addEventListener(NetStatusEvent.NET_STATUS, _netStatusEventHandler); this._nc.addEventListener(AsyncErrorEvent.ASYNC_ERROR, _asyncErrorEventHandler); this._nc.addEventListener(SecurityErrorEvent.SECURITY_ERROR, _securityErrorEventHandler); this._nc.connect('rtmp://(サーバーホスト名)/(アプリ名)'); } private function _setCameraStream():void { this._send_ns = new NetStream(this._nc); this._send_ns.addEventListener(NetStatusEvent.NET_STATUS, _netStatusEventHandler); var class_obj:* = new NetStreamCall(); this._send_ns.client = class_obj; var camera:Camera = Camera.getCamera(); camera.setQuality(0, 85); camera.setMode(640, 480, 15, true); this._send_ns.attachCamera(camera); this._send_ns.publish('recTestLive'); var video:Video = this._display.getChildByName('video') as Video; this._recieve_ns = new NetStream(this._nc); this._recieve_ns.client = class_obj; this._recieve_ns.play('recTestLive'); video.attachNetStream(this._recieve_ns); } private function _btnEventHandler(event:MouseEvent):void{ this._send_ns.pause(); this._send_ns.publish('recTestRec', 'record'); this._timer_start(); } private function _timer_start(){ trace("録画タイマー測定開始"); var text:TextField = this._display.getChildByName('text') as TextField; text.textColor = 0xD20202; text.text = '録画開始しました(5秒間映像を録画します)'; this._timer = new Timer(5 * 1000); this._timer.addEventListener(TimerEvent.TIMER, _timerEventHandler); this._timer.start(); } private function _timerEventHandler(event:TimerEvent):void{ trace("録画終了"); var text:TextField = this._display.getChildByName('text') as TextField; this._send_ns.close(); this._recieve_ns.pause(); this._recieve_ns.play('recTestRec'); } private function _netStatusEventHandler(event:NetStatusEvent):void { trace(event.info.code); switch (event.info.code) { case "NetConnection.Connect.Success": this._setCameraStream(); break; default: break; } } private function _securityErrorEventHandler(event:SecurityErrorEvent):void { trace(event.text); } private function _asyncErrorEventHandler(event:AsyncErrorEvent):void { trace(event.text); } eventとvoidは一通り付け加えたと思うのですが・・・どなたかご指摘をお願いします。

  • ActionScript3.0フレーム移動について

    お世話になります。 Flash ActionScript3.0で、ボタンをクリックしたら、 階層違いのシーンに移動するという 単純なところでつまずいています。 一番上の階層には、 1フレーム目 フレームラベル "a" 2フレーム目 フレームラベル "b" として、それぞれ this.stop();を書いてあります。 "a""b"には、それぞれムービークリップが配置してあって、 今やりたいことは、"a"に配置してあるムービークリップの 2つ下(中?)の階層にあるボタンをクリックしたら、一番上の階層の"b"に移動して、 "b"に配置してあるムービークリップを表示するようにしたいのです。 "a"のムービークリップのボタンのあるフレームには、 this.stop(); button01.addEventListener(MouseEvent.CLICK,jumpB); function jumpB(event:MouseEvent):void { MovieClip(parent.parent).gotoAndStop("b"); } と書いてみましたが、 [TypeError: Error #1009: null のオブジェクト参照のプロパティまたはメソッドにアクセスすることはできません。] と怒られます。 試しに MovieClip(stage).gotoAndStop("b"); とか、"b"に配置してあるムービークリップにインスタンス名"b_mc"を与えて MovieClip(parent.parent).b_mc.play(); などと苦し紛れにやってみましたが、すべて同じように怒られます。 どのようにすれば、下の階層から一番上の階層の別フレームに 移動することができますでしょうか? よろしくお願い致します。

  • Actionscript3.0 子のイベントを削除

    Actionscript3.0で親のムービーから子のイベント指定して削除することは可能でしょうか? 親のステージに配置したmymcの中でballをENTER_FRAMEを使い動かしています。 親のステージに配置したbtnをクリックすることで、 ENTER_FRAMEを削除したいのですが、 下記のスクリプトだと、親のほうでmyenterframeが未定義と表示されてしまいます。 どのように記述すればよいのでしょうか? よろしくお願いいたします。 ーーーーーーーーーーーーーーーーー親ーーーーーーーーーーーーーーーーー btn.addEventListener (MouseEvent.CLICK, myclick); function myclick(event:MouseEvent):void{ mymc.removeEventListener(Event.ENTER_FRAME, myenterframe); } ーーーーーーーーーーーーーーーーーmymcーーーーーーーーーーーーーーーーー addEventListener(Event.ENTER_FRAME, myenterframe); function myenterframe(evt:Event):void { ball.x++; }

    • ベストアンサー
    • Flash
  • ボタンを押してもすぐ戻ってしまう・・・。

    1フレーム目に、 onEnterFrame = function():Void { if (_totalframes == _framesloaded) { gotoAndStop("snap"); } total = _root.getBytesTotal(); loaded = _root.getBytesLoaded(); percent = Math.floor(loaded/total*100); _root.bar_mc._xscale = percent; }; stop(); と記入し2フレーム目のフレームラベルをsnapに。 2フレーム目には、画像と次のフレームにいくボタンが置いてあります。 ボタンには、 on(press){ gotoAndStop(3); } と書いてあるのですが。 このボタンを押すと、確かに3フレーム目にいくのですが、すぐ2フレーム目に戻ってしまうんです。 初めてローディングバーをつけてみたので、間違いだらけかもしれないですがどうすればいいか教えてください><

    • ベストアンサー
    • Flash

専門家に質問してみよう