アプリ版:「スタンプのみでお礼する」機能のリリースについて

Flash]で作成していてつまずいている者です。
初心者なので困っています。
内容は以下のようなことです。

画面に2つの□が左右にあるとします。
左の□は赤のムービークリップで、右の□は白のムービークリップです。
左の赤の□をドラックして、右の白の□に重ねた(吸着した)ときに
赤が黄色に変わる方法を知りたいです。
すみませんがよろしくお願いします。

A 回答 (1件)

「MC(ムービークリップ)を使う」ということですから


MC の特性を生かして
例えば
MC内の フレーム1 と 2 との表示を切り替えることによって
色を変えるという方法をまず考え付くべきでしょうね。
(この方法を使えば,「塗りだけの色を変える」とか「形と色を変える」とかその他色々なことに対応できます。)



しかし...
「使用されている Flash のバージョン」も
「使用している ActionScript のバージョン」も書かれていませんね。。。

これでは具体的なスクリプトなど回答できません。

回答できなければ困るので
こちらで勝手な条件を想定させていただきます。



Flash CS3 以上をお持ちで
ActionScript 3.0 を使って
Flash Player 9 以上用の SWF をパブリッシュするものとします。

この条件であるものとして以下を続けます。


まず,「左の□の赤MC」内は 2フレーム にして
フレーム1 と フレーム2 にキーフレームを作り
フレーム1 には 赤□,フレーム2 には 黄□ の絵を用意します。

※参考【添付図】↓

この作業が終わりましたら
「シーン 1」などメインのタイムラインの編集に戻ります。

そして
ステージ上の「左の□の赤MC」を選択した状態で
プロパティインスペクタ(プロパティパネル)より
例えば「L_mc」というインスタンス名を付けます。

また
ステージ上の「右の□の白MC」を選択した状態で
プロパティインスペクタ(プロパティパネル)より
例えば「R_mc」というインスタンス名を付けます。

その「L_mc」や「R_mc」が存在するタイムラインのフレーム
(例:メインタイムラインのフレーム1)に書くスクリプト例です↓。


//---------------------------
//左の「L_mc」内の再生を停止
L_mc.stop();

//右の「R_mc」上でマウスダウン時に関数 onR_mcMouseDown を実行
R_mc.addEventListener(MouseEvent.MOUSE_DOWN,onR_mcMouseDown);

//関数 onR_mcMouseDown の定義
function onR_mcMouseDown(e:MouseEvent):void {
//「R_mc」のドラッグを開始
R_mc.startDrag();
//マウスアップ時に関数 onStageMouseUp を実行
stage.addEventListener(MouseEvent.MOUSE_UP,onStageMouseUp);
//マウスが動く度に関数 watchHitLR を実行
addEventListener(MouseEvent.MOUSE_MOVE,watchHitLR);
}

//関数 onStageMouseUp の定義
function onStageMouseUp(e:MouseEvent):void {
//「R_mc」のドラッグを終了
R_mc.stopDrag();
//マウスアップ時に関数 onStageMouseUp の実行するのを解除
stage.removeEventListener(MouseEvent.MOUSE_UP,onStageMouseUp);
//マウスが動く度に関数 watchHitLR を実行するのを解除
removeEventListener(MouseEvent.MOUSE_MOVE,watchHitLR);
}

//関数 watchHitLR の定義
function watchHitLR(e:MouseEvent):void {
//もし「R_mc」が「L_mc」にヒットしていれば
if (R_mc.hitTestObject(L_mc)) {
//「L_mc」内の再生を フレーム2 で停止
L_mc.gotoAndStop(2);
} else {
//ヒットしていなければ「L_mc」内の再生を フレーム1 で停止
L_mc.gotoAndStop(1);
}
}
//---------------------------


 

回答文字数制限にまだ少し余裕があるため
上と同様の構造を作った上での
Flash MX 2004 以上をお持ちで
ActionScript 2.0 を使って
Flash Player 6 以上用の SWF をパブリッシュする場合の
フレームに書くスクリプト例も書いておきます↓。


//---------------------------
//左の「L_mc」内の再生を停止
L_mc.stop();

//右の「R_mc」上でマウスダウン時に実行するメソッドを定義
R_mc.onPress = function():Void {
//「R_mc」のドラッグを開始
R_mc.startDrag();
//マウスが動く度に関数 watchHitLR を実行
this.onMouseMove = watchHitLR;
};

//右の「R_mc」上でマウスアップ時に実行するメソッドを定義
R_mc.onRelease = R_mc.onReleaseOutside = function():Void {
//このMC(R_mc)のドラッグを終了
this.stopDrag();
//マウスが動く度に関数 watchHitLR を実行するのを解除
delete this.onMouseMove;
}

//関数 watchHitLR の定義
function watchHitLR():Void {
//もし「R_mc」が「L_mc」にヒットしていれば
if (R_mc.hitTest(L_mc)) {
//「L_mc」内の再生を フレーム2 で停止
L_mc.gotoAndStop(2);
} else {
//ヒットしていなければ「L_mc」内の再生を フレーム1 で停止
L_mc.gotoAndStop(1);
}
}
//---------------------------



※ご質問には
 「(吸着した)とき」と書かれていますが
 「(接触した)とき」と解釈を変えています。
  (両スクリプトとも,いわゆる吸着はさせていません。)
 
 
「Flash ドラック&ドロップ 色の変更」の回答画像1
    • good
    • 0
この回答へのお礼

教えて頂いた通りにすることで解決しました。
素早く正確な回答に本当に感謝します。
ありがとうございました。

お礼日時:2013/07/22 14:22

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