メイン 迷える子羊の部屋【初心者専用】 createEmptyMovieClipとloadMovieを同時に使う場合.... | 投稿するにはまず登録を |
スレッド表示 | 新しいものから | 前のトピック | 次のトピック | 下へ |
投稿者 | スレッド |
---|---|
mamotin | Åê¹ÆNo.38683 投稿日時: 2008-5-6 2:04 |
新米 居住地: 投稿: 19
使用環境:
WinXP FlashCS3 |
createEmptyMovieClipとloadMovieを同時に使う場合.... 現在いくつかのサイトを参考にして、擬似3Dを表現しようとしております。
createEmptyMovieClipにて四角形のMCを作成し、 そのMCにjpg画像をloadMovieで読み込ませ、 それらを拡大縮小、マウスと動きを同期させるなどをして、3Dっぽくみせようとしております。 そこで、createEmptyMovieClipにてMCを作った後、作ったMCにloadMovieにて画像を読み込ませると、 loadMovieをする前は動いていた画面のMCが、動かなくなってしまいました。 原因はなんだろうといろいろと調べてみたところ、以下のページを発見しました。 イベントハンドラの定義方法 そこで、MCを作成する部分と、MCの動きを担当する部分を分けて書き、 あとでMCの動きを担当する部分を MovieClip.prototype.onLoad =_root.idou_z; にてコンパイルすることにしましたが、画面にMCが表示されません。 何かコンパイルするタイミングなどが悪いのでしょうか? Stage.scaleMode = "noScale" Stage.align = "LT"; function createMovie(depth){ var myModel = this.createEmptyMovieClip("myModel"+depth, 100000-depth); myModel.lineStyle(1, 0x000000, 100, true, "none", "round", "miter", 1); myModel.beginFill(0xFFFFFF); myModel.moveTo(-50, -50); myModel.lineTo(50, -50); myModel.lineTo(50, 50); myModel.lineTo(-50, 50); myModel.lineTo(-50, -50); myModel.endFill(); myModel.xp = Math.random()*Stage.width; myModel.yp = Math.random()*Stage.height; myModel.zp = depth; cc = 0; dd = 0; myModel.onEnterFrame = idou_z; } //ここからMCを動かす処理-------------------------------------------------------------------- function idou_z(){ //背景を押したらMCを縮小する bg.onPress = function(){ frag2 = true; aaa = 500; } if(frag2){ cc++; this.zp = this.zp + 10; } if(cc == aaa){ frag2 = false; cc = 0; } //MCを押したら拡大する this.onPress = function(){ // frag3 = true; aaa = this.zp-100; itix = Math.round(this._x); itiy = Math.round(this._y); if(aaa < 100){ frag = false; }else{ frag = true; } } if(frag){ cc++; this.zp = this.zp - 10; this.onPress = function(){ frag = false; } } if(cc == aaa){ frag = false; cc = 0; } //MCのzpが0以下になったら表示させない if(this.zp < 0){ this._alpha = 0; }else{ this._alpha = 100; } //拡大・移動処理 scale = 100/this.zp; this._xscale = this._yscale = 400*scale; if(frag3){ dd++; ddx = (Stage.width/2 - itix); ddy = (Stage.height/2 - itiy); this._x = (Stage.width/2)+ (this.xp-_xmouse)* scale*7+ddx; this._y = (Stage.height/2)+ (this.yp - _ymouse)* scale*7+ddy; }else{ this._x = (Stage.width/2)+ (this.xp-_xmouse)* scale*7; this._y = (Stage.height/2)+ (this.yp - _ymouse)* scale*7; } } //MCを動かす処理ここまで-------------------------------------------------------------------- for(i=0;i<10;i++){ createMovie(i*500); } MovieClip.prototype.onLoad =_root.idou_z; |
ひろゆき | Åê¹ÆNo.38684 投稿日時: 2008-5-6 2:16 |
ちょんまげら 居住地: 東京砂漠 投稿: 4403
使用環境:
10.8.5 Flash Professional CS4/CS6/CC Safari 6.1 |
Re: createEmptyMovieClipとloadMovieを同時に使う場合.... 一度に複数のことを同時に試しすぎだと思います。
疑似3Dのことは棚上げして、もっとシンプルな動きで試されないと、 何が原因で、どう対処すればよいか分からなくなってくるはずです。 引用: mamotinさんは書きました: これの原因は、 「外部JPG読み込みMCをボタンとして扱う場合のアクション」で 回答されているようなことが原因です。 上記スレッドで挙げられているリンク先をお読みください。
|
野中文雄 | Åê¹ÆNo.38685 投稿日時: 2008-5-6 4:03 |
ちょんまげら 居住地: 東京 投稿: 4531
使用環境:
CS5.5 .6.8 Vista Home Premium (SP1) |
Re: createEmptyMovieClipとloadMovieを同時に使う場合.... 本論とは外れますが、MovieClipクラスのprototypeにMovieClip.onLoadイベントハンドラメソッドを定義する必要がありますか?正確な処理内容や副次的効果(参照されたスレッドで説明されています)を理解したうえであえて使われるのは止めませんけど、ActionScript 2.0では標準的な手法ではなく、3.0には応用できません。
引用: mamotinさんは書きました: |
mamotin | Åê¹ÆNo.38692 投稿日時: 2008-5-7 2:36 |
新米 居住地: 投稿: 19
使用環境:
WinXP FlashCS3 |
Re: createEmptyMovieClipとloadMovieを同時に使う場合.... 野中さん、ひろゆきさんありがとうございます。
たしかにこれでは、ごちゃごちゃしすぎでした。 もっとシンプルにしたほうがわかりやすいですね・・・。 ということで、一度簡単なものを作って試してみました。 var mc = this.createEmptyMovieClip("mc",this.getNextHighestDepth()); loadMovie("/img/s500.jpg", "mc"); mc.onPress = function(){ this.startDrag(true); } 以上のものを試して見たところ、やはり先ほどのようにloadMovieにて読み込んだ画像をドラッグで動かすことはできませんでした。 ネット上で色々と見てみたのですが、 ・ムービークリップ(子クリップ)をさらにムービークリップ(親クリップ)にシンボルに変換し、子クリップの方に画像を読みこませ、親クリップをドラッグする。 ・MovieClipLoaderクラスをつかって外部ファイルのロードが完了するのを待つ の二つのやり方を見つけました。 ですが、前者はわざわざまたムービークリップを作成する必要がある。後者はflashMXには対応していないようです・・・ flashMXでも対応できる、もっとシンプルな(_rootのメインのタイムライン上で完結する)外部ファイルのドラッグのやり方はあるのでしょうか? |
野中文雄 | Åê¹ÆNo.38693 投稿日時: 2008-5-7 3:03 |
ちょんまげら 居住地: 東京 投稿: 4531
使用環境:
CS5.5 .6.8 Vista Home Premium (SP1) |
Re: createEmptyMovieClipとloadMovieを同時に使う場合.... ひろゆきさんの紹介されたトピックは、お読みになりましたか?そのスレッドで引用されているノートに、Flash MXで可能なロード待ちのやり方が解説されているはずです。ただ、それをご覧になればおわかりになるように、Flash Player 6ではメインタイムラインのフレームアクションで完結するのは難しいと思われます。
どうしてもメインタイムラインにすべてを記述したいなら、ロード待ちのための処理を自作するか、Ralf Bokelbergさんの作成されたLoaderClassのようなものを探して利用するかでしょう。 引用: mamotinさんは書きました: [追記] 何かムービーの構造やスクリプトの仕組み上、それができないのであれば別として。少なくとも子のMovieClipインスタンスは、MovieClip.createEmptyMovieClip()メソッドでつくればよく、[ライブラリ]のMovieClipシンボル内に予め配置しておく必要はありません。親MovieClipインスタンスにMovieClipアクションでなく、イベントハンドラメソッドを設定する場合は、親インスタンスも動的に生成できるはずです。 この手法でしたら、メインタイムラインのフレームアクションですべてまかなうことも、おそらく可能でしょう。 引用: ・ムービークリップ(子クリップ)をさらにムービークリップ(親クリップ)にシンボルに変換し、子クリップの方に画像を読みこませ、親クリップをドラッグする。 |
ひろゆき | Åê¹ÆNo.38695 投稿日時: 2008-5-7 7:06 |
ちょんまげら 居住地: 東京砂漠 投稿: 4403
使用環境:
10.8.5 Flash Professional CS4/CS6/CC Safari 6.1 |
Re: createEmptyMovieClipとloadMovieを同時に使う場合.... 引用:
mamotinさんは書きました: わざわざ作成する必要があったとしても、ロード待ちをすることの面倒さに比べれば、 実現したい動作のために有効な方法だと思いますが。 引用: flashMXでも対応できる、もっとシンプルな(_rootのメインのタイムライン上で完結する)外部ファイルのドラッグのやり方はあるのでしょうか? 前述したスレッドのリンク先に、createEmptyMovieClip を用いた方法が記載されていたと思いますし、 それが、最もシンプルな方法のひとつだと思いますが、 お読みになっておられないようなので、改めて挙げておきます。 「MovieClip.loadMovie 後の挙動について」 「MCを順々にロードすることができません」 そのほか「loadMovie クリア」でフォーラム内を検索してみましょう。 #「すべて表示」で、たくさん表示されます。 2つ目のスレッドでは、MovieClipLoader を用いていますが、 よくお読みになれば、MovieClip.loadMovie() でも、同じ方法が使えることが分かるはずです。
|
mamotin | Åê¹ÆNo.38818 投稿日時: 2008-5-15 12:28 |
新米 居住地: 投稿: 19
使用環境:
WinXP FlashCS3 |
Re: createEmptyMovieClipとloadMovieを同時に使う場合.... ひろゆきさん、野中さん ありがとうございます!
ムービークリップを新たに作成して、そこに画像を読み込むことで解決しました。 まだ、経験が浅いので、どのように効率化していくかがまだわかっておりません。 勉強していきたいです。 |
スレッド表示 | 新しいものから | 前のトピック | 次のトピック | トップ |
投稿するにはまず登録を | |