第9回 座標の天動説と地動説

第9回←教材はこれ!

  • いきなりややこしい話だ!!!

x/yやmouseX/mouseYプロパティの定義元には,「DisplayObject」と記されている。つまり,これらのプロパティはDisplayObjectクラスに定義されているのだ。前回まで使っていたrotationもこのDisplayObjectクラスのプロパティである。なぜそれらが,MovieClipインスタンスからアクセスできるのか。

  • アクセスしてたんか!ん?!そもそも「rotation」出てきた時にそんなこと考えてないしな−。
  • そしてすぐに理由が明らかに。

多くのクラスは,階層構造を成している。その場合,ベースとなるクラスのプロパティやメソッド一式を引継ぎ,そこに新たなプロパティやメソッドを追加するかたちで新しいクラスが定義される。ベースとなるクラスは一般に「スーパークラス」と呼ばれ,それを拡張したいわば子どものクラスは「サブクラス」という。

  • つまりスーパークラスであるところの「MovieClip」から、サブクラスであるところの「DisplayObject」へアクセス可能と言うこと?
  • なんか今回から急に話が難しくなった気がする−。*1
  • 今まで割と分かりやすかったのに急にこの日本語難しいよ、野中先生!

mouseXは,MovieClipインスタンスの(継承した)プロパティだった。ということは,インスタンスによって,その値が異なりうることを意味する。マウスポインタは,コンピュータの画面にひとつしか存在しないのに,である。

理由は,mouseXプロパティが,インスタンスの基準点から見た座標を返すためだ。つまりこの値は,マウスポインタインスタンスの右側にあればプラスに,左側にあるとマイナスになる。地球から見て太陽が昇ったり沈んだりしている,と考えるようなものだ。つまり,DisplayObject.mouseX/DisplayObject.mouseYは,「天動説」のプロパティなのである。

  • でも何回も読んだら分かったよ。
  • とりあえず、mouseXプロパティが返す値は相対的なものだっつーことね。だから天動説。うーん無理矢理例え系。
  • 「天動説」「地動説」言わんでも「相対位置」「絶対位置」で通じる気もしますが。
  • ややこしいからまとめてみる。
DisplayObject.mouseX(マウスのx座標)
天動説のプロパティ←インスタンスの基準点から見た座標を返す
DisplayObject.mouseY(マウスのy座標)
天動説のプロパティ←インスタンスの基準点から見た座標を返す
DisplayObject.x(インスタンスのx座標)
地動説のプロパティ←当然親タイムラインから見た座標
DisplayObject.y(インスタンスのy座標)
地動説のプロパティ←当然親タイムラインから見た座標
  • ということで座標空間を地動説に一致させる*2。つーかつまり絶対位置指定ね。当然の流れですね。
  • なにげにインスタンスからメインタイムラインの方を指定するのは初めて。なるほど「parent.」使うのね。

addEventListener(Event.ENTER_FRAME, xFollowMouse);
function xFollowMouse(eventObject:Event):void {
x = parent.mouseX;
}

  • そんなわけで相対指定の方法も教えてくれるって。*3
  • 最後にマウスがウィンドウの外に出た場合についても言及。これについてはなんとなく経験通りの結果かな。
  • マウスが中にあるのか外にあるのかの判定自体は難しそうな予感。

*1:大学の授業でもこういうのよくあったなぁー(´Д⊂

*2:やっぱし地動説・天動説の例え分かりにくい!一瞬だけ迷う(´Д⊂

*3:もう面倒だから天動説・地動説は言い換えて使う!!!