![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?e8efa67)
![](http://oshiete.xgoo.jp/images/v2/common/profile/M/noimageicon_setting_10.png?e8efa67)
No.3ベストアンサー
- 回答日時:
#1です。
> 一個目の果物をプレスした時点で、
> 3皿にドラッグ可能である事がわかるように色を変えて、
> まず一個の果物を皿におきます。
> 二個目の果物をプレスした時、
> ほかの2皿にドラッグ可能である事がわかるように
> 色を変えたいです。
はは~ぁ,なるほど。
ちょっと難しいですね。
中学高校の 集合 や 余事象 なんかがが頭の中を回りますよ。
仮に,
皿 は「osara0」,「osara1」,「osara2」 の3枚があった場合です。
また,果物にもインスタンス名を付けます。
果物のインスタンス名は 「kudamono0」,「kudamono1」,「kudamono2」,「kudamono3」,「kudamono4」,の5個があった場合です。
各果物MCに書くスクリプトです。
------------------------------------
onClipEvent (load) {
// osara の枚数を登録
var o_num = 3;
// kudamono の個数を登録
var k_num = 5;
}
//
on (press) {
// ドラッグ開始(中央に吸着)
startDrag(this, true);
// 全ての osara を フレーム2 に進ませる
for (var i = 0; i<o_num; i++) {
_root["osara"+i].gotoAndStop(2);
}
// もし,osara が kudamono のどれかとヒットしていれば
for (var i = 0; i<o_num; i++) {
for (var j = 0; j<k_num; j++) {
if (_root["osara"+i].hitTest(_root["kudamono"+j])) {
// その osara を フレーム1 へ
_root["osara"+i].gotoAndStop(1);
}
}
}
}
//
on (release) {
for (var i = 0; i<o_num; i++) {
//ドラッグ中のMCの真下にosara? があれば
if (_root["osara"+i].hitTest(_root._xmouse, _root._ymouse, true)) {
// ドラッグ中のMCを osara? に吸着
this._x = _root["osara"+i]._x;
this._y = _root["osara"+i]._y;
}
}
//
// 全ての osara を フレーム1 に進ませる
for (var i = 0; i<o_num; i++) {
_root["osara"+i].gotoAndStop(1);
}
// ドラッグ終了
stopDrag();
}
//
onClipEvent (mouseMove) {
updateAfterEvent();
}
------------------------------------
これは,
ActionScript が難しいのではなくて,
場合の数などを考える数学が難しいのだと思います。多分。
ActionScript では,
hitTest (当たり判定)くらいが難しいかもしれません。
「当たり判定について」
http://hakuhin.hp.infoseek.co.jp/main/as/hittest …
他は,VBA でも JavaScript でも何処にでも登場する for文 くらいですか。
http://isvalid.jp/actionscriptLab/ASlesson/actio …
==================
しかし,
上の通りだと果物MCに同じ事を書くのは労力とファイル容量の無駄ですし,
どこか1箇所訂正したいときでも全ての果物MCのスクリプトを直す必要も出てきて,
間違いも起こりうるので,
果物MCには "何も書かず",
果物MC「kudamonno0」~「kudamono4」が存在する _root のフレームに,
次のように書いても良いです。
--------------------------
// osara の枚数を登録
var o_num = 3;
// kudamono の個数を登録
var k_num = 5;
//
//
for (i=0; i<k_num; i++) {
_root["kudamono"+i].onPress = function() {
// ドラッグ開始(中央に吸着)
startDrag(this, true);
// 全ての osara を フレーム2 に進ませる
for (var i = 0; i<o_num; i++) {
_root["osara"+i].gotoAndStop(2);
}
// もし,osara が kudamono のどれかとヒットしていれば
for (var i = 0; i<o_num; i++) {
for (var j = 0; j<k_num; j++) {
if (_root["osara"+i].hitTest(_root["kudamono"+j])) {
// その osara を フレーム1 へ
_root["osara"+i].gotoAndStop(1);
}
}
}
};
}
//
for (i=0; i<k_num; i++) {
_root["kudamono"+i].onRelease = function() {
for (var i = 0; i<o_num; i++) {
//ドラッグ中のMCの真下にosara? があれば
if (_root["osara"+i].hitTest(_root._xmouse, _root._ymouse, true)) {
// ドラッグ中のMCを osara? に吸着
this._x = _root["osara"+i]._x;
this._y = _root["osara"+i]._y;
}
}
//
// 全ての osara を フレーム1 に進ませる
for (var i = 0; i<o_num; i++) {
_root["osara"+i].gotoAndStop(1);
}
// ドラッグ終了
stopDrag();
};
}
//
_root.onMouseMove = function() {
updateAfterEvent();
};
--------------------------
ますます for文が増えますが,
これで,
1つ1つの果物MCに同じ事を書き続ける必要はなくなります。
No.4
- 回答日時:
■基本内容
・一度お皿に置いたら移動できない
・お皿には1つしか果物を置くことができない
・空いてるお皿は果物を持ったときにわかるよう見た目を変える
■構成
□果物MC3個
・インスタンス名
fruit1 fruit2 fruit3
□お皿MC3枚
・インスタンス名
plate1 plate2 plate3
・AS
フレーム1 stop();(通常の状態)
フレーム2 (お皿におけるという意を表した状態)
//
全て_root上に配置
_root上のフレームに以下を記述
//
AllCtrl("START");
function STDrag() {
startDrag(this, true);
AllCtrl("PRESS");
}
function ENDDrag() {
stopDrag();
AllCtrl("END", this);
}
function AllCtrl(VAL, _fr) {
for (var i = 1; i<=3; i++) {
switch (VAL) {
case "START" :
this["fruit"+i].onPress = STDrag;
this["fruit"+i].onRelease = ENDDrag;
break;
case "PRESS" :
if (!this["plate"+i].exit) {
this["plate"+i].gotoAndStop(2);
}
break;
case "END" :
var _pl = this["plate"+i];
if (_fr.hitTest(_pl) && !_pl.exit) {
_pl.exit = true;
_fr._x = _pl._x;
_fr._y = _pl._y;
delete _fr.onPress && delete _fr.onRelease;
}
_pl.gotoAndStop(1);
break;
}
}
}
//
質問者さんが望んでるのはこんな感じですかね
![](http://oshiete.xgoo.jp/images/v2/common/profile/M/noimageicon_setting_10.png?e8efa67)
No.2
- 回答日時:
#1です。
すみません。
else文なんか使った所が間違いでした,
#1のスクリプトのみ次のように訂正します。
----------------------------------------
on (press) {
// ドラッグ開始(中央に吸着)
startDrag("", true);
}
on (release) {
// 全ての osara のフレームを 1 でストップ
for (var j = 0; j<=2; j++) {
_root["osara"+j].gotoAndStop(1);
}
for (var i = 0; i<=2; i++) {
//ドラッグ中のMCの真下にosara? があれば
if (_root["osara"+i].hitTest(_root._xmouse, _root._ymouse, true)) {
// ドラッグ中のMCを osara? に吸着
this._x = _root["osara"+i]._x;
this._y = _root["osara"+i]._y;
// 全ての osara のフレームを 2 に進めて
for (var j = 0; j<=2; j++) {
_root["osara"+j].gotoAndStop(2);
}
// この吸着した osara のみフレーム1 でストップ
_root["osara"+i].gotoAndStop(1);
}
}
// ドラッグ終了
stopDrag();
}
onClipEvent (mouseMove) {
updateAfterEvent(mouse);
}
----------------------------------------
この回答への補足
素早い回答ありがとうございます。
まだまだ、for文を自分で書けといわれても戸惑ってしまう状態で
まだまだ勉強が足りないと痛感しております。
二個目の果物をお皿に置いたとき一個目の果物を置いた皿の色が変わってしまうんです。
この点が解消できればこの仕様でもいいのですが、
説明不足で思っていた動作と違う感じなのですが、回答して頂いているのに申し訳ないのですが、お時間ありましたらご回答頂けるとうれしいです。
一個目の果物をプレスした時点で、3皿にドラッグ可能である事がわかるように色を変えて、まず一個の果物を皿におきます。
二個目の果物をプレスした時、ほかの2皿にドラッグ可能である事がわかるように色を変えたいです。
よろしくお願いいたします。
![](http://oshiete.xgoo.jp/images/v2/common/profile/M/noimageicon_setting_10.png?e8efa67)
No.1
- 回答日時:
皿の色を変える方法も色々ありますが,
私は色を変えるというのに,あまり着色スクリプトを使用しません。
1つのムービークリップ内のフレーム1に
普通の状態のお皿を用意しておいて stop(); させておき,
フレーム2 に光ったお皿などを描いておいて,
色を変えたいとき,フレーム2 に進ませます。
その方が自由自在,色々な色や形のお皿に変えられます。
また,色や形を変えられるだけでなく,
フレーム2 にピカピカ光が点滅するようなMCを置いておくこともできます。
というわけで,
お皿ムービークリップのフレームは 2 フレームにしておいて,
フレーム1 で stop(); をかけておきます。
そして,3枚あるお皿には,それぞれ,
「osara0」,「osara1」,「osara2」 というインスタンス名を付けておきます。
=====================
次にドラッグ&ドロップする果物のスクリプトですが,
ドラッグ&ドロップ&吸着にも何通りかの方法があります。
これまた私の好きな方法で,
ターゲットのお皿MCと果物MCとマウスが重なっていたら吸着というパターンのスクリプトで考えてみました。それが次の果物MCのスクリプトです。
----------------------------------------
on (press) {
// ドラッグ開始(中央に吸着)
startDrag("", true);
}
on (release) {
for (var i = 0; i<=2; i++) {
//ドラッグ中のMCの真下にosara? があれば
if (_root["osara"+i].hitTest(_root._xmouse, _root._ymouse, true)) {
// ドラッグ中のMCを osara? に吸着
this._x = _root["osara"+i]._x;
this._y = _root["osara"+i]._y;
// 全ての osara のフレームを 2 に進めて
for (var j = 0; j<=2; j++) {
_root["osara"+j].gotoAndStop(2);
}
// この吸着した osara のみフレーム1 でストップ
_root["osara"+i].gotoAndStop(1);
} else {
// 全ての osara のフレームを 1 でストップ
for (var j = 0; j<=2; j++) {
_root["osara"+j].gotoAndStop(1);
}
}
}
// ドラッグ終了
stopDrag();
}
onClipEvent (mouseMove) {
updateAfterEvent(mouse);
}
----------------------------------------
こんな感じでいかがでしょうか。
果物は全て同じスクリプトで行けます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
フラッシュゲームアーカイブ2
-
キャラクター設定について
-
potplayerについて質問です
-
ゲオでカードを作るのは何歳か...
-
FLASHでゲームを作っていた人は...
-
この曲はなんでしょう?
-
laptop go2からの買い替え、lap...
-
スクリップト
-
私のコンピューター上のファイ...
-
arduino プログラムについて
-
chrome flash
-
FLASHの再生はできないのでしょ...
-
ウェブサイトで Flash が事実上...
-
Flashコンテンツを使ったWebサイト
-
Flash Playerのサポートが終了
-
Form内のselectを連動させるに...
-
Flashをブロックしないで
-
ダウンロードしたデジブックはa...
-
ad or script について
-
Flashplayerの運用について
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
360度パノラマ写真をループでき...
-
MovieClip間で、変数の受け渡し。
-
(AS3) MC内から別のところにあ...
-
FLASHフォトアルバムの画像を外...
-
多分探索木の高さを測定する関...
-
MovieClip(root)について
-
[actionscript] XMLを使ってス...
-
Flash professional CS5を使っ...
-
attachMovieについて(長文)
-
AS2でカスタムカーサーを使って...
-
photoshopで書いた四角の枠の中...
-
テキストボックスの中身をリセ...
-
VBAで改行の入ったデータの正規...
-
python ボタンを押すと複数の関...
-
別のアプリケーションのテキス...
-
【VB.NET】別Formのボタンが押...
-
VBScriptでMsgBoxのYesNoボック...
-
else if文の順序を変えることに...
-
変数に256文字以上のテキストを...
-
DataTableの件数を取得したい
おすすめ情報