ログインしてさらにmixiを楽しもう

コメントを投稿して情報交換!
更新通知を受け取って、最新情報をゲット!

Flash Action Scriptコミュのお願いです、どなたか教えて頂けないでしょうか。

  • mixiチェック
  • このエントリーをはてなブックマークに追加
はじめまして、Flash初心者です。


突然トピックを立ててしまいすみません。宜しければご教授頂けないでしょうか。

制作環境はWindows XP Flash8を使用しています。

「インスタンス(ムービー)のスクリプトとメインタイムラインのスクリプトを関連付けるにはどのようにすれば宜しいでしょうか」

 ムービークリップインスタンス同士を関連づけた場合「_parent(_parent_parent)と_taget,」などで記載したり、メインタイムラインでは「thisや_root」などで呼び出しているところまではなんとなく解ってきたのですが。

 メインタイムラインの空キーフレームにキーボードの(左右、上下)のボタンを押すとムービークリップインスタンスのradXとradYが連動するにはどのようにすれば宜しいのでしょうか。


【メインタイムライン】(第1フレーム)
myListener = new Object();
myListener.onKeyDown = function() {
if (Key.getCode(39) == Key.RIGHT) {
radX += 0.005;
if (radX>0.05) {
radX = 0.05;
}
} else if (Key.getCode(37) == Key.LEFT) {
radX -= 0.005;
if (radX<-0.05) {
radX = -0.05;
}
} else if (Key.getCode(38) == Key.UP) {
radY += 0.005;
if (radY>0.05) {
radY = 0.05;
}
} else if (Key.getCode(40) == Key.DOWN) {
radY -= 0.005;
if (radY<-0.05) {
radY = -0.05;
}
};
Key.addListener(myListener);


【MC】(ムービークリップインスタンス内)
onClipEvent (load) {
x = 0;
y = 0;
z = -80;
function pointSet() {
radX = _root.radX;//メインタイムラインの空キーフレームからradXを読み取って連動。_root?_parent?
radY = _root.radY;//メインタイムラインの空キーフレームからradYを読み取って連動。_root?_parent?
tx = x;
ty = y;
y = ty*Math.cos(radY)-z*Math.sin(radY);
tz = ty*Math.sin(radY)+z*Math.cos(radY);
z = tz*Math.cos(radX)-tx*Math.sin(radX);
x = tz*Math.sin(radX)+tx*Math.cos(radX);
this._x = x;
this._y = y;
this._alpha = this._xscale = this._yscale = (80+z)*0.3+60;
this.swapDepths(this._xscale);
}
}
onClipEvent (enterFrame) {
pointSet();
}

何卒よろしくお願いいたします。不明な点がございましたらすぐに追加情報を載せます。

コメント(10)

こんにちは。

質問の意図とあってるかわかりませんが、メインタイムラインから
↓インスタンス名
mc1.hensuu
   ↑変数名
のように、ドットで階層を指定できます。

逆にインスタンスから_rootの変数を読み取る場合は
 ↓メインタイムライン
_root.hensuu
    ↑変数名

となります。

タゴさんのスクリプトだと、
【MC】(ムービークリップインスタンス内)
_root.radY のようにすれば宜しいのでは・・

_parentでも指定できますが、これはMCの階層から逆にたどっていくので、_rootの変数だとわかっているのでしたら、_rootを使うのが早いと思います。


simo様へ<

ご連絡頂きありがとうございます。残念ながら_rootや_parentで試しているのですが上手く行きませんでした泣き顔

説明不足で申し訳ございません。

【更に内容を報告】

●メインタイムラインのレイヤー1の1フレーム(空キーフレーム)に【メインタイムライン】が記載されています。

●メインタイムラインのレイヤー2の1フレームにムービークリップインスタンス(MC)を配置。更に配置した(MC)に【MC】を記載しています。


 そこで、【メインタイムライン】にあるradXとradYをインスタンス(MC)【MC】にあるradXとradYとを関連付けたいのです。


「【MC】から【メインタイムライン】にあるradXとradYを呼び出したい」



また、宜しければサンプルを見てもらいたいのですがどのようにファイルを掲載すればよろしいでしょうか。

ご迷惑をお掛けし申し訳ございません。何卒宜しくお願いします。
鬼束7段様へ<

ご指摘ありがとうございます。今後、トピックの立てる際に注意させて頂きます。申し訳ございませんでした。



出来れば【MC】の中に上下左右の指定↓を書かないでメインタイムラインに記述したいのです。

onClipEvent{enterFrame){
if(Key.isDown(Key.LEFT)){
radX -= 0.005;
if (radX<-0.05) {
radX = -0.05;
}
} else if(Key.isDown(Key.RIGHT)){
radX += 0.005;
if (radX>0.05) {
radX = 0.05;
}
}
........................................「省略」.................................};

「【MC】に書けない理由として」
 実はGainerと呼ばれるIOモジュールを使い操作できるようにしたいのですが、その際Gainerではムービークリップインスタンス【MC】を直接アクセスすることができません。間接的にメインタイムラインから【MC】へアクセスする構造になり、【MC】はメインタイムラインからradXとradYの情報を取得しなければなりません。その為メインタイムライン上で呼び出して使用したいと考えています。

 今回、その前段階としてメインタイムライン上に左右と上下を指定し、操作したいのですがどのようにすれば宜しいでしょうか。

何卒ご教授頂けないでしょうか。
>> タゴさん
まず、問題を単純化すべきです。→【問題を単純化(シンプルに)しない】
http://www.fumiononaka.com/TechNotes/NGWords.html#Mo_ta

[問1]メインタイムラインの任意の場所に配置されたMovieClipインスタンスを、メインタイムラインのフレームアクションでステージ中央に移動させることはできますか。

[問2]上記[問1]のフレームアクションを書替えて、MovieClipインスタンスの位置を、右矢印キーで右に1ピクセル、左矢印キーで左に1ピクセル、それぞれ移動させることはできますか。

[問3]以下のMovieClipアクションの処理を、メインタイムラインのフレームアクションに移行するにはどうしたらよいですか。MovieClip.onEnterFrameイベントハンドラメソッドを使って記述しましょう。

// 【メインタイムライン】(第1フレーム)
// フレームアクション
myListener = new Object();
myListener.onKeyDown = function() {
 if (Key.getCode(39) == Key.RIGHT) {
  radX = 1;
 } else if (Key.getCode(37) == Key.LEFT) {
  radX = -1;
 }
};
Key.addListener(myListener);

// 【MC】(ムービークリップインスタンス)
// MovieClipアクション
onClipEvent (load) {
 function pointSet() {
  radX = _root.radX;
  this._x += radX;
 }
}
onClipEvent (enterFrame) {
 pointSet();
}

>> 2: 鬼束7段さん
お役に立つようでしたら、いくらでも引用していただいて結構です。
>> タゴさん
前の回答は、ご質問の趣旨を私なりに解釈して書きました。

けれど、ご説明が混乱しています。きちんと整理していただく必要があります。

>> 3:
>「【MC】から【メインタイムライン】にあるradXとradYを呼び出したい」
_____
つまり、MovieClipインスタンスにスクリプトを書きたいのでしょうか。私は、そうではないと「想像」しました。

> また、宜しければサンプルを見てもらいたいのですがどのようにファイルを掲載すればよろしいでしょうか。
_____
その前に、問題点を切分けた最小限のスクリプトにまとめることをお考えください。→【スクリプトを見てください】
http://www.fumiononaka.com/TechNotes/NGWords.html#Su

>> 4:
> 出来れば【MC】の中に上下左右の指定↓を書かないでメインタイムラインに記述したいのです。
_____
結局、スクリプトをMovieClipに書きたいのでしょうか、それともメインタイムラインのフレームに記述したいのでしょうか。「Gainer」云々のご説明がありましたので、私は後者と判断しました。

なお、>> 4:に引用されたスクリプトは、トピック冒頭のものとは異なっています。そういう場合には、必ずその旨および内容をご説明ください(前掲【スクリプトを見てください】参照)。
>> 5:
> // 【メインタイムライン】(第1フレーム)
> // フレームアクション
_____
一応動いてはいますけど、文法的におかしいので、教育的考慮から修正します。

// 【メインタイムライン】(第1フレーム)
// フレームアクション
myListener = new Object();
myListener.onKeyDown = function() {
 var nKey = Key.getCode();
 // if (Key.getCode(39) == Key.RIGHT) {
 if (nKey == Key.RIGHT) {
  radX = 1;
 // } else if (Key.getCode(37) == Key.LEFT) {
 } else if (nKey == Key.LEFT) {
  radX = -1;
 }
};

#最近、ActionScript 2.0/1.0には疎くなってきました。
Fumio様へ>

 ご指摘ありがとうございます。気を付けていきたいと思います。まだアクションスクリプトの見習いのうえ、うまく説明ができず、自分でも不甲斐ないです。ご迷惑をお掛けし申し訳ございません。もう一度整理して記載します。




問題1=?【フレームアクション】と?【MC】を相互関係にするにはどのようにするのでしょうか。
問題2=?【MC】の中にあるアクションスクリプト=radXの値をメインタイムラインのradXから取得するにはどのようにすれば宜しいでしょうか。

前回fumio様から教えて頂いたスクリプトを参考にさせてい頂きました。↓

function pointSet() {
  radX = _root.radX;
  this._x += radX;
 }

今度は【MC】の中にある別のthis._xと連動してしまい、誤動作がおこりますげっそり。
自分で書いておきながらなんですが本当に_root.radXでメインタイムラインから第1フレームにあるフレームアクションのradXを呼び出せているのかがよく解りません。

・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・
 現在の状況はこちらです。省略化しなければならないと判りつつも、これ以上省略化すると本来の動きができません。未熟者としてご理解頂けないでしょうか。何卒宜しくお願いします。


右矢印「→」を押すと右方向へ3D回転します。3D回転をするには問題2を解決しなければなりません。
現在その方法を模索しております。

?【フレームアクション】
 ●配置場所:メインタイムライン/レイヤー1/第1フレームの空キーフレーム)に↓記述しています。

  myListener = new Object();
  var nKey=Key.getCode();
  myListener.onKeyDown = function() {
if (nkey == Key.RIGHT) {
//ここにあるradXの値を?【MC】の中にあるradXへ送りたい(受け取りたい)です。
radX += 1;
if (radX>1) {
radX = 1;
}
}
  };
  Key.addListener(myListener);

