- ベストアンサー
suzukaもしくはpalaflaの「this.y」について
- フリーFlash作成ソフト「suzuka」(Flash4相当)にて、簡単な携帯電話向けゲームを作成しようとしている者です。
- 横スクロールアクションのような物で、メインにスプライトでフィールドを、そのフィールドの中にさらにスプライトで障害物を設置したいと考えているのですが、「this.y」が機能しないようです。
- スプライト内スプライトに「this」機能を持たせるにはどうしたらよいのでしょうか。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
本題に入る前に確認です。 書かれていらしゃるスクリプトですが, 最初からして間違っていませんか? つまり,両方ともメインの直下に置いた場合であっても,おかしいと思いますよ。 > 正確には > --------------------------------------- > if(/ply.x > this.x+20 && /ply.x < this.x-20 > /ply.y > this.y+20 && /ply.x < this.x-20){ > --------------------------------------- こう↑ではなくて, 正確には --------------------------------------- if(/ply.x < this.x+20 && /ply.x > this.x-20 && /ply.y < this.y+20 && /ply.y > this.y-20){ --------------------------------------- こう↑ではないかと推測します。 (ply.x < this.x-20 が2回も出てきています。) 上のように書きまちがえていらっしゃるものとして先に話しを進めます。 Flashのインスタンスの座標は親を基準にしたローカルな座標です。 _root の直下にあるインスタンスであればキャンバスの左上を基準にした座標です。 _root の直下にあるインスタンスの,さらにその中にあるインスタンスでしたら, _root の直下にあるインスタンスの基準点を基準とした座標です。 階層構造は次のような感じですよね。 メイン(_root) ├ プレイヤーキャラクタ(ply) └ スプライト1(フィールド) └ スプライト2(障害物) つまり, プレイヤーキャラクタ(ply) の座標は,メイン(_root) の基準点に対する座標です。 一方, スプライト2(障害物) の座標は,スプライト1(フィールド)の基準点に対する座標です。 同じ _root を基準にした座標を考ようとする場合, スプライト2(障害物) の座標は,スプライト1(フィールド)の座標を足した座標になります。 図示すると次のような感じです。 ├───40px───┤■■■←プレイヤーキャラクタ □□□□□□□□□□□□□□□□□←メイン x=0 ↑↑↑ メインに対するプレイヤーキャラクタの座標は 40px ├─20px─┤├10px┤回回回回←スプライト2 ├─20px─┤圏圏圏圏圏圏圏圏圏←スプライト1 □□□□□□□□□□□□□□□□□←メイン x=0 ↑↑↑ メインに対するスプライト2の座標は 20px+10px つまり 親の座標+自分の座標 になる。 スクリプトですが, 本当は書かれていらしゃる原型をなるべく尊重して, 親の座標を相対パスで取得したかったのですが, どうも親のパスの書き方がわかりません。 「_parent」 でも 「parent」 でも 「../」 でもないようです。 わからないので, 親である スプライト1(フィールド) にインスタンス名を付けることにします。 スプライト1(フィールド) に, 「field」 というインスタンス名を付けた場合, if文のスクリプトは次のようになります。 ---------------------------------------- if(/ply.x < this.x+/field.x +20 && /ply.x> this.x+/field.x -20 && /ply.y < this.y+/field.y +20 && /ply.y > this.y+/field.y -20){ ----------------------------------------
お礼
確かに、これでは機能しませんね。 BlurFiltan様が親切な方で助かりました。 大変失礼致しました。 さて、今回ご教授頂いた内容、非常によくわかりました。 ご支持頂いた内容にて早速試してみたところ、無事問題が解決致しました。 BlurFiltan様、 まことにありがとうございました。