3D回転を実現する方法について

このQ&Aのポイント
  • 中心に球を置き、その周りを文字をMovieClipにし、3D風に回転させたいと考えています。
  • 球と文字のMovieClipインスタンスを重ねて配置し、swapDepthsを使って深度を入れ替えることで、球の周りを回っているような表現をしたいです。
  • しかし、現在の実装ではMovieClipが点滅してしまう問題があります。某有名テーマパークのように球に回り込むような感じを実現するためにはどうすれば良いでしょうか?
回答を見る
  • ベストアンサー

3D回転

中心に球をを置き、その周りを文字をMovieClipにし 3D風に回転させたいと考えております。 第1フレームに"球"のMovieClipインスタンス(こちらは単にMovieClipに変えないと、swapDepthsの処理が出来ないと思い変換しただけです)、その一つ上のレイヤーに文字のMovieClipインスタンス(こちらは、各文字に前記させて頂きましたスクリプトをMovieClipアクションとして記入)を置いております。そして文字のMovieClipインスタンスを、球の後面に向かう時(入る時)にswapDepthsを使い深度を入れ替えてやると、球の周りを回っている感じになるかなと思ったのですが。。イメージとしましては、某有名テーマパーク(US○)に置かれています地球の周りを、ロゴが回っている感じにしたいのですが。。 asは1.0を使用。 MovieClipには以下のスクリプトを記入。 onClipEvent (load) { degree = 330; r = 100; centerx = 640; centery = 110; } onClipEvent (enterFrame) { radian = Math.PI/180*degree ; this._x = centerx+r*Math.cos(radian); this._y = centery+r*Math.sin(radian)/3; this._yscale = this._xscale=this._alpha=this._y; this.swapDepths(0); degree+= 10; } this.swapDepths(0);を用い、深度を入れ替え表現しようとしたのですが、球に回り込むような表現にはなりません。 と、いいますかMovieClipが点滅してしまうのです。 目指しているのは、MovieClipが某有名テーマパークみたく、球に回り込むような感じです。 どうか、宜しくご教授のほどお願い申し上げます。

  • Flash
  • 回答数1
  • ありがとう数1

質問者が選んだベストアンサー

  • ベストアンサー
  • BlurFiltan
  • ベストアンサー率91% (1611/1754)
回答No.1

onClipEvent (enterFrame) { } の { } 内に, trace(Math.round((Math.sin(radian)+1)*100)); と書くと, これによって 0 ~ 200 の整数が得られますから, これを使えば良いのではないでしょうか。 実際には, this.swapDepths(0);    ↓変更↓ this.swapDepths(Math.round((Math.sin(radian)+1)*100)); このようにするということです。 最後の 100 は私が勝手に決めた数字です。適当です。 100 にすると 0 ~ 200 の整数が得られます。 500 にすると 0 ~ 1000 の整数が得られます。 したがって, もし 100 にした場合, 中心の球 は,0~200 の中間の深度100の辺りに常に存在すれば良いわけです。 つまり, 中心の球 もムービークリップに変換して, その 球のムービークリップには次のように書けば良いということになります。 onClipEvent (enterFrame) { this.swapDepths(100); }

primeiro
質問者

お礼

お返事が遅くなり大変申し訳ございませんでした。 "swapDepths"の使い方が肝だったのですね! 本当に有難うございました。無事解決いたしました。

