電子書籍の厳選無料作品が豊富!

スクリプト初心者です。
●矢印の形をした、ムービークリップ(mc1)がステージ端まで移動すると跳ね返り、跳ね返る方向に向きを変えるスクリプトで悩んでいます・・。
●ステージサイズ:400×300 
シーン1、1フレーム目にmc1配置。
mc1をシーン1に配置の際、角度45度に。
mc1に下記スクリプトを書きました。

onClipEvent(load){
    vx=5;
    vy=5;
}
onClipEvent(enterFrame){
this._x += vx;
this._y += vy;

if (400 < this._x) {
vx = -5;
this._rotation=-135;
}
if (300 < this._y) {
vy = -5;
this._rotation=135;
}
if (this._x < 0) {
vx = 5;
this._rotation=-45;
}
if (this._y < 0) {
vy = 5;
this._rotation=45;
}
}

●ステージ端まで行くと矢印(mc1)が跳ね返る事は、出来たのですが、方向(回転角度)がうまく出来ませんでした・・。
自分でも、これでは、回転角度がうまく行かないと分かってはいるのですが・・。
どなたかお分かりの方おられましたら助けてください!
よろしくお願いいたします。

A 回答 (2件)

#1の方の方法でもできると思います。


私は,質問者さまのスクリプトを延長させた場合について回答します。

矢印を上向き(↑)に作図して,
その上向き矢印をムービークリップに変換したものとします。

その上向き矢印のムービークリップに書くスクリプトを,
次のようにすればうまく行くと思います(コピペ可能です)。


----------------------------------------------
onClipEvent (load) {
// 右下へ進ませるように変数を設定
vx = 5;
vy = 5;
// 右下へ向かせる
this._rotation = 135;
}

onClipEvent (enterFrame) {
this._x += vx;
this._y += vy;

// 右端まで行ったとき
if (400<this._x) {
// 左方向へ進ませる
vx = -5;
if (vy>=0) {
// 下へ進んでいたら左下を向かせる
this._rotation = -135;
} else {
// 上へ進んでいたら左上を向かせる
this._rotation = -45;
}
}

// 下端まで行ったとき
if (300<this._y) {
// 上方向へ進ませる
vy = -5;
if (vx>=0) {
// 右へ進んでいたら右上を向かせる
this._rotation = 45;
} else {
// 左へ進んでいたら左上を向かせる
this._rotation = -45;
}
}

// 左端まで行ったとき
if (this._x<0) {
// 右方向へ進ませる
vx = 5;
if (vy>=0) {
// 下へ進んでいたら右下を向かせる
this._rotation = 135;
} else {
// 上へ進んでいたら右上を向かせる
this._rotation = 45;
}
}

// 上端まで行ったとき
if (this._y<0) {
// 下方向へ進ませる
vy = 5;
if (vx>=0) {
// 右へ進んでいたら右下を向かせる
this._rotation = 135;
} else {
// 左へ進んでいたら左下を向かせる
this._rotation = -135;
}
}
}
----------------------------------------------



つまり,
矢印が各端まで行ったときに,
各向きへ向かせる値を定めるには,
さらに場合分けが必要だということです。

上のスクリプトで,
行の先頭に 「//」 の付いた行は注釈行(コメントアウト)です。
注釈行を入れた理由は,
この回答でスクリプトを説明するためでもありますが,
実際に自分が作る上で頭がこんがらがらないように,
メモをしながら作成したという理由もあります。

自分のために注釈行を入れながら,
ゆっくり考えて作るとできると思いますよ。

この回答への補足

すみません。
●矢印を上向き(↑)に作図して,
その上向き矢印をムービークリップに変換したものとします。

上記、ご回答いただいた分を、読み忘れていました。
無事解決いたしました!!
ゆっくり考えてメモを取りながら作成していこうと思います。
本当にありがとうございました。

補足日時:2007/03/21 10:43
    • good
    • 0
この回答へのお礼

以前もお世話になったかと思います!!
とても丁寧に教えていただきまして、本当にありがとうございます。

私の説明不足だったかと思います。
mc1矢印→は右向きに作りました。
シーン1に配置する際、
進行方向に向かせる為に45度回転させております。

自分の分かる方法で出来るのであれば、
これで作ってみたいので、アドバイスを参考に
いろいろ試してみようとおもいます。
ありがとうございました!!

お礼日時:2007/03/21 09:01

とりあえずデフォルト(45°にする前の状態)の矢印の向きが右向きだとして説明します


(たぶん現状がそうだと思うので)

onClipEvent(load){}内に下記functionを追加記述

function rotChange(ry, rx) {
var r = Math.atan2(ry, rx);
this._rotation = Math.floor(r*180/Math.PI);
}


そして、onClipEvent(enterFrame){}のthis._rotation=~と
している全ての行を下記に変更

rotChange(vy, vx);

もしくはthis._rotation=~を全て消し、最終行に上記を追加でもOKです

これでXとYの移動量から自動で角度を求めて変更してくれます
    • good
    • 0
この回答へのお礼

回答いただきまして、ありがとうございます。
無事、解決いたしました!!

なぜ、出来たのか・・???
全く分からないので・・(勉強不足でスミマセン・・。。)

いただいたスクリプトを元に、理解する様にします。
本当にありがとうございました。

お礼日時:2007/03/21 09:06

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!