• 締切済み

fhashフルブラウザサイトのページ移動で困ってます、、

フルブラウザの固定配置サイトを勉強してます。【CS4、AS3】 過去掲載http://oshiete1.goo.ne.jp/qa5140171.html を参考にさせてもらってます。 TOPページはうまくいったのですが ページ移動で別のページにいくと背景画像(TOPと別画像)が原寸表示になってしまいます、、(なぜかブラウザ画面自体をさわると直るのですが) 当方の浅い考えでは 各背景画像MCのインスタンス名を同じ「back_mc」にしているからと思っていますが、そうしないと表示もできません、、 どなたか教えてください。 よろしくお願いします。 以下は1フレーム目に書いているソースです。 添付はフレーム画面です。 stage.scaleMode = StageScaleMode.NO_SCALE; stage.align=StageAlign.TOP_LEFT; var bw:Number = back_mc.width; var bh:Number = back_mc.height; function arrangeMC():void{ var sw:int = stage.stageWidth; var sh:int = stage.stageHeight; //以下固定配置分 contents_mc.x = sw/24; contents_mc.y = sh/2+20; menu_mc.x = sw-60; menu_mc.y = sh/2-30; footer_mc.y = sh-10; if(bh/bw > sh/sw){ back_mc.width = sw; back_mc.height = bh/bw*sw; }else{ back_mc.height = sh; back_mc.width = bw/bh*sh; } } arrangeMC(); function stageOnResize(evt:Event):void { arrangeMC(); } stage.addEventListener(Event.RESIZE, stageOnResize);

  • Flash
  • 回答数2
  • ありがとう数4

みんなの回答

回答No.2

#1です スイマセン、多分ちょっとズレてましたね いくら同じMC内の同じ名前であっても 違うシンボルのインスタンス 違うキーフレームに置かれているインスタンスは別物です どっかのキーフレームのback_mcがリサイズされたところで ほかのback_mcのサイズはそのままです なのでページ移動でgotoAndStopして 背景のback_mcが別のものになったときにも arrangeMC()を実行せねばならない訳ですが ここでレス1の問題がでてくるワケです back_mcが別のクラス(シンボル)の インスタンスに入れ替わるとき gotoAndStopした直後には一時的に back_mcはなくなってしまうんです だからback_mcの入れ替えを待つか あるいはback_mcを入れ替えしなくても いいようにしようというわけです

回答No.1

タイムラインに途中から出現した インスタンスはgotoAndStop直後にはアクセスできません 一度ENTER_FRAMEもしくはインスタンスのADDED_TO_STAGEを 待ってからフルスクリーンのメソッドを実行してください とはいえアクセスできないのでは ADDED_TO_STAGEのリスナー登録も しようがないので前者でやることになりますが 一瞬だけリサイズされてない状態のフレームが出現する事になります そのあたりは初期位置を画面外に置くなりして 適宜対応してください どうしても気に入らないときは各back_mcに タイムライン以外からアクセスできるようにするか あるいは同じMCの中に各背景を入れて 適宜gotoAndStopする作りにするかです

maeda_005
質問者

お礼

回答ありがとうございます! ただ当方の知識では完全に理解できず・・・ 一番実現しやすいのは >あるいは同じMCの中に各背景を入れて >適宜gotoAndStopする作りにするかです だと思ってback_mc内にすべてを入れ込みましたが 「未定義のプロパティback_mcのアクセス」と表示されてしまいます。 メインフレームにフルスクリーン、固定配列のasを書いて ムービークリップ1つに各ページgotoAndStopをする、、 ということだと思うのですがどうもうまくいきません。 恐れ入りますが具体的に教えていだければありがたいです。 何度もすいません、よろしくお願いいたします。

