こちらでは大変お世話になっております。
前回に引き続き移動のスクリプトを教えていただきたいのです。
ムービークリップをクリックすると、振り子のように1点は固定をしたまま右へ40度移動させる。次にクリックするともとの位置に戻る、次にクリックするとまた右へ40度、次はもとに戻る…。
というような、2つの地点を行き来するだけの動きにしたいのです。
on (release) {
this._rotation -= 40;
}
ムービークリップに上のような記述をすると、1回目のクリックは良いのですが、2回目のクリックでそのまま40度ずつ回り続けてしまいます。クリックするたびに行って戻るだけの繰り返しができるアクションスクリプトを教えていただければと思います。
超初心者で勉強しはじめたところです。
どうかよろしくお願い致します。
アクションスクリプト2.0 FLASH CS5
No.2ベストアンサー
- 回答日時:
どうすべきかはやはり状況や方針によって変わりますよ。
これも Flash 5 (実際は要MX以上)的な
MC(ムービークリップ)自体に書く形のスクリプトでいくつか書いてみます。
とりあえずはシンプルに。
---1つめ--------------------
//このMCが表示されたときに実行
onClipEvent (load) {
//回転角度を設定
rotate_deg = 40;
}
//このMCがクリックされたときに実行
on (release) {
//回転角度の正負を逆にする
rotate_deg = -rotate_deg;
//その角度になるようにこのMCを回転
this._rotation = rotate_deg;
}
---------------------------
上のスクリプトだと
回転が「MCを作成したとき」とか「ライブラリからステージ上に出してすぐ」の状態を0度とします。
そうではなくて
その状態から手動などで回転させている場合(例:【図】↓)は次のようにすべきかもしれません。
(手動などで回転させていなくても使えます。)
---2つめ--------------------
//このMCが表示されたときに実行
onClipEvent (load) {
//回転角度を設定
rotate_deg = 40;
//このMCが表示されたときの角度を保存
start_deg = this._rotation;
}
//このMCがクリックされたときに実行
on (release) {
//回転角度の正負を逆にする
rotate_deg = -rotate_deg;
//その角度になるようにこのMCを回転
this._rotation = start_deg + rotate_deg;
}
---------------------------
次のようにクリックされたカウントをとって
クリック回数によって回転を変えても良いかもしれません。
---3つめ--------------------
//このMCが表示されたときに実行
onClipEvent (load) {
//回転角度を設定
rotate_deg = 40;
//クリックカウント用変数を用意
click_cnt = 0;
}
//このMCがクリックされたときに実行
on (release) {
//クリックカウントの値を1加算
click_cnt++;
//回転角度の正負を逆にする
rotate_deg = -rotate_deg;
//
//もしクリックカウントが1であれば
if (click_cnt == 1) {
//その回転角度の分だけ回転
this._rotation += rotate_deg;
//もしクリックカウントが1以外であれば
} else {
//その回転角度の2倍分回転
this._rotation += 2*rotate_deg;
}
}
---------------------------
上の「3つめ」を変えて
クリックカウントが偶数の場合と奇数の場合で回転を分けても良いかもしれません。
---4つめ--------------------
//このMCが表示されたときに実行
onClipEvent (load) {
//回転角度を設定
rotate_deg = 40;
//クリックカウント用変数を用意
click_cnt = 0;
}
//このMCがクリックされたときに実行
on (release) {
//クリックカウントの値を1加算
click_cnt++;
//
//もしクリックカウントが偶数であれば
//(もしクリックカウントを2で割った余りが0であれば)
if (click_cnt%2 == 0) {
//設定回転角度になるように回転
this._rotation = rotate_deg;
//もしクリックカウントが偶数以外(奇数)であれば
//(もしクリックカウントを2で割った余りが0でなければ)
} else {
//設定回転角度の反対向きになるように回転
this._rotation = -rotate_deg;
}
}
---------------------------
また「その2」の変形で
on(release){} に全て入れてしまうことも可能です。
---5つめ--------------------
//このMCがクリックされたときに実行
on (release) {
//もしクリックフラグ click_flg が未定義であれば
if (click_flg == undefined) {
//回転角度を設定
rotate_deg = 40;
//このMCが最初にクリックされたときの角度を保存
start_deg = this._rotation;
//click_flg を true にする
click_flg = true;
}
//回転角度の正負を逆にする
rotate_deg = -rotate_deg;
//その角度になるようにこのMCを回転
this._rotation = start_deg + rotate_deg;
}
---------------------------
数式で演算できないようなもっと複雑な回転をする場合には
次のようにあらかじめ回転角度データを用意しておいても良いかもしれません。
---6つめ--------------------
//このMCが表示されたときに実行
onClipEvent (load) {
//回転角度データ(配列)を設定
degree_arr = new Array(-40, 80, -80);
//クリックカウント用変数を用意
click_cnt = 0;
}
//このMCがクリックされたときに実行
on (release) {
//もしクリックカウントがデータ数未満であれば
if (click_cnt<degree_arr.length) {
//クリックカウントの値を1加算
click_cnt++;
//それ以外は
} else {
//クリックカウントの値を2に戻す
click_cnt = 2;
}
//用意したデータの角度分このMCを回転
this._rotation += degree_arr[click_cnt-1];
}
---------------------------
↑この動作例自体は単純です。
しかしこの考え方を使ってそれを発展させると,
例えば
最初のクリックで -89度 回転
次のクリックで 27度 回転
さらに次のクリックで 96度 回転
さらに次のクリックで -77度 回転
さらに次のクリックで … …
というような,
決められている不規則な動作(ランダムな動作ではない)にも対応させることができます。
当たり前ですが,私は(誰しも),
まず 動作イメージ(動作順序) を考えてからスクリプトのコードを書きます。
少なくともその 動作イメージ(動作順序) の数だけ(実際はその数倍以上)スクリプトは存在します。
ですから,
今はどういう状態であるのかという「状況の把握」と,
それから何をどうするのかという「具体的な方針」がまず必要だろうと思います。
再度教えて下さり本当にありがとうございます。
すべて試してみて、同じ動作でもこれほどいろいろな考え方でスクリプトが書けるのかと驚きです。
途中に説明コメントも入れていただいたので、スクリプトの意味が勉強できます。
頂いた回答をプリントして手元に置いておきます。
とくに6つめ、応用に使えそうですばらしいですね。
これほど自由自在にスクリプトを書けるなんて尊敬です。
お礼にお伺いしたいぐらいです。
何度もつまずき、もうあきらめようかと思っていたところでしたので、感激・感動はもちろんのこと、超初心者なりにもFLASHが楽しくなりました。
ご親切に本当にありがとうございました。
No.1
- 回答日時:
0→40→0→-40→0… と変化させたいわけですから、現在0であったときに、+40するか-40するかの区別が必要になります。
つまり単純に現在の数値から計算はできません。
そこで、いくつか方法が考えられます。
方法1)
状態変数を持ち、何番目はこの位置、というのを定義する。
_global.count +=1; if (_global.count>3) {_global.count = 0;}
switch (_global.count) {
case 0: this._rotation = 0; break;
case 1: this._rotation = 40; break;
case 2: this._rotation = 0; break;
case 3: this._rotation = -40; break;
}
方法2)
どちらに動いているか記憶し、行き過ぎたら移動方向を反転する。
※_global.moving = 40 とか初期化しておく。
this._rotation += _global.moving;
if (this._rotation <= -40 or 40 <= this._rotation) {
_global.moving = - _global.moving;
}
方法3)
三角関数を使い、その角度を増していく。
_global.angle += Math.PI / 2;
this._rotation = Math.sin(_global.angle) * 40;
どの場合でも、現在の状態を保持するグローバル変数を1つ、作っておくわけです。
Action Scriptを良く知らずに書いているので間違ってるかもしれませんが、こんな感じでどうでしょう。
また、もっと細かく動かすようにするには、それぞれ方法が違ってきます。考えてみてください。
さっそく回答をいただきどうもありがとうございます。
多くの方法を考えていただきとても参考になりました。
すべて、on (release) {}の中に入れて試してみたのですが、方法1と3はクリックしても動きませんでした。方法2は動くのですが、40度ずつ回転を続けてしまい最初と同じ結果となってしまいます。
もう少し勉強してみます。
ご丁寧にありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Windows 8 動画の再生とタイトルの変更方法を教えてください。 3 2022/08/01 14:51
- C言語・C++・C# 必ずyou bet と表示されます 2 2023/07/28 22:19
- Excel(エクセル) 余計なお世話的な「入力規則」?対策は? 2 2023/01/14 12:39
- バックアップ Windows11パソコンのデータを数クリックで完全に引っ越しするにはどうすれば良いでしょうか? 5 2022/10/11 14:08
- Windows 10 覚えのないアイコンが釘付けされた 3 2022/04/26 19:47
- Visual Basic(VBA) エクセルマクロでアニメを作る方法を教えてください。 1 2023/02/07 14:27
- Excel(エクセル) Excelで図の書式設定を移動したい 1 2022/10/07 15:32
- PowerPoint(パワーポイント) パワーポイントのアニメーションについて 4 2023/06/14 16:25
- マウス・キーボード マウスのないパソコン 9 2022/03/30 10:53
- 画像編集・動画編集・音楽編集 Google Earth Pro 高速道路上空を一定の速度で飛ぶツアー動画の作り方は?? 1 2022/06/01 15:10
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルの塗りつぶし
-
[AVIUTL]拡張編集にて、テキス...
-
紙を焼いた後のような加工の方法
-
Illustrator楕円で塗り透明、線...
-
テキスト入力が180度反転してし...
-
フォトショップで青い線が出て...
-
pdfで、図形を回転する
-
Acrobatで作成した四角の前面・...
-
AUTOCAD図面に座標設定したい
-
資料としていただいたイラスト...
-
「U」のような図形を作成する方法
-
adobe PDFに変換すると.logファ...
-
パソコンに行書体がありません...
-
Illustratorでグループ化が解除...
-
Illustrator ペンツールのポイ...
-
【エクセル】シート内の表をUse...
-
シート追加をした時のフォント...
-
indesignでのフォント一括変換
-
アスタリスクににているマーク...
-
adobe acrobatについて
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルの塗りつぶし
-
テキスト入力が180度反転してし...
-
illustratorで横文字入力出来な...
-
fireworksで画像を丸く切り抜き
-
エクセル:チェックボックスで...
-
JWCADの変形した楕円の描き方
-
[AVIUTL]拡張編集にて、テキス...
-
Illustrator楕円で塗り透明、線...
-
エクセルのグラフ(散布図)で...
-
PhotoShopで曲がったスキャン画...
-
illustratorでペンタブの筆圧設...
-
コントロールパネルの塗りの設...
-
楕円にフィッティングする画像...
-
写真を丸く保存したいです
-
紙を焼いた後のような加工の方法
-
メタセコイアで楕円柱の書き方
-
ステッピングモーターを簡単に...
-
フォトショップで青い線が出て...
-
パソコンに行書体がありません...
-
adobe PDFに変換すると.logファ...
おすすめ情報