• 締切済み

出力するとエラーメッセージが出ます

FLASHCS4でAS3.0を使ってます。 インスタンス名「_1mc」と言うオブジェクトを作成し、そのオブジェクトが浮遊するアニメーションを作成して、そのオブジェクトにマウスカーソルが触れるとマウスオーバーで「_1mc」の「61」へ移動し、マウスアウトで「1」に移動するように作りました。 そしてプレビューすると動作は特に問題なく作動しますが、出力には下記のようなメッセージが表示されます。このままでも問題ないのでしょうか?または別の記述方法を行う事で、このメッセージは回避出来るのでしょうか?その場合の記述方法を教えてください。 --------------------------------------------------------------- TypeError: Error #1009: null のオブジェクト参照のプロパティまたはメソッドにアクセスすることはできません。 at takaragawa_fla::MainTimeline/xEnterFrame() --------------------------------------------------------------- 「_1mc」を設置してあるフレームには下記のスクリプトを記述しました var step1X:int=Math.floor(Math.random()*1)+5; var step1Y:int=Math.floor(Math.random()*1)+5; if (Math.random()<0.5) { step1X*=-1; } if (Math.random()<0.5) { step1Y*=-1; } _1mc.addEventListener(Event.ENTER_FRAME, x1EnterFrame); function x1EnterFrame(evt) { _1mc.x+=step1X; _1mc.y+=step1Y; if (_1mc.x>=800||_1mc.x<=0) { step1X*=-1; } if (_1mc.y>=550||_1mc.y<=0) { step1Y*=-1; } } //ロールオーバーの設定 _1mc.addEventListener(MouseEvent.ROLL_OVER,xOver); //ロールアウトの設定 _1mc.addEventListener(MouseEvent.ROLL_OUT,xOut); //ロールオーバーしたとき function xOver(evt:MouseEvent):void { _1mc.gotoAndPlay(61); } //ロールアウトしたとき function xOut(evt:MouseEvent):void { _1mc.gotoAndPlay(1); } -------------------------------------------------------------- 以上ですので、アドバイスをお願い致します。よろしくお願い致します。

  • Flash
  • 回答数3
  • ありがとう数4

みんなの回答

回答No.3

再び1です ではもう一回ENTER_FRAME待つようにしてみます これでだめだったらちょっとわからないです addEventListener(Event.ENTER_FRAME,eventBuffer) function eventBuffer(e:Event):void{ _1mc.addEventListener(Event.ENTER_FRAME, x1EnterFrame); removeEventListener(Event.ENTER_FRAME,arguments.callee) } ↓ var wait=1 addEventListener(Event.ENTER_FRAME,eventBuffer) function eventBuffer(e:Event):void{ if(wait<0){ _1mc.addEventListener(Event.ENTER_FRAME, x1EnterFrame); removeEventListener(Event.ENTER_FRAME,arguments.callee) } wait-- } なんか無駄に長い・・・ もっと賢い方法がある気もします

gunhiro
質問者

お礼

H240S18B73さん、有難うございます。 早速、上記のように変更してプレビューしてみましたが、やはりシーン2になると…例のメッセージが出てきます。 となると…他に原因があるかもしれません。今までのを参考にしながら自分で探ってみます…。今回の件でとっても勉強になりました。 有難うございました。 因みに、最悪の場合…このまま解決できなくとも、メッセージが出てもプレビューしてもなんら問題がないようなので、そのままにすると思います…。お忙しい中、お時間を取らせてしまい大変に申し訳ございませんでした。そして親身になって考えていただきましてとっても有り難いです。本当に有難うございました。勉強になりました。 今後もよろしくお願い致します…。

回答No.2

1です まだちゃんとわかってはいないのですが どうやらFlashでは再生の途中から ステージに出現したインスタンスには その再生位置がフレームに入った直後にはアクセスできず 一度ENTER_FRAMEのイベントを待ってからでないと ちゃんとアクセスできないようです ちょっと無駄に長い気もしますが 一度ENTER_FRAMEを待つように _1mc.addEventListener(Event.ENTER_FRAME, x1EnterFrame); ↓ addEventListener(Event.ENTER_FRAME,eventBuffer) function eventBuffer(e:Event):void{ _1mc.addEventListener(Event.ENTER_FRAME, x1EnterFrame); removeEventListener(Event.ENTER_FRAME,arguments.callee) } としてみてはどうでしょう?