関連するQ&A

  • ブラウザサイズに合わせてオブジェクトをリサイズする方法について

    FLASH CS3 ActionScript3.0での質問です。 http://oshiete1.watch.impress.co.jp/qa5140171.html の質問を参考に 背景画像がブラウザサイズにより拡大縮小するFLASH制作を 試みたのですが、下記のエラーとなってしまいます。 TypeError: Error #1009: null のオブジェクト参照のプロパティまたはメソッドにアクセスすることはできません。 at sb_fla::MainTimeline/arrangeMC() at sb_fla::MainTimeline/sb_fla::frame1() 上記URLページを参考にすこしだけ変更して // ムービー内の拡大縮小なし stage.scaleMode = StageScaleMode.NO_SCALE; // 整列の基準を左上にする stage.align = StageAlign.TOP_LEFT; // 「back_mc」 の初期横幅と高さを変数に記録しておく var bw:Number = back_mc.width; var bh:Number = back_mc.height; // MC を整列させる関数 arrangeMC を定義 function arrangeMC():void{ // // ローカル変数 sw にステージの幅を代入 var sw:int = stage.stageWidth; // ローカル変数 sh にステージの高さを代入 var sh:int = stage.stageHeight; // // 「loader_mc」をステージ中央に配置 loader_mc.x = sw/2; loader_mc.y = sh/2; // // 「main_mc」をステージ中央に配置 main_mc.x = sw/2; main_mc.y = sh/2; // // 「galleryback_mc」をステージ下に配置 main_mc.x = sw/2; galleryback_mc.y = (sh-sh)+720; // // 「back_mc」をステージの "幅に合わせて" リサイズ back_mc.width = sw; back_mc.height = bh/bw*sw; // 「galleryback_mc」をステージの "幅に合わせて" リサイズ galleryback_mc.width = sw; } // 上で定義したarrangeMCを即実行 (初期表示用) arrangeMC(); // 関数 stageOnResize を定義 function stageOnResize(evt:Event):void { // 上で定義したarrangeMCを実行 (リサイズ時用) arrangeMC(); } // ステージにイベントリスナーを登録 //引数(ステージリサイズ時に実行、実行関数stageOnResize) stage.addEventListener(Event.RESIZE, stageOnResize); というふうにしました。 タイムライン上には loader_mc. main_mc galleryback_mc(サイズ変更) back_mc(サイズ変更) のムービークリップを配置しています。 今回のエラーについていろいろ調べたのですが ActionScriptよりのムービークリップ配置ではなくじかにタイムライン上に配置することが問題なのでしょうか・・・ エラー回避できませんでした・・・ なにとぞご回答よろしくお願いいたします。 またこの他に良い方法があれば是非お教え下さい。

  • ActionSccript3.0 クラスについて

    Flash 初心者です。 現在AS3を勉強して半年くらいになります。一通り仕組みは理解できたのですが、2つのクラスを合わせて使うときに詰まってしまいました。内容は、 フルフラッシュで背景画像はリサイズ可能でメニュー・フッター等のサイズが固定のクラス 『BgSet.as』 package { import flash.events.Event; import flash.display.*; import flash.text.TextField; import flash.display.StageAlign; import caurina.transitions.Tweener; public class BgSet extends MovieClip { private var parH:Number; private var parW:Number; public function BgSet() { init(); } private function init():void{ stage.scaleMode = StageScaleMode.NO_SCALE; stage.align = StageAlign.BOTTOM_RIGHT; var bw:Number = back_mc.width; var bh:Number = back_mc.height; function arrangeMC():void{ var sw:int = stage.stageWidth; var sh:int = stage.stageHeight; menu_mc.x = sw; main_mc.x = sw/2; main_mc.y = sh/2; footer_mc.y = sh; logo_mc.x = sw; logo_mc.y = sh; back_mc.width = sw; back_mc.height = bh/bw*sw; } arrangeMC(); function stageOnResize(evt:Event):void { arrangeMC(); } } } } と、 背景画像にビットマップでドットを敷き詰めるクラス 『BgBtm.as』 package { import flash.display.BitmapData; import flash.display.Sprite; public class BgBtm extends Sprite { public function BgBtm() { var bmd:BitmapData = new BitmapData(3, 3, true, 0x00ffffff); bmd.setPixel32(0, 0, 0xffffffff); bmd.setPixel32(1, 1, 0xffffffff); var sp:Sprite = new Sprite(); sp.graphics.beginBitmapFill(bmd, null, true, false); sp.graphics.drawRect(0, 0, 1200, 1200); sp.graphics.endFill(); addChild(sp) } } } この二つのクラスを一つずつ実行することは問題なく出来るのですが、二つの.asファイルを『Main.as』から呼び出して実行しようと思いフォルダ『MyProgram』に入れました。 それぞれ package MyProgram{ として、 Main.asは package { import flash.display.MovieClip; import MyProgram.*; としたまでは良かったのですがこの先でつまづいています。。 ここまでで出てきた問題は、 1、BgSetのback_mc・menu_mcへアクセス出来ない。 2、BgBtmのビットマップが表示されない 3、仮にBgSetをflaファイルのドキュメントクラスに定義してBgSet.as内からBgBtmをnewして実行した場合でもビットマップが表示されない。 ということが起きています。 Main.asファイルをいろいろと書き換えて試しているのですが答えが出ません。 どなたかご教授お願い致します。

    • ベストアンサー
    • Flash
  • FLASH アクションスクリプト

    画面のサイズを拡大縮小しても 常にセンターに表示させる アクションスクリプトで質問がございます。 back_mcが【背景】 main_mcが【オブジェクト】 _root.main_mc._x = ( Stage.width - _root.main_mc._width ) /2; _root.main_mc._y = ( Stage.height - _root.main_mc._height) /2; このアクションスクリプトで【オブジェクト】が最初から常にセンター表示になる事は分かるのですが、例えば座標x600 y500で始まるようにするのはどうしたら良いのでしょうか。 下記のアクションスクリプトでは、【オブジェクト】がx600 y500の位置に最初はあるのですが画面のサイズを拡大縮小してもピクリとも動きません。 Stage.align = "TL"; Stage.scaleMode = "noScale"; Stage.addListener(this); this.onResize = function() { _root.main_mc._x = 600;( Stage.width - _root.main_mc._width ) /2; _root.main_mc._y = 500;( Stage.height - _root.main_mc._height) /2; _root.back_mc._width = Stage.width; _root.back_mc._height = Stage.height; } this.onResize(); いまいち分かりにくい質問ですが伝わりますでしょうか。 分かる方、宜しくお願い致します。

    • ベストアンサー
    • Flash
  • AS3でステージのサイズ変えた時にムービークリップが減速して中央に移動

    AS3でステージのサイズ変えた時にムービークリップが減速して中央に移動するFlashの作り方で悩んでいます。 参考にしてるものはこれなんですが↓ http://hfm-kenchan.com/Lesson/sample/centermovie11/top.htm これをActionScript3で作ろうと今現在このようにコーディングをしています。 ※my_mc:ステージ中央にあるムービークリップ stage.align=StageAlign.TOP_LEFT; stage.scaleMode=StageScaleMode.NO_SCALE; stage.addEventListener(Event.RESIZE, resize_control); function resize_control(eventObject:Event):void { my_mc.x = (stage.stageWidth - my_mc.width)/2; my_mc.y = (stage.stageHeight - my_mc.height)/2; const spd:Number=1/5; my_mc.addEventListener(Event.ENTER_FRAME, center_movie); function center_movie(event:Event):void { my_mc.x += ((stage.stageWidth - my_mc.width)/2 - my_mc.x)*spd; my_mc.y += ((stage.stageHeight - my_mc.height)/2 - my_mc.y)*spd; } } 現在はリサイズするとmy_mcはステージ中央にいるのですが参考にしてるものみたいに減速して中央に移動するというものが作れません。 どうしたらいいのかどなたかアドバイスしていただけませんか? よろしくお願いします。

    • ベストアンサー
    • Flash
  • 特定のムービークリップの上で キラキラがランダムに発生

    お世話になります。 あともう少しのところでうまくいきません。 質問はタイトルの通りなんです。本や、サンプルをいろいろ研究して、 キラキラがランダムに発生するスクリプトを書いたんです。 何がしたいかというと、ムービークリップ「mc_stage」の上だけにキラキラをランダムに発生させたいんです。 sw = mc_stage._width; sh = mc_stage._height; level = 1; this.onEnterFrame = function() { if (Math.random()*10>9) { level++; newname = "Fwks"+level; Fwks.duplicateMovieClip(newname, level); this[newname]._x = Math.random()*sw; this[newname]._y = Math.random()*sh; } if (level>8) { this.onEnterFrame = undifined; } }; この形だと、mc_stageの幅と高さを取得するだけで、座標を取得していません。なので、ステージの左上からmc_stageのwidthとheightの範囲できらきらが発生してしまいます。 どうしたらきちんとmc_stageの上だけでランダムに発生させれますか?ぜひおしえてください!

    • ベストアンサー
    • Flash
  • ランダムに mcを連続attachMovieさせるアニメ

    MX2004初心者です。 ライブラリにsakura_mc(10フレーム)があります。 さくらの花びらが手前に飛んでくるこまアニメです。 //乱数生成関数 function rndInit(maxNum){   var a = math.random();   var b = Math.ceil( a*maxNum );   return b; }  MC = "sakura"  SW = Stage.width;  SH = Stage.height; this.onEnterFrame = function(){   if( rndInit(10) == 1 ){   count ++;   newName = MC + count;   attachMovie( "sakura_mc", newName, 1 );   //表示位置の設定   this[ newName ]._x = Math.random()*SW;   this[ newName ]._y = Math.random()*SH;    } }  この方法だと、sakura_mcがステージ上ランダムな位置に連続で再生 してくれます。  ただ、二つ以上のsakura_mcを同時にステージに再生はしてくれません。  sakura_mcを同時にいっぱい再生させたい場合はどうすればよいでしょうか?  sakura2_mcをつくって同じ命令を追加してもダメでした。  よろしくお願いします。

    • ベストアンサー
    • Flash
  • AS2 ランダムに出現する煙

    初めて質問させてもらいます。 FLASHのActionScriptで画面下から画面上へ昇っていく煙をランダムに出現させるASを作成したのですが、動き的には満足しているのですが開始時に画面に一気に煙がですぎになります。 煙のない状態から始めるには何を付け加えればいいのかわかりません。 どなたかご教授願えるかたお願いいたします。 環境 FLASH cs3.AS2にて製作 ソース ・タイムライン ----------------------------------------------- for (var i = 0; i<10; i++) { snow.duplicateMovieClip("snow"+i, i); } ----------------------------------------------- ・mc ----------------------------------------------- onClipEvent (load) { sw = Stage.width; sh = Stage.height; th = this._height; this._x = Math.random()*sw; this._y = Math.random()*sh; speed = Math.random()*4+1; flick = Math.random()*4+1; rotate = Math.random()*1; } onClipEvent (enterFrame) { this._y -= speed; this._x -= flick; this._rotation +=rotate; if (this._y<-869.8) { this._y = 1400; } if (this._x>sw+th || this._x<-th) { this._x = Math.random()*sw; this._y = -th; } } ----------------------------------------------- よろしくお願いいたします。

    • ベストアンサー
    • Flash
  • acttionscript2.0から3.0へ。。。(-.-)

    acttionscript2.0から3.0へ。。。(-.-) どなたか、AS2.0で記述されたスクリプトをAS3.0に書き換えていただけないでしょうか? ユーザーのモニター解像度・大きさに合わせてブラウザー内で100%・ フルスクリーンで表示させたい場合、 どういったActionScriptを書けばいいのかと考えて 2.0でのスクリプトは手に入ったのですが。。 すいません、どなたかよろしくお願いいたします。 Stage.align = "LT"; Stage.scaleMode = "noScale"; function LayOut() { _root.MC_Logo._x = 50; _root.MC_Logo._y = 50; _root.MC_CopyRight._x = Stage.width - _root.MC_CopyRight._width- 20; _root.MC_CopyRight._y = Stage.height - 20; _root.MC_main._x = (Stage.width - _root.MC_main._width)/2;// x 座標を中央にスクリプトで計算。 _root.MC_main._y = (Stage.height - _root.MC_main._height )/2;// y 座標を中央にスクリプトで計算。 } myListener = new Object(); myListener.onResize = function() { LayOut(); break; }; Stage.addListener(myListener); LayOut(); stop();

    • ベストアンサー
    • Flash
  • removeChild()についてご教授願います。

    AS3.0の初心者です。 Stratボタン、Stopボタンで以下のスクリプトで表示と非表示を繰返ししたいのですが、 Stopボタンで、単にremoveChild();にしますと、 「#2025: 指定した DisplayObject は呼び出し元の子でなければなりません。」 とエラーとなります。 色々と調べてみたのですが、よく判判りません。 Stopボタンの記述をどの様にすればよいのでしょうか? 初歩的質問で大変恐縮ですが、どうかご教授お願い致します。 [メインスクリプト] var stageH = stage.stageHeight; var stageW = stage.stageWidth; //Stratボタン start.addEventListener(MouseEvent.MOUSE_DOWN,gene); function gene(e:Event):void { for (var i = 0; i < 20; i++) { var mc:Candy = new Candy(); mc.x = Math.random()*stageW + 10; mc.y = Math.random()*stageH + 10; addChild(mc); } } //Stopボタン stop.addEventListener(MouseEvent.MOUSE_DOWN,stp); function stp(e:Event):void { removeChild(mc); この部分がよく判らないのですが、 どの様に記述したら良いのでしょうか? } --------------------------------------- [mc のスクリプト] var mcH:int = this.height; var mcW:int = this.width; var stageH = stage.stageHeight; var stageW = stage.stageWidth; var speedY:uint = Math.random() * 5 + 5; var speedX:uint = Math.random() * 2; addEventListener(Event.ENTER_FRAME,loop); function loop(Event):void { y += speedY; x += speedX; if ( y > stageH ) { y = - mcH; } if ( x > stageW ) { x = - mcW; } } -----------------------------------------

    • ベストアンサー
    • Flash
  • ASで降らせた雪のマスクの掛け方について。

    下記のサイトのASを使用させていただき、雪の降るFlashを作成したのですが、 参照サイト : http://www.webdesignlibrary.jp/2006/06/flash_snow.php このスクリプトで降らせた雪を、例えば星型の図形をマスクにして、 その範囲内で雪が降るようにしたいと思い、 色々と丸一日掛けて調べたのですが、全く上手く行きません。 とりあえず、色々と調べてみた結果、 【 xxx.setMask 】 を使えば良いのだろうか・・?、、、と言う所までは 行き着いたのですが、スクリプトを、どう改造?してみても、全く思う結果が得られません。 【 _root.setMask 】 で、ステージ全体を、目的の図形MCでマスクする事で、 思う結果に近しいカタチは出来たのですが、_root.setMask でステージをマスクしてしまうと、 例えば、マスク外に何か画像処理を施したくても、マスク外の画像は全て消えてしまいますし、 その画像の大きさ込みでマスクを作成すると、その画像の上にも雪が降ってしまうので、 完全に行き詰ってしまっています。 ASで降らせた雪だけをマスクする方法はありますでしょうか? どなたか、ご存知の方がいらっしゃいましたらば、 是非にご教示願えますと、大変ありがたいです。  何卒よろしくお願い申し上げますm(_ _)m 以下、使用AS ------------------------------------------------ width = 550; height = 400; total = 200; for (var t = 0; t != total; t++) { var mc = _root.attachMovie("snowflake", "snowflake"+t, _root.getNextHighestDepth()); mc._x = (Math.random()*(width+20))-10; mc._y = (Math.random()*(height+20))-10; mc.yspeed = (Math.random()*1.75)+0.25; mc.speed = (Math.random()*3)+2; mc._xscale = mc._yscale=(mc.speed+mc.yspeed)*10; mc.onEnterFrame = function() { var angle = Math.atan2(_root._xmouse-(width/2), _root._ymouse)+1.5707963267949; this._y += Math.sin(angle)*this.speed+this.yspeed; this._x += Math.cos(angle)*this.speed; if (this._x>width+10) { this._x = -10; } else if (this._x<0-10) { this._x = width+10; } if (this._y>height+10) { this._y = -10; } else if (this._y<0-10) { this._y = height+10; } }; } ------------------------------------------------ 【 AS使用環境 】 Adobe Flash CS3, アクションスクリプト2.0

    • ベストアンサー
    • Flash