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

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

Flash Action Scriptコミュの(質問)Full FlashのWEBページ

  • mixiチェック
  • このエントリーをはてなブックマークに追加
今回ホームページを作成するにあたりFull FlashのWEBページをつくるのに簡単なリキッドデザインをして作りました。
そこで問題が出てしまったんですが、フラッシュの一フレーム目をLoadingにして、読み込まれたら3フレームに飛ぶようにしています。するとリキッドデザインされた、配置がflashで作ったドキュメントサイズに反映されてしまいます。ウインドウのサイズを少し動かすと、ウインドウサイズに反映されリサイズされます。
もしLoadingを置かず一フレーム目にオブジェクトを置くとサイズはウインドウに反映されます。しかし途中のフレームから登場するオブジェクトはやはり元のドキュメントサイズに反映されてしまいます。
何かASの記述がおかしいのでしょうか?
わかる方お願いします。



myStageHeight = Stage.height;
myStageWidth = Stage.width;

resize(myStageHeight,myStageWidth);

Stage.scaleMode="noScale"
Stage.align = "TL";
myListener = new Object();
myListener.onResize = function() {
myStageHeight = Stage.height;
myStageWidth = Stage.width;

resize(myStageHeight,myStageWidth);
}
Stage.addListener(myListener);

function resize(H,W){
Line._height = H;

Title._y = 10;
Title._x = 20;

fullscreen._y =Math.floor(Stage.height)-30;

underbar._y =Math.floor(Stage.height)-30;

logo._x = W - (logo._width + 10);

concept._y = H - (concept._height + 60);
concept._x = W - (concept._width + 10);

cr._y = H - (cr._height + 5);
cr._x = W - (cr._width + 10);

news._x = W - (news._width + 1);

nw._y = H - (nw._height + 65);

full_bn._y = H - (full_bn._height + 10);

sound_bn._y = H - (sound_bn._height + 10);

UL._y = H - (UL._height + 42);

u_w_b._y = H - (u_w_b._height);

heart._x = Stage.width / 2;
heart._y = Stage.height / 2;



parH = H/ 650;
parW = W/1100;
if(parH < parW){
Background._yscale = parW * 100;
Background._xscale = parW * 100;
}else{
Background._yscale = parH * 100;
Background._xscale = parH * 100;
}

}

コメント(15)

ぱっと見た感じですが、おそらく、3フレーム目ではresize関数が呼び出されてないのだと思いますよ!
resize関数の中でtrace("リキッド");と記述して実行してみてください。
3フレーム目で「リキッド」と表示されますか?
どのフレームでもウインドウのサイズを自分で変更すると反映します。Resize関数の中でtrace("リキッド");も無事反応しました。
ちょっと初歩的なミスをしているのかもしれませんが、
私が書いたスクリプトはサイズが変更された時にだけ反応するんですよね?(すいません初心者で。。。)
だから一フレーム目に書いたらオブジェクトの位置も反応して、2フレーム目からはもうサイズが変化してないから自分でサイズを変更しなければ駄目なんでしょうか?
ってことはresize関数の中以外で位置を定義すれば出来るのでしょうか?
わかりにくい回答ですいません。
>> 2: Hamaji-Be-Legendさん
トビックのご質問の文章の意味がわかりませんでした。

> サイズが変更された時にだけ反応するんですよね?
_____
「ウインドウのサイズ」を変えたときに、イベントは発生します。まずは、以下をお読みください。

「Stage.onResizeリスナーイベント」
http://www.fumiononaka.com/TechNotes/Flash/FN0307003.html
> 2フレーム目からはもうサイズが変化してないから自分で
> サイズを変更しなければ駄目なんでしょうか?

そうなっちゃいます(汗) ただそれだと使い勝手が悪いですよね。
僕の場合、resize関数をリサイズのタイミングに加え、
3フレーム目でも実行します。



つまり、流れを説明すると

1.1フレーム目

  リサイズ時に myStageHeight, myStageWidth を変更
  risize()実行。各インスタンスの位置を変更

2.3フレーム目
  
  risize()実行。各インスタンスの位置を変更

という感じです。


