- ベストアンサー
画像ローテーションを実現する方法
- 初心者向けのアクションスクリプトを使用して、画像ローテーションを実現する方法を解説します。
- 右から左に移動する正方形の画像が左端に到達した後、一番右端に戻る方法について詳しく説明します。
- 画像をワープさせて繰り返し動かすためのスクリプトについても紹介します。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
- ベストアンサー
作られたスクリプトに, 他の人が注釈行を入れるのも変な話ですが, 一応入れてみると以下のようになります。 ----------------------------------- // このMC(ムービークリップ)が表示されたとき onClipEvent(Load){ // 変数 speed を 10 にする(右へ10pxずつ移動) speed = 10; // 変数 goal = - (このMCの幅) goal = -1*(this._width); } // 1フレーム進む時間ごとに毎回実行 onClipEvent(enterFrame){ // このMCの x座標 が - (このMCの幅) 以下になれば // このMCの x座標 を 0 にする // それ以外は 右へ-10pxずつ(左へ10pxずつ)移動 if(this._x <= goal){ this._x = 0; } else{ this._x -= speed; } } ------------------------------------ 難解なスクリプトですね。 何をしたいのかがよくわかりませんが… ご質問では, > これを実行すると、 > 右から左に移動した正方形の画像が > 左端へ移動した後、一番右端に戻りません。 と書かれていますが, スクリプトは // もしこのMCの x座標 が - (このMCの幅) 以下であれば // このMCの x座標 を 0 にする if(this._x <= goal){ this._x = 0; } となっています。 これだと右端に戻るはずはありません。 条件を満たしたとき, MC の x座標 は 0 になる。 つまり ステージの左端に来ると思います。 ……ぅぅぅ 困った。 どういうものをどういうように動かしたいのかが, スクリプトからはさっぱりわかりませんが, 今書かれているスクリプトの内容を全く無視して, > 左端に到達後、一番右端にその画像をワープさせて > またその繰り返しをするにはどうしたらよいのでしょうか? と書かれている部分だけをスクリプトにすると次のようになると思います(コピペ可能)。 ----------------------------------- // この MC(ムービークリップ) が表示されたとき onClipEvent (load) { // 変数 speed を -10 にする(右へ-10pxずつ移動) speed = -10; } // 1フレーム進む時間ごとに毎回実行 onClipEvent (enterFrame) { // もしこのMCの x座標 が 0 以下であれば // このMCの x座標 を ステージの右端に移動 if (this._x<=0) { this._x = Stage.width; // それ以外は 左へ10pxずつ移動 } else { this._x += speed; } } ------------------------------------ 一応は上記のような感じで行けるとは思います。 しかしこれだと, もしMCの基準点がMCの中心であった場合, MCが半分まで左に消えたら, 右に移動してしまいます。 MCが大きいほどその現象がよくわかります。 もし 「MCの基準点がMCの中心であった場合」 で,なおかつ,もし 「MCの右端がステージの左端にすべて隠れたとき, MCの左端の座標をステージの右端の座標に戻す」 という場合を想定されているのであれば, 次のようになります。 単に感による予想ですが, したいのはこんな↓感じではないでしょうか?(コピペ可能) ------------------------------------ // このMC(ムービークリップ)が表示されたとき onClipEvent (load) { // 変数 speed を -10 にする(左へ10pxずつ移動) speed = -10; } // 1フレーム進む時間ごとに毎回実行 onClipEvent (enterFrame) { // もしこのMCの右端の x座標 が 0 以下であれば // このMCの x座標 を ステージの右端に移動 if (this._x<=-this._width/2) { this._x = Stage.width+this._width/2; // それ以外は 左へ10pxずつ移動 } else { this._x += speed; } } ------------------------------------ 以上, 「MCが大きい。」 「MCの基準点がMCの中心にある」 などという勝手な予想でのスクリプトです。 参考URL 「インスタンスの基準点」↓
お礼
回答ありがとうございます。 以下の記述で問題解決しますた。 onClipEvent(load){ speed = -10; } onClipEvent(enterFrame){ if(this._x<= 0){ this._x = Stage.width; } else { this._x += speed; } } Ctrl+enterの表示と書き出し後の表示では なぜか違っていました。 書き出し後の表示で自分確認できました。 詳しく説明していただき、ありがとうございました。