
No.2ベストアンサー
- 回答日時:
#1です。
> やってみましたが、動作しないのです。
と書かれましても
どこで何がどう動作しないのかがわかりません。
例えば
「エラーが出て全く動作しない(パブリッシュも不可)」
「エラーは出ないがmc0~15がランダムに配置されない」
「mc0~15はランダムに配置されるがボタンで並び変わらない」
などなど様々なことが考えられます。
その状況を見ていない第三者にとっては
状況を見ている人よりももっと何のことかわからないのですよ。
一応私の方は
ActionScript 2.0 設定であれば
Flash Player 6 以上 SWF パブリッシュ設定 で動作確認済みです。
どこで詰まっているのかさっぱりわかりませんので
スクリプトを次のように書き替えて(★部分の trace を追加しただけ),
「制御」→「ムービープレビュー」で詰まっている部分を確認してみてください。
//----------------------------------------------------
//動くスピードの設定
var spd:Number = 12/100;
//mc0~15 の最初の座標を一時的に記録する配列
var tempPosArr:Array = new Array();
//変数 i を 0~15 まで 1 ずつ加算しながらループ
for (var i:Number = 0; i<=15; i++) {
//mc0~15 の最初の座標(「正しい座標」)を各MC内の変数に記録
this["mc"+i].start_x = this["mc"+i]._x;
this["mc"+i].start_y = this["mc"+i]._y;
//mc0~15 の最初の座標を一時的に記録する配列に記録
tempPosArr[i] = [this["mc"+i]._x, this["mc"+i]._y];
trace("★↓ mc" + i + ".star_x に値が入っているか");
trace(this["mc"+i].start_x);
trace("★↓ tempPosArr[" + i + "] に値が入っているか");
trace(tempPosArr[i]);
}
//mc0~15 を配置するランダムな座標の配列
var randPosArr:Array = new Array();
//テンポラリ配列からランダムな要素を抜き取りランダムな座標の配列に代入
for (var i:Number = 15; i>=0; i--) {
randPosArr.push(tempPosArr.splice(Math.floor(Math.random()*(i+1)), 1)[0]);
}
trace("★↓ randPosArr に値が入っているか");
trace(randPosArr);
//mc0~15 をランダムな座標に配置
for (i=0; i<=15; i++) {
this["mc"+i]._x = randPosArr[i][0];
this["mc"+i]._y = randPosArr[i][1];
trace("★↓ mc" + i + " の座標はランダムになっているか");
trace(this["mc"+i]._x + "," + this["mc"+i]._y);
}
//ボタンクリック時の動作
btn.onRelease = function():Void {
trace("★↓ ボタンは動作しているか");
trace("ボタンがクリックされました");
//変数 i を 0~15 まで 1 ずつ加算しながらループ
for (var i:Number = 0; i<=15; i++) {
//mc0~mc15に毎フレーム実行する動作を定義
this._parent["mc"+i].onEnterFrame = function():Void {
//「正しい座標」に向けてspdの割合ずつ移動
this._x += (this.start_x-this._x)*spd;
this._y += (this.start_y-this._y)*spd;
};
}
};
//----------------------------------------------------
それと
他のスクリプトや他のインスタンスがじゃまをしているということはないでしょうね?
例えば,
同じインスタンス名を付けた別物があるとか
他の onEnterFrame が重なって動作しているとか。
「制御」→「ムービープレビュー」で
下の【図】↓のような感じになれば良いのです。
この↓状態から btn をクリックすれば「正しい位置」に戻ります。

