• ベストアンサー

mcのドラッグ操作について

mcのドラッグ制御で悩んでいます。 よく公開されているサンプルでは写真などのmcがり、写真mcを右にドラッグすると写真mc自体も右にスライドしますが、 写真mcを右ドラッグをすると写真mcが左にスライドする仕様を作りたいと思っています。 当方初心者なので詳しくご教授頂けると幸いです。 開発環境はCS3、AS2.0で開発しています。 よろしくお願いします。

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

  • ベストアンサー
  • BlurFiltan
  • ベストアンサー率91% (1611/1754)
回答No.1

> 写真mcを右ドラッグをすると写真mcが左にスライドする そういうものをあまり見かけたことがありませんが, こんな感じ↓でしょうか。 新規ドキュメント(ActionScript2.0)を作成して, 次のように書いて(コピペして), パブリッシュ(AS2.0 FlashPlayer8 以上)などをするだけで 一応のサンプルはできます。 ////////////////////////////////////////////////////// // ---仮にスクリプトでMC「p_mc」を作成するだけです------ // 実際は写真をMCに変換してもOKです var _mc:MovieClip = this.createEmptyMovieClip("p_mc", 0); _mc._x = Stage.width/2; _mc._y = Stage.height/2; _mc.beginFill(0x0099FF); _mc.moveTo(-Stage.width/6, -Stage.height/6); _mc.lineTo(Stage.width/6, -Stage.height/6); _mc.lineTo(Stage.width/6, Stage.height/6); _mc.lineTo(-Stage.width/6, Stage.height/6); _mc.endFill(); // -------------------------------------------- // p_mc をマウスで押したときの動作を定義 p_mc.onPress = function() { // そのときのマウスの座標を記録 this.mou_x = _root._xmouse; // そのときのこのMCの座標を記録 this.my_x = this._x; // --- // マウスが動いたときの動作を定義 this.onMouseMove = function() { // マウスが動いた分だけ逆向きに移動 this._x = this.my_x+this.mou_x-_root._xmouse; // 移動の制限(不要であれば削除) if (this._x>Stage.width-this._width/2) { this._x = Stage.width-this._width/2; } else if (this._x<this._width/2) { this._x = this._width/2; } // 即更新 updateAfterEvent(); }; // --- }; // p_mc からマウスを放したときの動作を定義 p_mc.onRelease = function() { // マウスが動いたときの動作定義を削除 delete this.onMouseMove; }; // p_mc を外で放したときの動作を定義 p_mc.onReleaseOutside = p_mc.onRelease; ////////////////////////////////////////////////////// ちなみに..., > 写真mcを右ドラッグをすると写真mcが左にスライドする というのとはちょっと違いますが, こんな感じ↓のでしたらよく見ますね。 ///////////////////////////////////////////////////////// // ---仮にスクリプトでMC「p_mc」を作成するだけです------ // 実際は写真をMCに変換してもOKです var _mc:MovieClip = this.createEmptyMovieClip("p_mc", 0); _mc._x = Stage.width/2; _mc._y = Stage.height/2; _mc.beginFill(0x0099FF); _mc.moveTo(-Stage.width/6, -Stage.height/6); _mc.lineTo(Stage.width/6, -Stage.height/6); _mc.lineTo(Stage.width/6, Stage.height/6); _mc.lineTo(-Stage.width/6, Stage.height/6); _mc.endFill(); // ---仮にスクリプトでテキストフィールドを作成するだけです--- var _txt:TextField = this.createTextField("c_txt", 1, 0, 0, 0, 0); _txt.autoSize = true; _txt.selectable = false; _txt.text = ""; // -------------------------------------------- // 最高速度の設定 var spd:Number = 20; // p_mc をマウスで押したときの動作を定義 p_mc.onPress = function() { // そのときのマウスの座標を記録 this.mou_x = _root._xmouse; // マウスを消す Mouse.hide(); // --- // 1フレーム進むごとに随時実行する関数を定義 this.onEnterFrame = function() { // 代用マウスの表示と座標指定 if (this.mou_x>_root._xmouse+2) { c_txt.text = "←◎))"; } else if (this.mou_x<_root._xmouse-2) { c_txt.text = "((◎→"; } else { c_txt.text = "((◎))"; } c_txt._x = _root._xmouse-c_txt._width/2; c_txt._y = _root._ymouse-c_txt._height/2; // // マウスが動いた量を算出して5で割る this.idou = (_root._xmouse-this.mou_x)/5; // 上限を ±spd 内に押さえる if (this.idou>spd || this.idou<-spd) { this.idou = spd*this.idou/Math.abs(this.idou); } // マウスが動いた分だけ逆向きに移動 this._x -= this.idou; // 移動の制限(不要であれば削除) if (this._x>Stage.width-this._width/2) { this._x = Stage.width-this._width/2; } else if (this._x<this._width/2) { this._x = this._width/2; } }; // --- }; // p_mc からマウスを放したときの動作を定義 p_mc.onRelease = function() { // 1フレーム進むごとに随時実行する関数を削除 delete this.onEnterFrame; // マウスを出す Mouse.show(); // 代用マウスを消す c_txt.text = ""; }; // p_mc を外で放したときの動作を定義 p_mc.onReleaseOutside = p_mc.onRelease; /////////////////////////////////////////////////////////

gardens64
質問者

お礼

BlurFiltan様ご回答ありがとうございます。 私のつたない質問を理解して頂いたと共に、素晴らしいサンプルをご教授頂けた事に大変感激しております。 丁寧にコメントを挿入して頂いたおかげで、初心者の私でも理解することができました。 また、フレームアクションのみで上記サンプルができることに、驚きと刺激を受けました。これを機に今まで以上に勉強に励みたいと思います。 度々このサイトで質問することがあると思いますが、機会があれば再度ご教授頂ければ幸いと思います。 ありがとうございました。

関連するQ&A