?【MC】 = ムービークリップインスタンス。
  ●配置場所はメインタイムライン/レイヤー2/第1フレームに【MC】を配置してアクションスクリプト    を記述しています。

  onClipEvent (load) {
z = -80;
function pointSet() {
radX = _root.radX;//ここが本当に_rootでよかったのでしょうか?
tx = x;
tz = z*Math.cos(nanimonai);
z = tz*Math.cos(radX)-tx*Math.sin(radX);
x = tz*Math.sin(radX)+tx*Math.cos(radX);
this._x = x;
this._alpha = this._xscale = this._yscale = (80+z)*0.3+60;
this.swapDepths(this._xscale);
   }
 }
 onClipEvent (enterFrame) {
   pointSet();
 }

説明が不慣れで申し訳ございません。何卒宜しくお願い致します。
【ご報告】

 無事に動きました。皆さんのアドバイスを参考にし、もう一度よく見直したところ、問題はthis,_xにありました。

 ずっと_rootがオカシイ、何かあるのではと思って探っていた為、気付きませんでした。アドバイスを活かして、目線を変えて見ていくことでthis_x;に問題があることがわかりました。

simoさん、fumioさん、鬼束7段、さん達の協力が無ければ出来ませんでした。本当にありがとうございました。

ログインすると、みんなのコメントがもっと見れるよ

mixiユーザー
ログインしてコメントしよう!

Flash Action Script 更新情報

Flash Action Scriptのメンバーはこんなコミュニティにも参加しています

星印の数は、共通して参加しているメンバーが多いほど増えます。

人気コミュニティランキング