関連するQ&A

  • 立体回転運動 新たにボタンを作って一定角度だけ動かす

    お世話になります。 下記のプログラムは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) { --省略-- } としたら、フィールド名がありませんとエラーが出てしまいます。 長くなってしまいましたが、わかりずらい説明かとは思うのですが、重ねてよろしくお願いします。

  • 楕円の軌道に傾斜をつける方法を教えてください

    ActionScriptでボールを楕円に動かすスクリプトを作成しています。 x軸、y軸に平行に動くスクリプトはできるのですが、斜め45度に動くやり方がわかりません。 ↓x軸y軸に平行運動する楕円スクリプト。 //-------------------------------------------- //長軸100、短軸50の楕円形にボールを動かす r = 100;//半径 onClipEvent (enterFrame) { ang += 10; //角度を10ずつ追加 radian = Math.PI/180*ang; //ラジアンに変換(1度=pai割る180で計算) X = Math.cos(radian)*r; //コサイン×半径 でx座標を計算 Y = Math.sin(radian)*r; //サイン×半径 でy座標を計算 this._x = X; //Xを座標に反映 this._y = Y/2; //Yの半分を座標に反映 } //-------------------------------------------- なんとか傾斜した動きを作りたくていろんなサイトを見ましたが、どうしても式がわかりません。 ぜひ教えてもらえませんでしょうか。 どうぞよろしくお願いします。

    • ベストアンサー
    • Flash
  • ランダム配置のムービークリップが固定配置のムービーに被ってしまいます。

    背景にランダムで星を無数に配置して瞬かせ、その上にキャラクターのムービークリップを配置しているのですが、星のレイヤーよりキャラのレイヤーを上にもってきても、星がキャラクターに被って表示されてしまいます。星の方のムービークリップに、 n=Math.round(Math.random()*1000); this.swapDepths(n); 以上の様にスクリプトで深度の設定をランダムに設定しているのですが、キャラクターの方にはどのように設定したら星が被らない様に深度の設定ができるのかわかりません。どうかよろしくお願い致します。

  • ランダムな動きのスピード制御(Flash)

    スクリーンに小花をいくつか配置し、それがスクリーン上をゆらゆらと動くムービーを作りたいと思っています。 ランダムな動きの方が面白いので、本を見ながら下記の様なアクションスクリプトを小花の形のMCに書きました。 しかし、移動速度がものすごく速く、チラチラするだけで全然キレイじゃありません(ToT) どう言うスクリプトを書き加えれば、スピード制御できるでしょうか? onClipEvent(enterFrame){ this._x+=Math.floor(Math.random()*101-50); this._y+=Math.floor(Math.random()*101-50); }

  • 雪の降るスクリプトで、、、

    以前雪の降るスクリプトについて質問させていただいたものです。 フレームには、 for (k=0; k<50; k++) { duplicateMovieClip(this.snow, "snow"+k, k); } で、ムービークリップには、 onClipEvent (load) { //specifies the size of the movie stage movieWidth = 300; movieHeight = 200; //variables that will modify the falling snow i = 1+Math.random()*2; k = -Math.PI+Math.random()*Math.PI; //giving each snowflake unique characteristics this._xscale = this._yscale=50+Math.random()*100; this._alpha = 75+Math.random()*100; this._x = -10+Math.random()*movieWidth; this._y = -10+Math.random()*movieHeight; } onClipEvent (enterFrame) { //putting it all together rad += (k/180)*Math.PI; this._x -= Math.cos(rad); this._y += i; if (this._y>=movieHeight) { this._y = -5; } if ((this._x>=movieWidth) || (this._x<=0)) { this._x = -10+Math.random()*movieWidth; this._y = -5; } } これを再生するといきなりステージに現れてしますのですが、 ステージの上からY座標Oから(上から降るように)するにはどう したらよいでしょうか? onClipEvent (load)に this._y = 0; と付け加えてみましたが駄目でした。 ご教授お願いいたします。

    • ベストアンサー
    • Flash
  • ASの条件分岐について

    Flash初心者です。 現在、サンプルサイトのスクリプトを参照しながら 意図するアクションを制作しております。 下記がそのスクリプトなのですが、あるインスタンスの アルファ値をマウスオーバー時に変更すると言った内容です。 onClipEvent (load) { this._alpha = 100; } onClipEvent (enterFrame) { if (_parent.mOver) { this._alpha -= this._alpha/8; } else { this._alpha += (100-this._alpha)/8; } } 現状ですとアルファ値は100% ⇔ 0%で変更されるのですが これを100% ⇔ 50%の範囲で変更できればと考えてます。 条件式がtrueなら100%→50%へ、falseなら50%→100%へ。 また、どちらの処理にも最後に「/8」と記されていますが これはどう言った意味をもつのでしょうか? どなたかご存知でしたら、ご教授いただけると幸いです。 よろしくお願いします。

    • ベストアンサー
    • Flash
  • 雪が降るスクリプトについて

    雪がふるスクリプトを http://www.kirupa.com/developer/mx/snow.htm で拾ったのですが、flashplayer6対応のようで、 これをflashplayer7対応にするにはどうしたらよいのでしょうか? フレームには、 for (k=0; k<50; k++) { duplicateMovieClip(this.snow, "snow"+k, k); } で、ムービークリップには、 onClipEvent (load) { //specifies the size of the movie stage movieWidth = 300; movieHeight = 200; //variables that will modify the falling snow i = 1+Math.random()*2; k = -Math.PI+Math.random()*Math.PI; //giving each snowflake unique characteristics this._xscale = this._yscale=50+Math.random()*100; this._alpha = 75+Math.random()*100; this._x = -10+Math.random()*movieWidth; this._y = -10+Math.random()*movieHeight; } onClipEvent (enterFrame) { //putting it all together rad += (k/180)*Math.PI; this._x -= Math.cos(rad); this._y += i; if (this._y>=movieHeight) { this._y = -5; } if ((this._x>=movieWidth) || (this._x<=0)) { this._x = -10+Math.random()*movieWidth; this._y = -5; } } とあるようですが。

    • ベストアンサー
    • Flash
  • duplicateMovieClip

    xpでFlash8を使ってます。 ボタンを押すと玉がどんどん右に動くflashを作りたいのですが画面に2個しか玉が現れません。この場合、深度はどのようにかけばいいのでしょうか? ボタンは on(release){ for(i=1;i<=10;i++){ ball.duplicateMovieClip("en"+i,i); ball._x=100; ball._y=100; } } 玉は onClipEvent (enterFrame) { this._x += 5; } と記述されています。 分かる方教えてください!!おねがいします!

  • 右回り、左回りの判定

    ムービークリップをドラッグし、右回転させている間はAの処理、左回転させている間はBの処理という判定の仕方がわからなくて困っています。 イメージとしてはターンテーブルのようなものです。 現在はムービークリップをドラッグし、右・左回転させるところまでは出来ています。 何かヒント・考え方で結構ですので、ご教授頂けないでしょうか。 下記に現在記述しているスクリプトを記載します。 root階層にインスタンス名"handle"というムービークリップを配置し、Iフレーム目に下記のスクリプトを記述。 handle.onPress = function():Void { if (this.hitTest(_root._xmouse, _root._ymouse, true)) { this.flag = true; } }; handle.onMouseMove = function():Void { if (this.flag == true) { xp = _root._xmouse-this._x; yp = _root._ymouse-this._y; rad = Math.atan2(yp, xp); degree = rad*(180/Math.PI); this._rotation = degree; } }; handle.onMouseUp = function():Void { this.flag = false; }; 宜しくお願いします。

    • ベストアンサー
    • Flash
  • ActionScriptで、指定した時間後に次のアクションのとり方

    例えば2秒後に次の行動を取りたい時の質問をしたいのですが、 ある画像を下からフェードインしながら現れて、停止し2秒後にフェードアウトするというアニメーションをActionnScriptで作りたいのですが、 現在は下記のようにスクリプトを組んで、下から上にフェードインしながら画像を読み込むところまではできたのですが次の2秒後にフェードアウトするというのができません。 setIntervalを使うといいのは知っているのですが、それを下記のスクリプトにどのように組んだらできるのでしょうか? わかる方がいたら教えてください、よろしくお願いします。 swfのサイズはw:300、h:100です、ステージにMovieClipを一つ置いてそれに下記のスクリプトを書き込んでいます。 ------------------------------------------------------------------- onClipEvent (load) { this.createEmptyMovieClip("img_load_mc",1); img_load_mc.loadMovie("画像URL"); this._alpha = 0; this._x = 0; this._y = 100; } onClipEvent (enterFrame) { this._alpha += 5; this._y -= 5; if(this._y <0) { this._y = 0; } } ------------------------------------------------------------------- ちなみに作成環境はFlash8 ProでActionScript2.0で作成しています。 よろしくお願いします。

    • ベストアンサー
    • Flash

専門家に質問してみよう