>その状況を見ていない第三者にとっては
>状況を見ている人よりももっと何のことかわからないのですよ。
申し訳ありませんでした。
出力では下記で止まります。もちろん、それはボタンを押していませんからそのように
なりますね。
★↓ mc15 の座標はランダムになっているか
300,300
次に、ボタンを押しても出力しませんでした。ということはボタンに何かと思い調べました
ところ、インスタンス名が大文字になっていました。
修正したところ、動作しました。
★↓ ボタンは動作しているか
ボタンがクリックされました
早朝からの回答を頂きましてありがとうございます。
No.1
- 回答日時:
念のためですが
「ロールオーバーで下画像を表示させる」
http://oshiete.goo.ne.jp/qa/7020788.html や
http://oshiete.goo.ne.jp/qa/7020788.html などなど
の続きというわけですから,
Flash CS3 の ActionScript 2.0 ですね。
まず
> 正しい座標位置へゆっくり移動
この具体的方法(トランジション)を書かれていませんから
これは勝手にこちらで用意するものとします。
『「最初にmc0~mc15を配置した座標」を
「正しい座標」として記録しておいてから
ActionScript で mc0~mc15 ランダムな座標に配置し,
その後,ボタンをクリックすると
「正しい座標」=「最初にmc0~mc15を配置した座標」に戻す。』
という方法はいかがでしょうか。
これだと
ステージのサイズを変えた場合や
ムービークリップを配置したい場所を変えたい場合でも
スクリプトを触ることなく自由に Flash を作ることが可能になります。
ステージ上には mc0~mc15 のムービークリップを
いわゆる「正しい位置」(任意の「正しい位置」)に配置しておきます。
その上のレイヤーにでもボタンを作成して
そのボタンには「btn」というインスタンス名を付けるものとしておきます。
※【図】↓参照
この状態で フレームに書くスクリプト例です。
//---------------------------------------------------
//動くスピードの設定
var spd:Number = 12/100;
//mc0~15 の最初の座標を一時的に記録する配列
var tempPosArr:Array = new Array();
//変数 i を 0~15 まで 1 ずつ加算しながらループ
for (var i:Number = 0; i<=15; i++) {
//mc0~15 の最初の座標(「正しい座標」)を各MC内の変数に記録
this["mc"+i].start_x = this["mc"+i]._x;
this["mc"+i].start_y = this["mc"+i]._y;
//mc0~15 の最初の座標を一時的に記録する配列に記録
tempPosArr[i] = [this["mc"+i]._x, this["mc"+i]._y];
}
//mc0~15 を配置するランダムな座標の配列
var randPosArr:Array = new Array();
//テンポラリ配列からランダムな要素を抜き取りランダムな座標の配列に代入
for (var i:Number = 15; i>=0; i--) {
randPosArr.push(tempPosArr.splice(Math.floor(Math.random()*(i+1)), 1)[0]);
}
//mc0~15 をランダムな座標に配置
for (i=0; i<=15; i++) {
this["mc"+i]._x = randPosArr[i][0];
this["mc"+i]._y = randPosArr[i][1];
}
//ボタンクリック時の動作
//「mc0」 ~ 「mc15」ロールオーバー時の動作定義
btn.onRelease = function():Void {
//変数 i を 0~15 まで 1 ずつ加算しながらループ
for (var i:Number = 0; i<=15; i++) {
//mc0~mc15に毎フレーム実行する動作を定義
this._parent["mc"+i].onEnterFrame = function():Void {
//「正しい座標」に向けてspdの割合ずつ移動
this._x += (this.start_x-this._x)*spd;
this._y += (this.start_y-this._y)*spd;
};
}
};
//---------------------------------------------------
ランダムシャッフルの方法ですが
このスクリプトで書いたもの以外に
次のような考え方(方法)などなどもあります。
「配列を偏りなくランダムに並替える」
http://fumiononaka.com/TechNotes/Flash/FN0212003 …

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
potplayerについて質問です
-
スクリップト
-
arduino プログラムについて
-
ダウンロードしたデジブックはa...
-
uwscでExcelに自動記入
-
パソコンのリカバリーについて
-
アメリカから買ったダウンロー...
-
swfファイルのfc2ブログへの表...
-
FLASHでゲームを作っていた人は...
-
この曲はなんでしょう?
-
laptop go2からの買い替え、lap...
-
私のコンピューター上のファイ...
-
chrome flash
-
FLASHの再生はできないのでしょ...
-
フラッシュゲームアーカイブ2
-
ウェブサイトで Flash が事実上...
-
Flashコンテンツを使ったWebサイト
-
Flash Playerのサポートが終了
-
Form内のselectを連動させるに...
-
Flashをブロックしないで
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
特定のムービークリップの上で...
-
[開発形態]UIレイアウトまでデ...
-
変数に代入
-
分布図みたいなもの作れますか?
-
Tweenを使って元の位置に戻したい
-
外部テキストファイルから座標...
-
ムービークリップの初期座標
-
Flashウィンドウ内におけるマウ...
-
Flashパブリッシュエラー
-
MOUSE_MOVE マウスの動きと同...
-
外部swfを読み込んだときのずれ
-
斜めに移動
-
位置あわせ
-
photoshopで書いた四角の枠の中...
-
VBAで改行の入ったデータの正規...
-
テキストボックスの中身をリセ...
-
【ExcelVBA】ファイル名をセル...
-
else if文の順序を変えることに...
-
変数に256文字以上のテキストを...
-
四乗根を英語で言うと・・・
おすすめ情報