以下のようにスクリプトを書いたのですが
ムービークリップがマウスカーソルと同じ位置に来ても
ムービークリップがフレーム2に移動しません。
ドラゴンクエストVIIIのトップページのFlashのような
表現をしたいのですがうまくいきません。
http://www.square-enix.co.jp/dragonquest/eight/
_mc.onEnterFrame = function()
{
this._x += ( _root._xmouse - this._x ) / 5;
if( this._x == _root._xmouse ) this._mc.gotoAndStop(2);
else this._mc.gotoAndStop(1);
};
どうすればこの問題を解決することができるのでしょうか。
ご存知の方がおられましたらご回答をよろしくお願いします。
No.1ベストアンサー
- 回答日時:
これでいかがでしょうか↓?
---------------------------------------------
// _mc に対する onEnterFrame イベントハンドラの定義
_mc.onEnterFrame = function() {
this._x += (_root._xmouse-this._x)/5;
// 自分自身の座標がマウス座標の ±1 に入れば
if (this._x>=_root._xmouse-1 && this._x<=_root._xmouse+1) {
// 自分自身を フレーム2 に進ませて止める
this.gotoAndStop(2);
} else {
// 自分自身を フレーム1 に進ませて止める
this.gotoAndStop(1);
}
};
---------------------------------------------
ご質問で書かれているスクリプトには,
おそらく2箇所の間違いがあります。
まず1つ目は大きな誤解です。
> ムービークリップがマウスカーソルと同じ位置に来ても
> ムービークリップがフレーム2に移動しません。
同じ位置に来ることは決して(一生)ありません。
ムービークリップのマウス追従移動のスクリプトは
this._x += (_root._xmouse-this._x)/5;
この1行です。
バラして書くと
this._x = this._x + (_root._xmouse-this._x)/5;
です。わかりますでしょうか。
onEnterFrame で,
1フレーム進む時間ごとに,
this(自分自身)とマウスの座標の間の距離を 1/5 ずつ縮めているだけです。
1/5 ずつ縮めているだけなので,
もし this と マウス との座標の差が 500px あった場合
500→100→20→4→0.8→0.16→0.032→……
となるだけで,決して this._x == _root._xmouse になることはありません。
ですから,
if (this._x>=_root._xmouse-1 && this._x<=_root._xmouse+1)
のようにして,
1ピクセルくらいの範囲を持たせないと if 文 は true になりません。
「&&」 は 「なおかつ」 という意味です。
if(this._x は マウス._x-1 より大きく,なおかつ,マウス._x+1 より小さい)
という意味になります。
これで, if文は true になり得ます。
2つ目の間違いは,
「おそらく間違いではないだろうか?」という私の推測です。
if( this._x == _root._xmouse ) this._mc.gotoAndStop(2);
この, this._mc.gotoAndStop(2); のターゲットパスが間違っていませんか?
this._mc.gotoAndStop(2);
↓訂正↓
this..gotoAndStop(2);
おそらく,こうだと思います。
// _mc に対する onEnterFrame イベントハンドラの定義
_mc.onEnterFrame = function() {
です。
わかりますでしょうか?
_mc に対する onEnterFrame イベントハンドラの定義 なのですから,
_mc が this です。
もし _mc の中にさらに _mc が存在していれば,
この2つ目の間違いはターゲットパス間違いではありません。
単なる私の推測違いです。
次のようにしてください。
---------------------------------------------
// _mc に対する onEnterFrame イベントハンドラの定義
_mc.onEnterFrame = function() {
this._x += (_root._xmouse-this._x)/5;
// 自分自身の座標がマウス座標の ±1 に入れば
if (this._x>=_root._xmouse-1 && this._x<=_root._xmouse+1) {
// 自分自身内の _mc を フレーム2 に進ませて止める
this._mc.gotoAndStop(2);
} else {
// 自分自身内の _mc を フレーム1 に進ませて止める
this._mc.gotoAndStop(1);
}
};
---------------------------------------------
早速やってみたところ問題を解決することができました。
2つ目のターゲットパス問題もご指摘の通り、間違っていました。
Flashのターゲットパスの挿入の機能をそのまま使用していたため気づきませんでした。
ご回答していただきどうもありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
フラッシュゲームアーカイブ2
-
キャラクター設定について
-
potplayerについて質問です
-
ゲオでカードを作るのは何歳か...
-
FLASHでゲームを作っていた人は...
-
この曲はなんでしょう?
-
laptop go2からの買い替え、lap...
-
スクリップト
-
私のコンピューター上のファイ...
-
arduino プログラムについて
-
chrome flash
-
FLASHの再生はできないのでしょ...
-
ウェブサイトで Flash が事実上...
-
Flashコンテンツを使ったWebサイト
-
Flash Playerのサポートが終了
-
Form内のselectを連動させるに...
-
Flashをブロックしないで
-
ダウンロードしたデジブックはa...
-
ad or script について
-
Flashplayerの運用について
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
360度パノラマ写真をループでき...
-
MovieClip間で、変数の受け渡し。
-
(AS3) MC内から別のところにあ...
-
FLASHフォトアルバムの画像を外...
-
多分探索木の高さを測定する関...
-
MovieClip(root)について
-
[actionscript] XMLを使ってス...
-
Flash professional CS5を使っ...
-
attachMovieについて(長文)
-
AS2でカスタムカーサーを使って...
-
photoshopで書いた四角の枠の中...
-
テキストボックスの中身をリセ...
-
VBAで改行の入ったデータの正規...
-
python ボタンを押すと複数の関...
-
別のアプリケーションのテキス...
-
【VB.NET】別Formのボタンが押...
-
VBScriptでMsgBoxのYesNoボック...
-
else if文の順序を変えることに...
-
変数に256文字以上のテキストを...
-
DataTableの件数を取得したい
おすすめ情報