トップへ戻るニュースフォーラムFLASH-ML 過去ログBak@Flaダウンロードよくある質問と答
ログイン
ユーザ名:

パスワード:


パスワード紛失

新規登録
メインメニュー
メイン
   迷える子羊の部屋【初心者専用】
     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さんは書きました:
そこで、createEmptyMovieClipにてMCを作った後、作ったMCにloadMovieにて画像を読み込ませると、
loadMovieをする前は動いていた画面のMCが、動かなくなってしまいました。

これの原因は、
外部JPG読み込みMCをボタンとして扱う場合のアクション」で
回答されているようなことが原因です。

上記スレッドで挙げられているリンク先をお読みください。


----------------
質問する際は、回答者に具体的な情報を与えてください。

野中文雄
Åê¹ÆNo.38685
投稿日時: 2008-5-6 4:03
ちょんまげら
居住地: 東京
投稿: 4531
使用環境:
CS5.5 .6.8 Vista Home Premium (SP1)
Re: createEmptyMovieClipとloadMovieを同時に使う場合....
本論とは外れますが、MovieClipクラスのprototypeMovieClip.onLoadイベントハンドラメソッドを定義する必要がありますか?正確な処理内容や副次的効果(参照されたスレッドで説明されています)を理解したうえであえて使われるのは止めませんけど、ActionScript 2.0では標準的な手法ではなく、3.0には応用できません。
引用:
mamotinさんは書きました:
そこで、MCを作成する部分と、MCの動きを担当する部分を分けて書き、
あとでMCの動きを担当する部分を
// MovieClip.prototype.onLoad =_root.idou_z;
_root.idou_z();
にてコンパイルすることにしましたが、画面にMCが表示されません。


----------------
 

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さんは書きました:
flashMXでも対応できる、もっとシンプルな(_rootのメインのタイムライン上で完結する)外部ファイルのドラッグのやり方はあるのでしょうか?

[追記] 何かムービーの構造やスクリプトの仕組み上、それができないのであれば別として。少なくとも子の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() でも、同じ方法が使えることが分かるはずです。
this.createEmptyMovieClip("mc",this.getNextHighestDepth());
mc.onPress = function() {
	this.startDrag(true);
};
mc.createEmptyMovieClip("holder",1);
mc.holder.loadMovie("/img/s500.jpg");



----------------
質問する際は、回答者に具体的な情報を与えてください。

mamotin
Åê¹ÆNo.38818
投稿日時: 2008-5-15 12:28
新米
居住地:
投稿: 19
使用環境:
WinXP
FlashCS3
Re: createEmptyMovieClipとloadMovieを同時に使う場合....
ひろゆきさん、野中さん ありがとうございます!

ムービークリップを新たに作成して、そこに画像を読み込むことで解決しました。


まだ、経験が浅いので、どのように効率化していくかがまだわかっておりません。

勉強していきたいです。
スレッド表示 | 新しいものから 前のトピック | 次のトピック | トップ

投稿するにはまず登録を
 
Copyright (C) 2003 FLASH-japan. All rights reserved.
Powered by Xoops