お世話になります。
下記のプログラムは3Dのぐるぐる回るプログラムなのですが、
onClipEvent (load) {
degree = 0;
r = 100;
centerx = 150;
centery = 100;
}
onClipEvent (enterFrame) {
radian = Math.PI/180*degree;
this._x = centerx+r*Math.cos(radian);
this._y = centery+r*Math.sin(radian)/2;
this._xscale = this._yscale=this._alpha=this._y;
degree += 5;
}
--------------------------------------------------------------------
それで、ここからなのですが、
onClipEvent (enterFrame) {
--省略--
degree += 5;
↓
のところをまず削除して、新たにボタンを作って、そのボタンを押すと、
押すたびにある一定の角度分だけ円運動するようにしたいのですが、どうしたらいいんでしょうか?
単純にボタンを作って、
そこに
on(release) {
degree +=5;
}
と書いてもまともに動きません。
初心者なものなので、よろしくお願いします。
それと、このプログラムはムービークリップに記載されているのですが、出来たらルート画面のレイヤーにactionを作って、そこにスクリプトをまとめて書きたいと思うんですが、どうしたらいいんでしょうか?ムービークリップにインスタント名をつけて、上記のプログラムの前に、
ムービークリップインスタント名.onClipEvent (load) {
--省略--
}
ムービークリップインスタント名.onClipEvent (enterFrame) {
--省略--
}
としたら、フィールド名がありませんとエラーが出てしまいます。
長くなってしまいましたが、わかりずらい説明かとは思うのですが、重ねてよろしくお願いします。
A 回答 (3件)
- 最新から表示
- 回答順に表示
No.3
- 回答日時:
72°ずつ回転させると停止位置がずれるのは
円運動させる関数EnMove内で
degree += 5;
としているからです。
フレーム毎に5°ずつ動かしているのでぴったり72°になることはありません。
なので72を割り切ることができる数字にする必要があります。
あわせてその下のnowdeg += 5の部分も直しといてください。
5個のメニューを動かしたいということでちょっとAS書いてみました。
ステージ上にmenu1_mc、menu2_mc、… menu5_mcを配置します。
my_btnはそのままです。
//初期位置変数設定
r = 100;
centerx = 150;
centery = 100;
const = 72;
//
//初期位置設定
for (var i = 1; i<=5; i++) {
var mc = _root["menu"+i+"_mc"];
//move_bln,degreeはそれぞれMC毎に設定します。
mc.move_bln = false;
mc.degree = 90+const*i;
radian = Math.PI/180*mc.degree;
mc._x = centerx+r*Math.cos(radian);
mc._y = centery+r*Math.sin(radian)/2;
mc._xscale = mc._yscale=mc._alpha=mc._y;
}
//ボタンを押したとき-----------------------------------------
_root.my_btn.onRelease = function() {
for (var i = 1; i<=5; i++) {
var mc = _root["menu"+i+"_mc"];
if (mc.move_bln) {
//trueの時 終了
return false;
} else {
mc.move_bln = true;
}
//動かした角度を初期化
mc.nowdeg = 0;
//円運動させる関数を呼ぶ
mc.onEnterFrame = EnMove;
}
};
//円運動させる関数--------------------------------------------
function EnMove() {
radian = Math.PI/180*this.degree;
this._x = centerx+r*Math.cos(radian);
this._y = centery+r*Math.sin(radian)/2;
this._xscale = this._yscale=this._alpha=this._y;
this.degree += 9;
//動かした角度
this.nowdeg += 9;
//動かした角度が一定値を上回った時
if (this.nowdeg>=_root.const) {
//円運動関数を停止
this.onEnterFrame = null;
//円運動中ではなくなるのでfalseにする
this.move_bln = false;
//角度degreeが90°位置にあるものが手前にあるMC
if (this.degree%360 == 90) {
trace(this);
}
}
}
多少変なトコもありますが参考にでも。
No.2
- 回答日時:
>1週目と2週目で軌道が微妙に違ってくる
確認してみましたが軌道は同じ様です(同じところを通ってると思います。)
my_mcの止まる位置が違うということでしょうか?
#1のASではボタンを押したときに動く一定の角度constの値は50となっていますが
一周は360°なのでこれだと一周するごとにずれてきます。
30、60°のようにキリのいい値にすれば毎回同じ位置に止まります。なので
const = 60; としてみてください。
>一番手前に来た時、リンク出来るようにしたい
現在は0°からスタートしているので位置的には右から動きだしています。
これを90°位置からスタートさせれば一番手前で止まるようになると思います。
degree = 90;
です。
この回答への補足
ありがとうございます。
補足なんですけど、my_mcの止まる位置が違うということでしょうか?そうです、確かに30、60といった数字は同じ一難ですけど、72だと違うんですよね??72なら、5回回れば360になるから軌道は同じはずだと思うんですけど、どうして違うんでしょうかね?
一番手前に来た時、リンク出来るようにしたいは、本当は5個のmy_mcを用意して、クルクル回るように出来て、それで一番前のものがリンク出来るようにして、指定されたリンクに飛ばすようにしたいと思っているんですけど。
現状だと難しいですかね?
No.1
- 回答日時:
ムービークリップのインスタンス名を my_mc
ボタンのインスタンス名を my_btn
とします。以下のASをフレームに記述します。
記述するフレーム位置はmy_mc、my_btnがあるフレーム位置と同じか
それ以降でなければなりません。
//値の初期化------------------------------------------------
r = 100;
centerx = 150;
centery = 100;
degree = 0
//ボタンを押したときに動く一定の角度
const = 50;
//円運動中かどうかを判断するフラグ
//true - 円運動中false - 円運動していない
move_bln = false
//ボタンを押したとき-----------------------------------------
_root.my_btn.onRelease = function() {
if (move_bln) {
//trueの時 終了
return false;
} else {
move_bln = true
}
//動かした角度を初期化
nowdeg = 0;
//円運動させる関数を呼ぶ
_root.my_mc.onEnterFrame = EnMove;
};
//円運動させる関数--------------------------------------------
function EnMove() {
radian = Math.PI/180*degree;
my_mc._x = centerx+r*Math.cos(radian);
my_mc._y = centery+r*Math.sin(radian)/2;
my_mc._xscale = my_mc._yscale=my_mc._alpha=my_mc._y;
degree += 5;
//動かした角度
nowdeg += 5;
//動かした角度が一定値を上回った時
if (nowdeg>=const) {
//円運動関数を停止
my_mc.onEnterFrame = null;
//円運動中ではなくなるのでfalseにする
move_bln = false
}
}
この回答への補足
遅くなりました。
丁寧に書いていただきありがとうございます。
自分の環境下で試してみました。
一つ思うんですけど、ボタンを押して、一定角度を回転させたとき、1週目と2週目で軌道が微妙に違ってくるのはどうしてなんでしょうか?
最終的には、一番手前に来た時、リンク出来るようにしたいと思っているんですけど。
いろいろ試してみたのですが、どうもうまくいきません。
どうしたらいいんでしょうか?
お手数ですが、ご教授いただけないでしょうか?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- 英語 "this day"が当日か今日を表すのかの使い分け方等について 5 2023/08/08 14:29
- YouTube youtubeからの著作権メールについて 2 2023/02/14 16:12
- その他(趣味・アウトドア・車) Arudino nanoが正常に動作しない原因 1 2022/10/30 18:29
- Windows 7 更新プログラムを入れたら操作出来なくなりました(泣) 1 2023/02/26 11:04
- 英語 Statistically significant differences (p < 0.05), 5 2022/05/03 01:09
- 英語 「this is the/my first time~」の文法上の制約について 1 2023/04/06 09:48
- プリンタ・スキャナー キャノンmp490プリンター【エラー番号5400】で【プリンタートラブルが発生しました。電源を入れ直 2 2023/07/24 17:45
- Word(ワード) Wordのデータが毎回破損してしまう 1 2022/08/24 11:30
- 電子レンジ・オーブン・トースター 電子レンジの非科学的(カルト的)動作の原因について考えられる理由を知りたい 8 2022/11/29 14:47
- 英語 More than 数字 の、接続詞than 後の省略について 2 2022/07/15 15:35
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VBAで改行の入ったデータの正規...
-
VBAユーザーホームテキストボッ...
-
テキストファイルから読み込ん...
-
エンドロール風テキストの表示...
-
photoshopで書いた四角の枠の中...
-
VBScriptでMsgBoxのYesNoボック...
-
テキストボックスの中身をリセ...
-
YOASOBI
-
【Photoshop】レイヤー効果の境...
-
別のアプリケーションのテキス...
-
RPG(AS400)の本、サイトってあ...
-
PythonのTkinterイベントについて
-
五芒星は、悪魔崇拝とどういう...
-
プログラミング、アーキテクチ...
-
PYTHONのtkinterについて
-
×ボタンを無効化したいのですが...
-
キープレスとボタンクリックの...
-
UWSCのBTN関数について。
-
パーセントで配置したフラッシ...
-
webページ上、TABフォーカス出...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VBAで改行の入ったデータの正規...
-
VBAユーザーホームテキストボッ...
-
外部SWFファイルを再生バーでコ...
-
縦横比率のを変えずに画像のサ...
-
テキストファイルから読み込ん...
-
自由線とレイヤー画面との位置関係
-
ピクチャーコントロールのデバ...
-
四角形の端っこをドラッグした...
-
AS3でうまく動作しません
-
看護師です。体温表のマクロを...
-
AS3.0 でフェードイン、
-
ステージの背景画像のみ拡大縮...
-
AS3 mc0~5をまとめて処理する
-
AS3.0でマウスボタンの状態を調...
-
AS3.0 設置した画像を次のラベ...
-
外部より取り込んだ.swfのサイ...
-
spriteで直線を引いたときに線...
-
xmlから作ったサムネールを移動...
-
Flash マウスの位置で速さの変...
-
flash ブラウザのサイズに合わ...
おすすめ情報