こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

画像ローテーション

最近アクションスクリプトをはじめました。
初心者です。
----------------------------------------------
onClipEvent(Load){
speed = 10;
goal = -1*(this._width);
}
onClipEvent(enterFrame){
if(this._x <= goal){ this._x = 0; }
else{ this._x -= speed; }
}
----------------------------------------------
なんですが、これを実行すると、
右から左に移動した正方形の画像が
左端へ移動した後、一番右端に戻りません。

左端に到達後、一番右端にその画像をワープさせて
またその繰り返しをするにはどうしたらよいのでしょうか?
よろしくお願いします。

投稿日時 - 2006-06-09 18:14:01

QNo.2205488

暇なときに回答ください

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

作られたスクリプトに,
他の人が注釈行を入れるのも変な話ですが,
一応入れてみると以下のようになります。

-----------------------------------
// この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
「インスタンスの基準点」↓

参考URL:http://homepage3.nifty.com/ginga-b/MX/inst_refpoint.html

投稿日時 - 2006-06-09 22:41:49

お礼

回答ありがとうございます。
以下の記述で問題解決しますた。

onClipEvent(load){
speed = -10;
}
onClipEvent(enterFrame){
if(this._x<= 0){ this._x = Stage.width; }
else { this._x += speed; }
}

Ctrl+enterの表示と書き出し後の表示では
なぜか違っていました。
書き出し後の表示で自分確認できました。
詳しく説明していただき、ありがとうございました。

投稿日時 - 2006-06-12 17:26:30

このQ&Aは役に立ちましたか?

1人が「このQ&Aが役に立った」と投票しています

回答(1)

あなたにオススメの質問