今回もまたFlashのことで教えてください。
先日教えていただいた「ドラッグしたMCを常に上に表示&色の変化」がきちんと動作できて
とても助かりましたが、また、新たな課題が出たので教えて下さい。(これまでできていたリセットボタンがうまく動作しなくなっちゃったのです。)
具体的に言うと、つまずいている課題は以下の通りです。
ドラッグして移動したMCを元の位置(フレーム上の最初にあった位置)に戻すために「リセットボタン」を配置しましたが、このボタンでリセットしてもなぜかドラッグして移動したMCもそのまま残った状態で表示されるのです。つまり、完全リセットされないのです。
ドラッグしたMCが元の位置に戻り、ドラッグする以前のフレームが表示されるようにしたいのでどうか教えてください。
私が書いたスクリプトとタイムラインを示しますので、どうぞよろしくお願いいたします。
バージョン Flash CS5.5 アクションスクリプト2.0 Flash Player 6 です。
フレーム1とフレーム2があり、フレーム1はフレーム2に進むためのボタンを配置。
フレーム2には赤の□2つ。白の□2つを配置。
フレーム2に書いたスクリプト(1)は以下の通り
(ドラッグしたMCが常に上に表示&色の変化をさせるスクリプト)
(赤の□のインスタンス名「R_mc1」「R_mc2」 白の□のインスタンス名「W_mc1」「W_mc2」 )
//---------------------------
//深度カウント用変数を用意
var dep_cnt:Number = 1;
//変数 i に 1~2 を入れながらループ
for (var i:Number = 1; i<=2; i++) {
//★「R_mc○」内の再生を停止
this["R_mc"+i].stop();
//★「R_mc○」内の変数 target_mc に「W_mc○」の参照を代入
this["R_mc"+i].target_mc = this["W_mc"+i];
//「R_mc○」押下時に関数 dragMC を実行
this["R_mc"+i].onPress = dragMC;
//「R_mc○」を放した時に関数 dropMC を実行
this["R_mc"+i].onRelease = dropMC;
//「R_mc○」をMC外で放した時にも関数 dropMC を実行
this["R_mc"+i].onReleaseOutside = dropMC;
}
//関数 dragMC の定義
function dragMC():Void {
//深度カウント用変数をカウントアップ
dep_cnt++;
//押下されたMCをその深度に移動
this.swapDepths(dep_cnt);
//押下されたMCのドラッグを開始
this.startDrag();
//★マウスが動く度に関数 watchHitW_mc を実行
this.onMouseMove = watchHitW_mc;
}
//関数 dropMC の定義
function dropMC():Void {
//放されたMCのドラッグを終了
this.stopDrag();
//★マウスが動く度に関数 watchHitW_mc を実行するのを解除
delete this.onMouseMove;
}
//★関数 watchHitW_mc の定義
function watchHitW_mc():Void {
//★ドラッグ中のMCがそのMC内の変数 target_mc に
// 代入したMCとヒットしていれば
if (this.hitTest(this.target_mc)) {
//★ドラッグ中のMC内をフレーム2で停止
this.gotoAndStop(2);
} else {
//★それ以外はドラッグ中のMC内をフレーム1で停止
this.gotoAndStop(1);
}
}
//---------------------------
ドラッグしたMCを元の位置に戻すための「リセットボタン」に書いたスクリプト(2)は以下の通り。
(以前に以下のようなスクリプトで元の配置にリセットされたので同じく書いてみましたが、今回はドラッグしたMCが消えず、そのまま表示されてしまいました。
//---------------------------
on (release) {
gotoAndPlay(1);
}
on (release) {
gotoAndStop(2);
}
//---------------------------
No.1ベストアンサー
- 回答日時:
ご質問で書かれていらっしゃるように
「フレーム移動を使う」&
「極力現在のスクリプトやそれを書く場所を変えない」
という条件でしたら,
リセットボタンに書かれたスクリプトのみを
単純に次のように修正すれば良いと思います。
//------------------
on (release) {
//変数 i に 1~2 を入れながらループ
for (i=1; i<=2; i++) {
//「R_mc○」を削除
this["R_mc"+i].removeMovieClip();
}
gotoAndStop(1);
gotoAndStop(2);
}
//------------------
レイヤーに配置した MC を swapDepths() すると
レイヤーとの結びつきが消えて宙に浮きます。
フレーム移動をさせて
またその MC が出没したフレームに戻すと
レイヤーに結びついた MC が再び現れて
宙に浮いた MC と共存してしまいます。
それらの MC を共存させたくない場合は
宙に浮いた MC を消してやれば良いでしょう。
その MC を消すメソッドが
removeMovieClip() です。
なお
removeMovieClip() では
レイヤーに結びついた MC つまり
手動で配置した MC は消えません。
removeMovieClip() では
ActionScript で生成や配置した MC や
swapDepths() で宙に浮いた MC のみを消すことができます。
=========================
しかし...
そもそもフレーム移動などが要る状況なのでしょうか?
もし,フレーム移動させる必要がないのであれば
私でしたらメインのタイムラインをフレーム1のみにして
さらにリセットボタン自体に書いたスクリプトは全て消して
そしてそのボタンには例えば「reset_btn」というインスタンス名を付けて
フレームに書くスクリプトを次のようにしますけどね↓。
//---------------------------
//深度カウント用変数を用意
var dep_cnt:Number = 1;
//変数 i に 1~2 を入れながらループ
for (var i:Number = 1; i<=2; i++) {
//★「R_mc○」内の再生を停止
this["R_mc"+i].stop();
//★「R_mc○」内の変数 target_mc に「W_mc○」の参照を代入
this["R_mc"+i].target_mc = this["W_mc"+i];
//◆「R_mc○」内の変数 start_x に「R_mc○」自身の初期x座標を代入
this["R_mc"+i].start_x = this["R_mc"+i]._x;
//◆「R_mc○」内の変数 start_y に「R_mc○」自身の初期y座標を代入
this["R_mc"+i].start_y = this["R_mc"+i]._y;
//「R_mc○」押下時に関数 dragMC を実行
this["R_mc"+i].onPress = dragMC;
//「R_mc○」を放した時に関数 dropMC を実行
this["R_mc"+i].onRelease = dropMC;
//「R_mc○」をMC外で放した時にも関数 dropMC を実行
this["R_mc"+i].onReleaseOutside = dropMC;
}
//関数 dragMC の定義
function dragMC():Void {
//深度カウント用変数をカウントアップ
dep_cnt++;
//押下されたMCをその深度に移動
this.swapDepths(dep_cnt);
//押下されたMCのドラッグを開始
this.startDrag();
//★マウスが動く度に関数 watchHitW_mc を実行
this.onMouseMove = watchHitW_mc;
}
//関数 dropMC の定義
function dropMC():Void {
//放されたMCのドラッグを終了
this.stopDrag();
//★マウスが動く度に関数 watchHitW_mc を実行するのを解除
delete this.onMouseMove;
}
//★関数 watchHitW_mc の定義
function watchHitW_mc():Void {
//★ドラッグ中のMCがそのMC内の変数 target_mc に
// 代入したMCとヒットしていれば
if (this.hitTest(this.target_mc)) {
//★ドラッグ中のMC内をフレーム2で停止
this.gotoAndStop(2);
} else {
//★それ以外はドラッグ中のMC内をフレーム1で停止
this.gotoAndStop(1);
}
}
//◆「reset_btn」クリック時に実行するメソッドの定義
reset_btn.onRelease = function():Void {
//◆変数 i に 1~2 を入れながらループ
for (i=1; i<=2; i++) {
//◆「R_mc○」内の再生をフレーム1で停止
this._parent["R_mc"+i].gotoAndStop(1);
//◆「R_mc○」の x座標 を R_mc○.start_x に戻す
this._parent["R_mc"+i]._x = this._parent["R_mc"+i].start_x;
//◆「R_mc○」の y座標 を R_mc○.start_y に戻す
this._parent["R_mc"+i]._y = this._parent["R_mc"+i].start_y;
}
};
//---------------------------
注釈行に◆を入れたところが,付け足し部分です。
「R_mc○」の初期座標は
この場合特に「R_mc○」自身内の変数に代入保存する必要はありません。
前回までのスクリプトで,
「R_mc○」内の変数に「W_mc○」の参照を保存したので
それに合わせているだけです。
MC の外(メインのタイムラインなど)に勝手な変数でも作って
その変数に初期座標を代入保存でも良いですし
また,
座標保存用の配列でも作って
その配列の要素に初期座標を代入保存しても良いです。
フレーム移動をさせない場合の作成状態の図↓
BlurFiltanさん、今回も本当にありがとうございました。
リセットボタンにスクリプトをつけることしか方法を見つけられない私が、そこでつまづいてしまって
またまたBlurFiltanさんにお世話になってしましました。
1つクリアしたら、また新たにつまづいて・・・の繰り返しの私に、いつもご丁寧に対応してくださる
BlurFiltanさんに本当に感謝感謝です。
またkochachaだってお思いでしょうが、毎回わかりやすくご回答してくださり、すごくありがたいです。
本当にありがとうございましたm(__)m
また、よろしくおねがいいたします(^.^)
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- 物理学 相対性理論のエネルギーについて 3 2023/02/10 15:59
- スピーカー・コンポ・ステレオ MCカートリッジのオススメを教えてください。 お時間割いてくださりありがとうございます。 当方、現在 10 2022/07/04 14:20
- アイドル・グラビアアイドル 嵐の中でも櫻井翔がMC向き扱いだったけど。 むしろ バラエティやらみていて 爺ちゃん ばあちゃん 国 2 2022/12/03 19:49
- バラエティ・お笑い リニューアルされた「新婚さんいらっしゃい!」 3 2022/04/03 18:55
- その他(ビジネス・キャリア) 海外から請求書がきたのですがPC/MCの意味がわからないのとそこの数字があってるのかわからなくて海外 2 2022/11/08 11:32
- 宇宙科学・天文学・天気 AIが答えた方程式 1 2023/02/20 00:12
- 情報・ワイドショー タレントMC 5 2023/06/23 06:44
- 物理学 『四次元温度』 2 2022/05/09 11:07
- BTOパソコン https://www.youtube.com/watch?v=8h8EVXotOwQ&t=14s 2 2022/12/23 02:25
- 工学 材料力学(構造力学?)についての問題です。 写真のような形で部材CDの内力を考えます。 C点からの距 1 2022/11/22 00:41
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VBAユーザーホームテキストボッ...
-
eval関数を利用して複数の処理...
-
VBAで改行の入ったデータの正規...
-
五芒星は、悪魔崇拝とどういう...
-
photoshopで書いた四角の枠の中...
-
プログラミング、アーキテクチ...
-
VBScriptでMsgBoxのYesNoボック...
-
ダブルクリックと2回クリックの...
-
ActionScriptでプルダウンメニュー
-
python ボタンを押すと複数の関...
-
Flash ステージに初期配置したM...
-
PYTHONのtkinterについて
-
Pythonのtkinterについて
-
改行含むテキストの表示の仕方
-
テキストボックスにセルの値を...
-
マウスクリックした回数がカウ...
-
ムービープレビューでないと動...
-
OpenGLのグラデーションについて
-
スクロール処理(早急にお伺い...
-
画像表示をアルファでフェード...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VBAで改行の入ったデータの正規...
-
VBAユーザーホームテキストボッ...
-
テキストファイルから読み込ん...
-
外部SWFファイルを再生バーでコ...
-
AS3 mc0~5をまとめて処理する
-
エンドロール風テキストの表示...
-
ロールオーバーで下画像を表示...
-
看護師です。体温表のマクロを...
-
縦横比率のを変えずに画像のサ...
-
photoshopで書いた四角の枠の中...
-
YOASOBI
-
VBScriptでMsgBoxのYesNoボック...
-
プログラミング、アーキテクチ...
-
python ボタンを押すと複数の関...
-
別のアプリケーションのテキス...
-
テキストボックスの中身をリセ...
-
テキストボックスにセルの値を...
-
五芒星は、悪魔崇拝とどういう...
-
else if文の順序を変えることに...
-
変数に256文字以上のテキストを...
おすすめ情報