gunhiro
質問者

お礼

たびたびすみません。有難うございます。 早速ですが、H240S18B73さんの言うとおり、 「_1mc.addEventListener(Event.ENTER_FRAME, x1EnterFrame);」を 一旦削除して、下記のようにしてみましたが…。 -------------------------------------------------------------- addEventListener(Event.ENTER_FRAME,eventBuffer) function eventBuffer(e:Event):void{ _1mc.addEventListener(Event.ENTER_FRAME, x1EnterFrame); removeEventListener(Event.ENTER_FRAME,arguments.callee) } function x1EnterFrame(evt) { _1mc.x+=step1X; _1mc.y+=step1Y; if (_1mc.x>=800||_1mc.x<=0) { step1X*=-1; } if (_1mc.y>=550||_1mc.y<=0) { step1Y*=-1; } } //ロールオーバーの設定 _1mc.addEventListener(MouseEvent.ROLL_OVER,xOver); //ロールアウトの設定 _1mc.addEventListener(MouseEvent.ROLL_OUT,xOut); //ロールオーバーしたとき function xOver(evt:MouseEvent):void { _1mc.gotoAndPlay(61); } //ロールアウトしたとき function xOut(evt:MouseEvent):void { _1mc.gotoAndPlay(1); } -------------------------------------------------------------- と、してみましたが、動作は正常なんですが、シーン2に移動してからは、やはりまだ同じメッセージが出ます。自分の記述方法が悪いのでしょうか…。 お忙しい中、本当に有難うございます。助かります…。

回答No.1

ソースコピーして動かしてみましたが なんのエラーもでませんでした 原因は別の所にある気がします 僕が考えうるのは _1mcへのMovieClipインスタンスの 代入が間に合ってないか _1mcを含むムービーが_1mcがない フレームを再生するところがあるか _1mc内にあるなにかのインスタンスへの参照が gotoAndPlayしたことで切れてしまったかです このどれでもなさそうなら わからないです、すいません

gunhiro
質問者

お礼

H240S18B73さん…ご回答有難うございます。 やはりエラーは出なかったですか…。 となると、原因は別の所…でしょうか。そしたらおっしゃるとおり、「_1mcへのMovieClipインスタンスの代入が間に合ってないか」って考えられますが…。因みに、このムービーは2つのシーンから出来ています…。このエラー表示が出るのは2シーン目に切り替わった直後に出ます…。1シーン目には出ないのです…ですので、H240S18B73さんが、推測されたことかもしれませんね。 「エラー」ではなく「出力」でこのようなメッセージが出たので、ムービーも正常に動いているので特に問題はないのでしょうか?勿論、メッセージは出ないに越した事はないですけれど…。 忙しいなか、ご回答有難うございました。大変に助かりました。