3,4,5…フレームに渡りインスタンスのリキッドレイアウト調整が必要な場合はonClipEvent(enterFrame){}でフレーム毎にresize関数を呼び出してもいいかもしれません。
teaさんありがとうございます。
頑張って返信している間に書いて頂いたみたいで(((・・;)
今、それで出来るか試します。
teaさん
僕の解釈が間違っているのか、onClipEvent(enterFrame){}のなかに設定しても出来ないです。
やはり初心者には早かったのか。。。
レイアウトを変える妥協を考えてます。w
そうですかあせあせ(飛び散る汗)ちなみにHamajiさん、制作されてる内容はお急ぎです?
今日は少し時間があるので、復習がてらFlash MX2004で再現してみたいと思いますが…たらーっ(汗)
http://www.flash-jp.com/modules/newbb/viewtopic.php?topic_id=9421&forum=8

HTML側の設定に問題があるような気がしますが。
一点気になるのですが、
myStageHeight = Stage.height;
myStageWidth = Stage.width;
の二行、ここでStage.heightとStage.widthがうまく取得できていない
ということはないでしょうか。
もしかしたら記憶違いかもしれないですが、ブラウザによっては
フレーム読み込み時の初期値としてこの二つの変数が取得できない
仕様だったような。

たとえばプログラム的には冗長になるのですが動作確認として
function resize(H,W){
の下の行に
H = Stage.height;
W = Stage.width;
と追加してみたとしても正常動作しませんでしょうか?
HTML側で、100%指定していないので、
Stage.height, Stage.width をいくら取得しても、
サイズ固定されたままなのでは?
お二方のアドバイス中に失礼します。
そうですね。ひろゆきさんのおっしゃっているHTML側の指定も不可欠ですね。

あと、Flash側の動作はこちらでも再現してみました。(ひふみさんのアドバイスも参考にさせていただきました)
ちょっと説明した記述と異なりますが、より単純なコードにしてみましたので、あしからずです(汗)
今回の例ではLineというムービークリップを表示画面一杯に表示してみます。


myStageHeight = Stage.height;
myStageWidth = Stage.width;

resize(myStageHeight,myStageWidth);

Stage.scaleMode="noScale"
Stage.align = "TL";
myListener = new Object();
myListener.onResize = function() {
myStageHeight = Stage.height;
myStageWidth = Stage.width;
resize(myStageHeight,myStageWidth);
}

Stage.addListener(myListener);

//フレーム毎にリキッドレイアウト調整を行う。
_root.onEnterFrame = function(){
resize(myStageHeight,myStageWidth);
trace("フレーム毎調整");
}

function resize(H,W){
//ひふみさんのアドバイス
H=Stage.height;
W=Stage.width;

if(Line._height != H){
//ステージサイズとLineの高さが異なるとき、サイズ調整を行う。
trace("リキッドレイアウト調整を行います。");
Line._height = H;
Line._y=0;
}
}
皆さんありがとうございました!!
無事出来ました♪
本当に嬉しいです。

ひろゆきさん
コメントありがとうございます。
そして恥ずかしい所を見せてしまいました。。。
ルールを守らないのはよくないですね。マルチポストをしてしまい本当にすいません。
たぶん深いに感じた人も居られると思います。
皆さんにお詫び申し上げます。。。
htmlの方に関しては、検討しました。
今の所無事解決出来てfirefoxとsafariとoperaでは無事反応しています♪
html側ではjsの外部ファイルによって100%になっています。
もし一定のサイズより小さくなるとレイアウトが重なってしまうのでswffit,swfobjectを使って一定のサイズ以下になったらスクロールバーが出てサイズが変更されないようにしています。(他にやり方がわからないんです。。)


ひふみさん
コメントありがとうございます。
今の所自分の試せるブラウザでは大丈夫ですが、もしものときがありますので、参考にさせて記述させてもらいます。ありがとうございます。

teaさん
本当にありがとうございます。
teaさんの内容を見て自分の所にない部分を解釈し、解決出来ました。
本当に最初から最後までお世話になりました。


最後にどのように解決したかというと、
最初私が書いたのものに変更はせず、

//フレーム毎にリキッドレイアウト調整を行う。
_root.onEnterFrame = function(){
resize(myStageHeight,myStageWidth);
trace("フレーム毎調整");
}

というteaさんのご指摘を記述すると、解決出来ました。
本当にみなさんありがとうございました。

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

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

Flash Action Script 更新情報

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

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

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