重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

電子書籍の厳選無料作品が豊富!

わからないことがあるので、教えてください。
以下のようなクラスがありました。

class Mover extends MovieClip{
var targetMC:MovieClip
var objectRef:Object;
var xVel:Number;
var yVel:Number;
function Mover(targetMC:MovieClip,xVel:Number,yVel:Number){
this.targetMC=targetMC
this.targetMC.objectRef=this;
this.xVel=xVel;
this.yVel=yVel;
}
function updatePosition(){
this._x+=this.objectRef.xVel;
this._y+=this.objectRef.yVel;
}
function startMoving(){
this.targetMC.onEnterFrame=this.updatePosition;
}
}

わからないのは、コンストラクタの中の
this.targetMC.objectRef=this;
です。
これはMoverクラス自身を参照してるんですか?targetMCのことなんでしょうか・・・。
このあたりがよくわからないので、わかりやすく教えてください。

よろしくお願いします。

A 回答 (1件)

私はクラスを使う事も無くよくわかっていないので、


間違った事を言っているかも知れませんが、

updatePosition関数はonEnterFrameで割り当てられる関数なので
updatePosition関数内からメンバ変数へアクセスは出来ません。
メンバ変数へアクセスできないと、コンストラクタの第二、第三引数、
つまりx,y方向への移動距離が取得できません。

それでは困るのでコンストラクタで
-----------------------------------------------------------
function Mover(targetMC:MovieClip,xVel:Number,yVel:Number){
  
  //第一引数をメンバ変数へ入れる
  this.targetMC=targetMC
  
  //メンバ変数targetMC内にobjectRefというObjectを作成し
  //その中にMoverへの参照を入れる
  //(多分)this.targetMC内からメンバ変数へアクセスできる様に
  this.targetMC.objectRef=this;
  
  //メンバ変数に第二、第三引数の値を入れる
  this.xVel=xVel;
  this.yVel=yVel;
}
-----------------------------------------------------------

としているのだと思います。

updatePosition関数内のthisはthis.targetMCのことですので、
-----------------------------------------------------------
function updatePosition(){
  this._x+=this.objectRef.xVel; ---(1)
  this._y+=this.objectRef.yVel; ---(2)
}
-----------------------------------------------------------
(1)のthis.objectRef.xVelというのは
this.targetMC.objectRef.xVelとイコールです。
(2)も同様に
this.targetMC.objectRef.yVelの事です。

this.targetMC.objectRefの中身はMoverの中にある変数と関数への参照ですので
this.targetMC.objectRef.xVelは
Moverのメンバ変数xVelの事です。

つまりメンバ変数の値を取得出来るというわけです。

>わからないのは、コンストラクタの中の
>this.targetMC.objectRef=this;
>です。
クラスではない普通のflaファイルの_rootのフレームアクションで
thisと書いたら_rootへの参照であるように
コンストラクタ内のthisはMoverへの参照だと思います。
    • good
    • 0
この回答へのお礼

ありがとうございます!
非常に詳しくわかりやすい回答で理解できました!
メンバ変数へアクセス出来るようにしてるんですね。
なるほどです!
モヤモヤしたものが晴れてきました。
ほんとにありがとうございます。

お礼日時:2006/08/30 10:10

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!