関連するQ&A

  • ActionScript3.0について…

    ある課題で下記の条件を満たしたものを制作するというものがありまして、 制作してみたんですが、回答例と異なっていました。 私が制作したものでは、なにか間違っているのか分かりませんので質問させていただきました。よろしくお願いいたします。 ☆☆☆ 条件 ☆☆☆ ★ _mcの移動幅を5~10もしくは-10~-5の範囲になるようにします。 ★ 縦方向、横方向ともにステージの端まで移動したら反転するようにします。 ※ステージ幅は400px、高さは300pxとします。 ※条件ではありませんが、この問題を解くヒントとして、 「移動幅は2分の1の確率で-1を掛ける」と 「2分の1を表す条件式の例としては[ Math.random < 0.5 ]が考えられます。」とあります。 ☆☆☆ 回答例 ☆☆☆ var stepX:int = Math.floor(Math.random() * 6) + 5; var stepY:int = Math.floor(Math.random() * 6) + 5; if (Math.random() < 0.5){ stepX *= -1; } if (Math.random() < 0.5){ stepY *= -1; } _mc.addEventListener(Event.ENTER_FRAME, xEnterFrame); function xEnterFrame(evt) { _mc.x += stepX; _mc.y += stepY; if (_mc.x >= 400 || _mc.x <= 0){ stepX *= -1; } if (_mc.y >= 300 || _mc.y <= 0){ stepY *= -1; } } ☆☆☆ 私が書いたもの ☆☆☆ var stepX:int = Math.floor(Math.random() * 6) + 5; var stepY:int = Math.floor(Math.random() * 6) + 5; _mc.addEventListener(Event.ENTER_FRAME, xEnterFrame); function xEnterFrame(evt) { _mc.x += stepX; _mc.y += stepY; if(_mc.x > 400 || _mc.x < 0){ stepX *= -1; } if(_mc.y > 300 || _mc.y < 0){ stepY *= -1; } } あくまでもヒントでしたので、私が書く際にはヒントを見ずに書きました。

    • ベストアンサー
    • Flash
  • FLASH/一定時間停止後、再生されるscript

    flash CS4/ActionScript3.0にてサイトローテーションバナーを制作しております。 ムービークリップ「btn1_mc」をクリックするとフラッグ「scene1」を再生し、 「btn1_mc」にポインタが乗った時は一定時間停止し、再生されるという動きを作りたいのですが、初心者のため、うまくActionScriptが書けません。 setTimeout関数を使えば良いということはわかったのですが… 下記コードに書き加え、実装する方法を教えていただければ助かります。 よろしくお願いします。 btn1_mc.addEventListener(MouseEvent.CLICK,btn1Click); btn1_mc.addEventListener(MouseEvent.ROLL_OVER,btn1Over); btn1_mc.addEventListener(MouseEvent.ROLL_OUT,btn1Out); btn1_mc.buttonMode=true; function btn1Click(evt:MouseEvent):void{ gotoAndPlay("scene1"); } function btn1Over(evt:MouseEvent):void{ gotoAndStop("scene1"); btn1_mc.gotoAndStop(2); } function btn1Out(evt:MouseEvent):void{ gotoAndPlay("60"); btn1_mc.gotoAndStop(1); }

  • ロールオーバーで下の画像を表示させる

    質問番号:7020788を参考にしています。 http://okwave.jp/qa/q7020788.html 一番下に写真(400x400)を置き、その上にmc0~mc3(200×200)を4つ配置しました。 mc0にロールオーバーすればmc0がフェードアウトして200×200だけが写真を見え るようにしたいと考えています。 同様にmc1にロールオーバーすればmc1がフェードアウトします。 しかし、どのmcにロールオーバーしてもmc0~mc3の全体がフェードアウトしてし まい、私が思っておるように動作いたしません。 次にアクションスクリプトを示します。 mport fl.transitions.*; import fl.transitions.easing.*; mc0.addEventListener(MouseEvent.ROLL_OVER,onrollOver); mc1.addEventListener(MouseEvent.ROLL_OVER,onrollOver); mc2.addEventListener(MouseEvent.ROLL_OVER,onrollOver); mc3.addEventListener(MouseEvent.ROLL_OVER,onrollOver); function onrollOver(eventObj:Event):void { for (var i:Number = 0; i<=3; i++) { TransitionManager.start(this, {type:Fade, direction:Transition.OUT, duration:2, easing:None.easeNone}); removeEventListener(MouseEvent.ROLL_OVER,onrollOver); } } FLASH CS3でアクションスクリプトは3.0で作っています。どうか対処策を教えて いただきたく思います。

    • ベストアンサー
    • Flash
  • ActionScript3.0の修正に関して

    下記スクリプトは、A_btnをマウスオーバーすると、mcを表示し、 A_btnをマウスアウトすると、mcを非表示にするというスクリプトです。 これのマウスオーバー、マウスアウトを クリックしたら表示し、もう一度クリックしたら非表示にするというものに 変更したいのですが、 単にMouseEvent.CLICKにすると動作しなかったので どなたか教えていただけないでしょうか? よろしくお願いします。 ---------------------- 環境 action script3.0 Mac OSX Flash CS4 ---------------------- var mc:Fukidashi = new Fukidashi(); A_btn.addEventListener(MouseEvent.MOUSE_OVER,xMouseOver); function xMouseOver(evt){ mc.alpha = 0; addChild(mc); mc.x = 0; mc.y = 0; mc.addEventListener(Event.ENTER_FRAME,imgAlpha); function imgAlpha(event:Event){ mc.alpha += 0.05; if (mc.alpha > 1){ mc.removeEventListener(Event.ENTER_FRAME,imgAlpha); } } } A_btn.addEventListener(MouseEvent.MOUSE_OUT,xMouseOut); function xMouseOut(evt){ removeChild(mc); mc.alpha = 0; }

    • ベストアンサー
    • Flash
  • AS3.0で、複数のボタンをaddChildを使って配置しマウスイベン

    AS3.0で、複数のボタンをaddChildを使って配置しマウスイベントをfor文でまとめて設定する場合で悩んでおります、現在の以下のようにコーディングしているのですが、 //ボタン数 const Btns:uint=3; //ボタン配置 for (var i:uint=1; i<Btns+1; i++) { var BtnName:String="btn0"+i; ->ボタンにつけたクラスネーム var BtnClass:Class=getDefinitionByName(BtnName) as Class; var btnMC:MovieClip = new BtnClass(); loadmc02.addChild(btnMC); (loadmc2はボタンを配置するMC) btnMC.buttonMode=true; btnMC.x=10*i+140*(i-1); btnMC.y=340; if (i==1) { btnMC.addEventListener(MouseEvent.CLICK, BtnOnClick1); btnMC.addEventListener(MouseEvent.ROLL_OVER, BtnRollOver1); btnMC.addEventListener(MouseEvent.ROLL_OUT, BtnRollOut1); } else if (i==2) { btnMC.addEventListener(MouseEvent.CLICK, BtnOnClick2); btnMC.addEventListener(MouseEvent.ROLL_OVER, BtnRollOver2); btnMC.addEventListener(MouseEvent.ROLL_OUT, BtnRollOut2); } else if (i==3) { btnMC.addEventListener(MouseEvent.CLICK, BtnOnClick3); btnMC.addEventListener(MouseEvent.ROLL_OVER, BtnRollOver3); btnMC.addEventListener(MouseEvent.ROLL_OUT, BtnRollOut3); } } です。BtnOnClick1~3は異なるURLでBtnRollOver1~3、BtnRollOut1~3は function Over(hikisu)、function Out(hikisu)という関数を作って、 function BtnRollOver1(eventObject:MouseEvent):void { Over(1); } function BtnRollOut1(eventObject:MouseEvent):void { Out(1); }てな感じで動かしたい。 2.0とかってが違うので悩んでいます。効率のよいコーディングの仕方を教えてください。 よろしくお願いします。

    • ベストアンサー
    • Flash
  • AS3のボタンアクションについて

    FlashCS3 ActionScript3.0 ボタンアクションでつまづいています。 http://www.cucinadicasamia.fr/ 上記サイトのように、ボタンをクリックすれば、ダウンの状態を保持、 他のボタンをクリックでダウンの状態を解除。 のようにしたいのですが、上手くいきません。 下記のようにコードを書いたのですが。。。 A_mc.addEventListener(MouseEvent.CLICK,Click); A_mc.addEventListener(MouseEvent.ROLL_OVER,Over); A_mc.addEventListener(MouseEvent.ROLL_OUT,Out); B_mc.addEventListener(MouseEvent.CLICK,Click); B_mc.addEventListener(MouseEvent.ROLL_OVER,Over); B_mc.addEventListener(MouseEvent.ROLL_OUT,Out); function Over(event:MouseEvent):void{ event.target.gotoAndPlay("B"); } function Out(event:MouseEvent):void{ event.target.gotoAndPlay("A"); } function Click(event:MouseEvent):void{ trace("click"); event.target.gotoAndPlay("C"); } A_mc.buttonMode = true; B_mc.buttonMode = true; /////////////////////////////////////////////////////////////////////// function Clickとfunction Overが同時に発生しているので上手くいかないのでしょうか。。。 ご教授お願いいたします。

  • addChildの使い方

    ロールオーバーで下の画像を表示させる:を参考にしています。 http://okwave.jp/qa/q7020788.html ここはアクションスクリプト2.0でしたが、私はFLASH CS3 アクションスクリプト3.0で 作っています。 その回答をもとに100X100のロールオーバー用の画像を16個表示させるために 書きました。ステージは400x400です。 for (var i:Number = 0; i<=15; i++) { if (i != 0) { var my_mc:MC = new MC(); my_mc.x = i%4*100; my_mc.y = Math.floor(i/4)*100; addChild(my_mc); } } 16個で埋め尽くすことはできましたが、my_mcに番号をつけるなどして配列を使って やらなければならないと考えますが方法がわかりません。今は16番目(iが15)しか ロールオーバーしません。 全体のアクションスクリプトを書きます。 import fl.transitions.*; import fl.transitions.easing.*; for (var i:Number = 0; i<=15; i++) { if (i != 0) { var my_mc:MC = new MC(); my_mc.x = i%4*100; my_mc.y = Math.floor(i/4)*100; addChild(my_mc); } } my_mc.addEventListener(MouseEvent.ROLL_OVER,onrollOver); function onrollOver(eventObj:Event):void { //ロールオーバーイベントを受けたインスタンスを取得 var target_mc:MovieClip = MovieClip(eventObj.currentTarget); //そのインスタンスをフェードアウト TransitionManager.start(target_mc, {type:Fade, direction:Transition.OUT, duration:2, easing:None.easeNone}); //そのインスタンスのイベントリスナーを削除 target_mc.removeEventListener(MouseEvent.ROLL_OVER,onrollOver); }

    • ベストアンサー
    • 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
  • removeChild()についてご教授願います。

    AS3.0の初心者です。 Stratボタン、Stopボタンで以下のスクリプトで表示と非表示を繰返ししたいのですが、 Stopボタンで、単にremoveChild();にしますと、 「#2025: 指定した DisplayObject は呼び出し元の子でなければなりません。」 とエラーとなります。 色々と調べてみたのですが、よく判判りません。 Stopボタンの記述をどの様にすればよいのでしょうか? 初歩的質問で大変恐縮ですが、どうかご教授お願い致します。 [メインスクリプト] var stageH = stage.stageHeight; var stageW = stage.stageWidth; //Stratボタン start.addEventListener(MouseEvent.MOUSE_DOWN,gene); function gene(e:Event):void { for (var i = 0; i < 20; i++) { var mc:Candy = new Candy(); mc.x = Math.random()*stageW + 10; mc.y = Math.random()*stageH + 10; addChild(mc); } } //Stopボタン stop.addEventListener(MouseEvent.MOUSE_DOWN,stp); function stp(e:Event):void { removeChild(mc); この部分がよく判らないのですが、 どの様に記述したら良いのでしょうか? } --------------------------------------- [mc のスクリプト] var mcH:int = this.height; var mcW:int = this.width; var stageH = stage.stageHeight; var stageW = stage.stageWidth; var speedY:uint = Math.random() * 5 + 5; var speedX:uint = Math.random() * 2; addEventListener(Event.ENTER_FRAME,loop); function loop(Event):void { y += speedY; x += speedX; if ( y > stageH ) { y = - mcH; } if ( x > stageW ) { x = - mcW; } } -----------------------------------------

    • ベストアンサー
    • Flash
  • 【flash】AS3のソースをすっきりさせたい(MCボタン)

    AS3を勉強しているのですが、何かもう少しソースをすっきりさせられないかと思っています。 MCの中に複数ボタン用のMCがあり、ロールオーバー・ロールアウト・クッリクの3パターン設定しています。よく本などで紹介されているように button1.addEventListener(MouseEvent.MOUSE_OVER,aover); button1.addEventListener(MouseEvent.MOUSE_OUT,aout); button1.addEventListener(MouseEvent.CLICK,aclick); function aover(evt){ button1.scaleX += 2;  ・  ・  ・ (続く) というような形で動かしています。MCのロールオーバー・ロールアウト時の動きは全て同じ値の拡大・縮小になるのですが、functionの中でbutton1.scaleX としているために、MCの数分functionを用意しないといけない状態です。 クリック時にはhttpから始まるリンク先にとばしている(ボタンごとにちがうアドレス)のですが、こちらも上と同様MC分のfunctionを用意しています。 これが20個も30個もあると動くは動くのですが、ものすごく長いソースになってしまいます。AS2の時はfunctionをどこかに用意しておいて、変数にインスタンス名を入れて(x = "button1"; のように)動かしていたのですが、今回それをやろうと思うと、インスタンス名を入れるfunctionを作らないといけなくてどちらにしても同じものを複数個つくらないといけないのかなぁ・・という気がしております。 動きに変更があった場合も全て変更しないといけなかったりでスマートでないなと感じています。 また、最初の button1.addEventListener(MouseEvent.MOUSE_OVER,aover); button1.addEventListener(MouseEvent.MOUSE_OUT,aout); button1.addEventListener(MouseEvent.CLICK,aclick); の部分は一つにまとめれたりしないでしょうか・・・(ここは無理でしょうか^^;) みなさん、このような場合どのように対処していますか?アドバイスよろしくお願いします。

    • ベストアンサー
    • Flash

専門家に質問してみよう