![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?e8efa67b6d)
こんにちは
windows flash8を使用しています。
正円のMC(circle)をホイールマウスを1回まわすごとに
18度回るようにしたいとおもっています。また、何周でもできるようにしたいです。移動の際は、減速しながら移動させようと思います。
以下のスクリプトで大体狙った動きを表現することはできたのですが、
--------------------------------------
my_ls = new Object(); //リスナーオブジェクト
n=0; //ホイールの回ったメモリ数。初期値は0
my_ls.onMouseWheel = function(delta){
n += delta; //deltaはホイール1メモリで3(-3)です。
}
_root.circle.onEnterFrame = function(){
R_pos = 6*n
R_dif = Math.round((R_pos - this._rotation)*0.5);
this._rotation += R_dif;
if(Math.abs(this._rotation - R_pos)<2){
this._rotation =R_pos;
}
}
_root.circle.onRollOver = function(){
Mouse.addListener(my_ls);
}
_root.circle.onRollOut = function(){
Mouse.removeListener(my_ls);
}
-------------------------------------
なぜか、回転が半分(180度)を超えるとくるくると回り続けてとまらなくなります。
まだactionscript初心者で調べながらやっているんですが、
どうしても原因がわかりません(><)
どうかよろしくお願いします!
![](http://oshiete.xgoo.jp/images/v2/common/profile/M/noimageicon_setting_10.png?e8efa67b6d)
No.1ベストアンサー
- 回答日時:
なるほど,180度を超えるとクルクル回り出しますね。
原因はこれです↓。
Flashドキュメンテーション
_rotation (MovieClip._rotation プロパティ)
http://livedocs.macromedia.com/flash/8_jp/main/0 …
--- Fumio Nonaka 氏 の訂正を含めて引用 ---
> 時計回りに回転させる場合は 0 ~ 180 の値を指定します。
> 反時計回りに回転させる場合は 0 ~ -180 の値を指定します。
> この範囲を超える値は、360の倍数を加算または減算され、
> 範囲内に収まる値が取得されます。
180度までは良いんですけど,
例えば181度になったとすると(実際にはなりませんが),
181度 = -179度 となるわけです。
すると,
書かれているスクリプトだと onEnterFrame で逆回転に 1周し始めようとしだすのです。
クルクル回り出すのではなくて,逆方向に暴走しだすのです。
180度や-180度を超えると再計算されるのですから,
this._rotation で自分自身を基準にすると,ダメなのです。
this._rotation の変わりに,変数を作り,
その変数を加算減算して,その結果を,
this._rotation に持っていけば,再計算されても問題はなくなります。
----------------------------------------
my_ls = new Object(); //リスナーオブジェクト
n=0; //ホイールの回ったメモリ数。初期値は0
// ↓★この変数追加
circle_rotat = 0;
my_ls.onMouseWheel = function(delta){
n += delta; //deltaはホイール1メモリで3(-3)です。
}
_root.circle.onEnterFrame = function(){
R_pos = 6*n
// ↓★この行変更
R_dif = Math.round((R_pos - circle_rotat)*0.5);
// ↓★この行変更
circle_rotat += R_dif;
// ↓★この行変更
this._rotation = circle_rotat;
// ↓★この行変更
if(Math.abs(circle_rotat - R_pos)<2){
// ↓★この行変更
circle_rotat =R_pos;
// ↓★この行変更
this._rotation = circle_rotat;
}
}
_root.circle.onRollOver = function(){
Mouse.addListener(my_ls);
}
_root.circle.onRollOut = function(){
Mouse.removeListener(my_ls);
}
----------------------------------------
これで行けるでしょう↑。
書かれてある内容自体は一切変えていません。
ダイレクトに this._rotation を動かすのではなく,
変数 circle_rotat を動かして,その値を this._rotation に代入しているだけです。
sassakunさんありがとうございます!
ソースの直しまで・・・ほんとたすかりました^^
原因の内容がわかるとなるほどってかんじでした、
早速がんばって勉強します!
ほんとありがとうございました^^
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
- ・ゆるやかでぃべーと タイムマシンを破壊すべきか。
- ・「I love you」 をかっこよく翻訳してみてください
- ・歩いた自慢大会
- ・許せない心理テスト
- ・字面がカッコいい英単語
- ・昔のあなたへのアドバイス
- ・かっこよく答えてください!!
- ・あなたが好きな本屋さんを教えてください
- ・これ何て呼びますか Part2
- ・人生で一番思い出に残ってる靴
- ・ゆるやかでぃべーと すべての高校生はアルバイトをするべきだ。
- ・初めて自分の家と他人の家が違う、と意識した時
- ・単二電池
- ・チョコミントアイス
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
python ボタンを押すと複数の関...
-
四乗根を英語で言うと・・・
-
pythonの画像の貼り付けについて
-
チェックボックス+変数+値
-
Pythonを使ってせん断応力図、...
-
変数に256文字以上のテキストを...
-
static関数がmapファイルに載ら...
-
VBAで改行の入ったデータの正規...
-
別のアプリケーションのテキス...
-
外部の画像ファイル(bmp等)を表示
-
VBからPDFファイルの埋め込みテ...
-
UWSCのBTN関数について。
-
多分探索木の高さを測定する関...
-
photoshopで書いた四角の枠の中...
-
VBAユーザーホームテキストボッ...
-
マウスオーバーで画像ズーム(...
-
ボタンインスタンスの_nameプロ...
-
onClipEvent の enterFrameとlo...
-
attachBitmapしたMCのgetBytesT...
-
チェックボックスのテキストを...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Pythonを使ってせん断応力図、...
-
python ボタンを押すと複数の関...
-
else if文の順序を変えることに...
-
SNMPの標準MIBについて
-
四乗根を英語で言うと・・・
-
ADに参加していないPCからADサ...
-
PythonでSetWindowPosを使うに...
-
pythonのグローバル変数
-
ゲージと連動したムービークリ...
-
レーダーチャートの描画
-
SharedObjectの動作がうまくい...
-
リンゲージの設定
-
loadMovie()を組み込んだswfフ...
-
100点でクリアする簡単なモグラ...
-
flashでURLからのデータ取得
-
StandardMLの二分木に関する問...
-
経過時間を計るには
-
グローバル変数の呼び出し
-
ムービークリップの拡大縮小
-
Excel VBAで読み込んだテキスト...
おすすめ情報