ActionScript2クラスの中の書き方について

このQ&Aのポイント
  • Flash ActionScript2のクラスの中の書き方について悩んでいます。クラスの中にMcを定義するものですがthis.mct.onPressのところでclass testAの中の_move()が実行できません。
  • class testAの中の_move()が実行できません。いろいろ試してみましたがうまく実行できませんでした。
  • クラスの中にMcを定義するものですが、_move()の実行がうまくできません。何かいい方法はありますか?
回答を見る
  • ベストアンサー

actionscript2のクラスの中の書き方について

Flash ActionScript2のクラスの中の書き方について悩んでいます。 クラスの中にMcを定義するものですがthis.mct.onPressのところで class testAの中の_move()が実行できません。いろいろ試してみました がうまく実行できませんでした。なにかいいやり方はないでしょうか? よろしくお願いします。 class testA{  var mct:MovieClip;  function testA(mct:MovieClip){   this.mct = mct;   this.mct.onPress = function(){    _parent._move();   }  }  function _move(){    this.mct.onEnterFrame = function(){   }  } }

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

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

  • ベストアンサー
  • mr_araki
  • ベストアンサー率85% (12/14)
回答No.1

実際動作チェックしていないので参考意見として 「this.mct」に「_move」を定義する class testA{  var mct:MovieClip;  function testA(mct:MovieClip){   this.mct = mct;   this.mct._move = function(){    this.onEnterFrame = function(){   }   this.mct.onPress = function(){    this._move();   }  } } もしくは「this.mct」からクラスへの参照を class testA{  var mct:MovieClip;  function testA(mct:MovieClip){   this.mct = mct;   this.mct._pclass = this;   this.mct.onPress = function(){    this._pclass._move();   }  }  function _move(){    this.mct.onEnterFrame = function(){   }  } } お試しください

e-type
質問者

お礼

ご連絡ありがとうございます。 class testA{  var mct:MovieClip;  function testA(mct:MovieClip){   this.mct = mct;   this.mct._pclass = this; クラスの中の関数をthisで各Mcの変数に入れることが できたんですね。とても参考になりました。 ありがとうございました!

関連するQ&A

  • ActionScript2.0のイベントについて

    親ムービークリップに配置した子ムービークリップのイベントが実行されなくて困っています。 親ムービークリップ自体には下記のイベントを設定しています。親ムービークリップはattachMovieで動的に配置しています。 onRollOver・・・onEnterFrameを設定 onRollOut・・・onEnterFrameを削除 子ムービークリップを配置して子ムービークリックにイベントを設定しました。onEnterFrameをは実行されますが、onReleaseが実行されず困っています。 function Parent() { this.onRollOver = function() { this.onEnterFrame = function(){・・・} } this.onRollOut = function(){ delete this.onEnterFrame; } this["child_mc"].onRelease = function() { trace('a') // 実行されない } this["child_mc"].onEnterFrame = function() { trace('b') // 実行される } } ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・ _root.attachMovie("Parent", "parent_mc", _root.getNextHighestDepth(), new Parent()); 子ムービークリップはオーサリングで静的にParentに配置し、プロパティでchild_mcと設定しています。 onReleaseは実行できず、そこで止まっています。 なんでも良いので教えてください。

    • ベストアンサー
    • Flash
  • onEnterFrame()について

    以下のようにしてクラス内でonEnterFrame()を使うとエラーが出てしまいます。 class TestClass extends MovieClip{   ・・・   function move(){     static function onEnterFrame(){     }   }   ・・・ } http://www.fumiononaka.com/Sample/MAX2004/ActionScript2Advanced.html を見てもあってると思うのですが、何か原因があるのでしょうか? よろしくお願いします。

  • actionscript クラスのメンバ変数のアクセスについて

    やりたいことは、 ムービークリップ(move_mc)をある座標まで、 減算処理をしながら移動するということなんですが、 クラスを勉強中で下記のように書いてみました。 ■インスタンス生成&メソッドへアクセス var move1:Move = new Move(5,100); move1.onclick(); ■asファイル class Move{ var speedPro:Number; var rangePro:Number; function Move(speed:Number,range:Number){ this.speedPro = speed; this.rangePro = range; trace(this.speedPro);//ここの値は5がでます } public function moving(){ _root.move_mc.onEnterFrame = function(){ this._x += (this.rangePro - this._x)/this.speedPro; trace(this._x); trace(rangePro);//undefined trace(this.speedPro);//undefined } } public function onclick(){ _root.move_mc.onRelease = moving; } } speedとrangeでスピードの値と移動範囲の値を引数で渡しています。 コンストラクタ関数のところでtraceするとちゃんと値はわたっていますが、moving関数のところではちゃんと値を取れていないようです。 メンバ変数にちゃんととりにいけていないようなのですが、 どのような書き方をしたらとりにいけるのでしょうか。。。 また、根本的にこのような書き方であっているのでしょうか。。。 ご協力お願いします。

    • ベストアンサー
    • Flash
  • Actionscript3.0のクラス定義の仕方

    ActionScript3.0のクラス定義について質問なのですが、回転するインスタンスがあり(それは最初からステージに置いてあります)、それがマウスが近づくにつれてだんだん回転が速くなるのを作りたいのですがなかなかうまくいきません。 クラス定義をせずに書いた場合ですとうまくいきましたが、それを外部ファイルにカスタムクラス(と言うんでしょうか?)をした場合、やり方がいまいち理解できずにうまくいかないんです。 クラス定義せずに書いたのはこちらです↓ addEventListener(Event.ENTER_FRAME, onEnterframe); function onEnterframe(eventObj:Event):void { //インスタンスの座標 var hanePt:Point=new Point(hane_mc.x,hane_mc.y); //マウスの座標 var mousePt:Point=new Point(stage.mouseX,stage.mouseY); //インスタンスとマウスの距離 var distance:Number=Point.distance(hanePt,mousePt); //距離が200以下の時に回転する if(distance<200){ hane_mc.rotation+=2000/Math.max(50,distance); } これですとちゃんと動きました。 そしてクラス定義にしたのがこちらです↓ メインのタイムラインのところにはこちらを書いて↓ var mousePt:Point=new Point(stage.mouseX,stage.mouseY); var haneobj1:Hane = new Hane(hane_mc); haneobj1.moveHane(mousePt); 外部ファイルにはこちらを書きました↓ package{ import flash.display.MovieClip; import flash.events.Event; import flash.geom.Point; public class Hane extends MovieClip{ //インスタンスのプロパティ var hane_mc:MovieClip; var ballPt:Point; var distance:Number; public function Hane(hane:MovieClip){ hane_mc = hane; ballPt = new Point(hane_mc.x,hane_mc.y); } public function moveHane(mou:Point):void{ distance = Point.distance(ballPt,mou); addEventListener(Event.ENTER_FRAME, kaitenHandler); } public function kaitenHandler(ev:Event):void{ //距離が200以下の時に回転する if(distance<200){ hane_mc.rotation+=2000/Math.max(50,distance); } } } } とくにエラーは出ないのですが、動くときと動かないときがあります。 動いたとしても一定の動きで、マウスが近づいてもとくに回転速度は変わりません。 どこか間違っているところあればご教授してください!! よろしくお願いします!!!

    • ベストアンサー
    • Flash
  • actionscript3.0で親階層にあるインスタンスの中のものを操

    actionscript3.0で親階層にあるインスタンスの中のものを操作したいのですが、うまくいきません。 具体的には、ボタンをクリックすると、ひとつ上の階層にある「aa_mc」の100フレームへgotoAndPlayするとしたいのですが、 スクリプトは以下の通りです。 //////////////////////////////////////////////////////// btn_mc.addEventListener(MouseEvent.CLICK, onClick); function onClick (eventObject:MouseEvent) :void { MovieClip(parent).aa_mc.gotoAndPlay(100); } //////////////////////////////////////////////////////// どなたかご教授お願いいたします。

  • MovieClip.propertyで設定したメソッドが消えてしまう

    お世話になっております。 ステージ上のMovieClip my_mc があるとします。 ActionScriptは以下になります。 MovieClip.property.hogehoge = function(){  trace("hogehogehoge"); } my_mc.onPress = function(){  this.hogehoge(); } 1回目にmy_mcをクリックすると正常に『hogehogehoge』と表示されます。 しかし、クリックを何回かしているうちに何も表示されなくなります。2回目以降の時もあれば、5回目以降の時もあります。 一度表示されなくなると、それ以降は表示されません。 試しに以下のようにトレースしました。 my_mc.onPress = function(){  trace(this.hogehoge);  this.hogehoge(); } 正常に表示される時は『[type Function]』と表示され、表示されなくなると『undefined』になります。 なぜ、undefined になるかがわかりません ご教授のほど宜しくお願い致します。

  • 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(); などと苦し紛れにやってみましたが、すべて同じように怒られます。 どのようにすれば、下の階層から一番上の階層の別フレームに 移動することができますでしょうか? よろしくお願い致します。

  • ActionScript2.0

    actionscript2.0で作成をしている初心者です 今、ドラッグが可能なムービークリップを作成し、 その下の階層にボタンを作成しています。 onClipEvent (enterFrame){ this.onPress = function(){ドラッグ開始} this.onRelease = function(){ドラッグ終了} this.button1.onPress = function(){ボタン押した処理} [現状] ムービークリップをドラッグ不可能にすれば、ボタンを押すことは可能なのですが、ドラッグ可能にするとボタンが押せなくなります。 ムービークリップのドラッグが可能で、かつムービークリップ階層下のボタンを有効にするためにはどうしたらよいでしょうか。 宜しくお願いします

  • [Flash]actionscript2.0を用いて歯車を作りたいのですが

    Adobe FLASH CS2を使い2つのかみ合った歯車を制作しています。 ドラッグで片方の歯車を回転させると もう片方の方は逆回転になるはずですが、 うまいことactionscriptをかくことができません。 片方はこのようなactionscriptを使っているのですが うまい作り方はないでしょうか。 よろしくおねがいします。 on (press) { //このMCの基準点からのマウス座標を取得 rx0 = _root._xmouse-this._x; ry0 = _root._ymouse-this._y; //このMCの基準点とマウスとの距離を算出 td0 = Math.sqrt(rx0*rx0+ry0*ry0); //マウスによる回転の差分を算出 tr0 = (Math.PI/2+Math.atan2(ry0, rx0))*180/Math.PI-this._rotation; //onEnterFrame を定義 this.onEnterFrame = function() { //現在のMCの基準点からのマウス座標を取得 rx1 = _root._xmouse-this._x; ry1 = _root._ymouse-this._y; //このMCの回転を計算 this._rotation = (Math.PI/2+Math.atan2(ry1, rx1))*180/Math.PI-tr0; //このMCの移動を計算 }; } on (release, releaseOutside) { //この onEnterFrame を削除 delete this.onEnterFrame; }

  • AS用に書き出されたクラスの取得

    シンボルプロパティで「ActionScript用に書き出し」をしたクラスの取得方法は通常、 --- var testX:MovieClip = new testA; addChild(testX); --- ですが、 「testA」のところをテキストにして呼び出したいと考えています。 --- var testX:MovieClip = new ("test"+"A"); --- こんな感じです。 「getChildByName」を使ってみたのですがダメでした。 --- var testX = MovieClip(getChildByName("test"+"A")); --- 何か良い方法はあるのでしょうか。

    • ベストアンサー
    • Flash

専門家に質問してみよう