• 締切済み

AS初心者です。フレームループするメニューを作りたいのですが・・・

■環境 WindowsXP/FLASH 8pro/AS2.0 ■実現したいフラッシュのあるサイト http://www.first-jp.com/ このサイトの上部にあるスクロールしているFLASHです。 かなりの初心者なのですが、本を参考にして作っています。 まだまだ完成にはほど遠いのですが、現段階でこのような状態です。 http://dragstarnavi.web.fc2.com/navi/navi.html ■構造 メインのタイムライン1フレーム目に下記のASを記述。 メインのタイムライン1フレーム目にボタンを設置(MC可、左は「left-botton」右は「right-botton」) ■メインタイムラインに記載しているAS var obj_array:Array = new Array(); //配列の生成 var center:Number = Stage.width/2; //ステージ中心X座標 var menu_num:Number = 4; //メニュー数 var maxlength:Number = 800*menu_num; //メニュー列の最大幅 var friction:Number = -0.02; //マウス移動時の摩擦値 //XMLオブジェクトの生成と外部XMLの読み込み var obj_xml:XML = new XML(); //XMLオブジェクトの生成 obj_xml.onLoad = start_me; //ロードアクション(コールバックを定義) obj_xml.ignoreWhite = true; //XMLファイルの空白、改行などを無視 obj_xml.load("scrollslide.xml"); //外部XMLファイルを読み込む //XMLのロード成功可否を判断 function start_me(success:Boolean):Void { if (success == true) { //読み込み成功 //サムネイルインスタンスの生成と設定 for (var i = 1; i<=menu_num; i++) { var menu_str:String = "menu"+i; obj_array[i] = _root.attachMovie("menu", menu_str, i); //インスタンスを設定 obj_array[i].num = i; //インスタンスを配列で管理 obj_array[i]._x = 800*(i-1); obj_array[i]._y = 0; //XMLからJPG名を読み込む var jpg_str:String = obj_xml.firstChild.childNodes[(i-1)*2].firstChild; //XMLからURLを読み込む var link_str:String = obj_xml.firstChild.childNodes[i*2-1].firstChild; obj_array[i].jpg_mc.loadMovie(jpg_str); //外部JPGロード obj_array[i].onEnterFrame = scrollphoto_me; //イベントアクション obj_array[i].onPress = press_me; //イベントアクション obj_array[i].onRollOver = roll_me; //イベントアクション obj_array[i].onRollOut = rollout_me; //イベントアクション obj_array[i].onRelease = release_me; //イベントアクション obj_array[i].link = link_str; } } else { seltext = "xml read error"; //エラー } } function release_me():Void { trace(this.link); getURL(this.link, "_parent"); //同ウインドウ内でURLを読み込む } //サムネイルインスタンスのフレームループ function scrollphoto_me():Void { var speed:Number = (_root._xmouse-center)*friction; //マウスの移動量 var vx:Number = this._x+speed; if (vx<=-800) { //ステージ左に消えたら vx += maxlength; //サムネイルの最後列の後ろへ移動 } else if (vx>=Stage.width+1) { //ステージ右に消えたら vx -= maxlength; //サムネイル最前列の前へ移動 } this._x = vx; updateAfterEvent(); } //サムネイルインスタンスのマウスロールオーバーアクション function roll_me():Void { this._alpha = 80; } //サムネイルインスタンスのマウスロールアウトアクション function rollout_me():Void { this._alpha = 100; } stop(); ■読み込んでいるXML <?xml version="1.0" encoding="utf-8"?> <jpeg> <jpegURL>images/image1.jpg</jpegURL> <link>http://yahoo.co.jp/1</link> <jpegURL>images/image2.jpg</jpegURL> <link>http://yahoo.co.jp/2</link> <jpegURL>images/image3.jpg</jpegURL> <link>http://yahoo.co.jp/3</link> <jpegURL>images/image4.jpg</jpegURL> <link>http://yahoo.co.jp/4</link> </jpeg> ■先人の皆様にご教授して頂きたい箇所 1.ループの変更   希望サイトのように、左から右に一定の速度で流れるようにしたい。   オンマウスにて完全にストップ。マウスアウトにてストップを解除。 2.ボタンの設置   メインタイムラインに新規フレームを作って左右のボタン  (left-botton right-botton)を設置し、MCに変換したのですが   早速問題で、読み込まれた外部JPGの背後になってしまっています。。   これを最前面に持ってきたいのです。   読み込む順番が問題なのでしょうか? 3.ボタンのアクション設定   左ボタン(left-botton)にて、左方向に加速。   右ボタン(right-botton)にて、右方向に加速。 何を無謀なチャレンジと思われるでしょうが、 宜しければご教授頂ければ幸いです。

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

みんなの回答

回答No.4

#1です。 片方向の制御ですが以下のように変更すればループできると思います。 ●旧 if (_global.gb_onoff == 0) {//変数gb_onoffが0の場合、 this._x += 1;//x軸方向に1進む } ●新 if (_global.gb_onoff == 0){ for (var i = 1; i<=menu_num; i++) { obj_array[i]._x += 1; if (obj_array[i]._x > 800){ obj_array[i]._x = obj_array[i]._x - 800 * menu_num; } } }

namagaeru
質問者

お礼

Tanigucchi様 ありがとうございます。 ループの方、何とかなりました。 後はボタンでの加速ですので、もう少しがんばってみます。 ご丁寧にありがとうございました。

回答No.3

#1です。 エラーですが、コメント文との間に全角ブランクがあります。 ほかにもありますので全角ブランクをすべて半角ブランクに 置換してみてください。 また、 obj_array[i]._x = 800*(i-1); obj_array[i]._y = 0; の部分は obj_array[i]._x = -800*(i-1); obj_array[i]._y = 0; されるとスクロール方向に対して後方に画像が並びます。 (または、スクロール方向を this._x -= 1;)

namagaeru
質問者

お礼

>Tanigucchi様 ありがとうございます。全角も削除しました。 おかげさまで、現在このような状態です。 http://dragstarnavi.web.fc2.com/navi/navi1.html しかし、今度は無限ループが機能しなくなりました。 _global.gb_onoff = 0; //初期状態は横スクロールOK _globalはどこからでも参照可能な変数 _root.jpg_mc._x = 0; _root.jpg_mc.onEnterFrame = function() { if (_global.gb_onoff == 0) {//変数gb_onoffが0の場合、 this._x += 1;//x軸方向に1進む } }; //サムネイルインスタンスのマウスロールオーバーアクション _root.jpg_mc.onRollOver = function() { _global.gb_onoff = 1; this._alpha = 80; }; _root.jpg_mc.onRollOut = function() { _global.gb_onoff = 0; this._alpha = 100; }; 上記をループさせるには、x座標が800を超えると、元の座標に戻るという式を書けば良いと思うのですが、else if で実現できるでしょうか。。

回答No.2

#1です。 大雑把には以下のような感じです。 (注:見易いように全角ブランクを入れています。ご利用の際は削除ください) 1.ループの変更  _global.gb_onoff = 0;  //初期状態は横スクロールOK  _root.jpg_mc._x = 0;  _root.jpg_mc.onEnterFrame = function(){    if (_global.gb_onoff == 0){      this._x += 1;    }  }  //サムネイルインスタンスのマウスロールオーバーアクション  _root.jpg_mc.onRollOver = function() {   _global.gb_onoff = 1;  //横スクロールさせない  };  _root.jpg_mc.onRollOut = function() {   _global.gb_onoff = 0;  //横スクロールOK  } 2. 読み込む画像が1枚になってしまいました?   for文の前で jpg_mc のサイズを menu_num * 800 に変えてみてください。   また、指定されている座標は、jpg_mc内の座標となりますのでご注意ください。

namagaeru
質問者

補足

>Tanigucchi様 入りきらないので、こちらに記載いたします。 何度もすみません。助かります。 ループと、マウスロールオーバーアクションを記述しましたが、 _global.gb_onoff = 0;  の行でエラーが出るようです。 それ以前のこちらでの記述が問題なのでしょうが、 どこが原因なのか分かりません。。 ▼メインフレームのAS var obj_array:Array = new Array(); //変数obj_arrayの初期化 var menu_num:Number = 4; //メニュー数 この数値は外部XMLに変換したいです。。 var maxlength:Number = menu_num * 800 ; //メニュー列の最大幅 ここを変更したのですが。。 //XMLオブジェクトの生成と外部XMLの読み込み var obj_xml:XML = new XML(); obj_xml.onLoad = start_me; obj_xml.ignoreWhite = true; obj_xml.load("scrollslide.xml"); //XMLのロード成功可否を判断 function start_me(success:Boolean):Void { //変数start_meがtrue or falseの場合 if (success == true) { for (var i = 1; i<=menu_num; i++) { var menu_str:String = "menu"+i; obj_array[i] = jpg_mc.attachMovie("menu", menu_str, i); //インスタンスを設定 obj_array[i].num = i; //インスタンスを配列で管理 //obj_array[i]._x = 800*(i-1); 800×(i-1)X軸方向に進む //obj_array[i]._y = 0; var jpg_str:String = obj_xml.firstChild.childNodes[(i-1)*2].firstChild; //XMLからJPG名を読み込む var link_str:String = obj_xml.firstChild.childNodes[i*2-1].firstChild; //XMLからURLを読み込む obj_array[i].jpg_mc.loadMovie(jpg_str); obj_array[i].onEnterFrame = scrollphoto_me; obj_array[i].onPress = press_me; obj_array[i].onRollOver = roll_me; obj_array[i].onRollOut = rollout_me; obj_array[i].onRelease = release_me; obj_array[i].link = link_str; } } else { seltext = "xml read error"; } } _global.gb_onoff = 0;  //初期状態は横スクロールOK _root.jpg_mc._x = 0; _root.jpg_mc.onEnterFrame = function(){ if (_global.gb_onoff == 0){ //変数gb_onoffが0の場合、 this._x += 1; //x軸方向に1進む } } //サムネイルインスタンスのマウスロールオーバーアクション _root.jpg_mc.onRollOver = function() { _global.gb_onoff = 1;  //横スクロールさせない }; _root.jpg_mc.onRollOut = function() { _global.gb_onoff = 0;  //横スクロールOK } flaデータもアップしております。(Flash 8Proです) 単純なことなのかもしれませんし、お手間を取らせますが ご指摘頂ければ大変助かります。 http://dragstarnavi.web.fc2.com/navi/navi.fla

回答No.1

概要だけ回答します。 1.ループの変更  onEnterFrame を利用すれば実現できます。 ストップのON、OFFは変数で制御ください  this.onEnterFrame = function(){   if(ONのとき){動け}  } 2.ボタンの設置  rootにインスタンスを配置していますのでそのような動きになります。  ボタンより下のレイヤに手でムービークリップを配置して、それに  対してインスタンスを配置します。  menubase_mc.attachMovie("menu", menu_str, i); 3.ボタンのアクション設定  加速は、移動距離に係数をかけてあげればよいだけですから、  1が実現できてから考えてください。

namagaeru
質問者

補足

>Tanigucchi様 長い羅列で読みづらいかと思います、ご親切にありがとうございます! しかし・・・早速つまづきました。 現在の状態です。 http://dragstarnavi.web.fc2.com/navi/navi.html 2については、ご指摘いただいたとおりrootにレイヤーを最下段に作って「jpg_mc」のMCを配置し、obj_array[i] = jpg_mc.attachMovie("menu", menu_str, i);と変更するとボタンが前面に出るようになりました。 しかし、読み込む画像が1枚になってしまいました。。 そして、 1でif文にてつまづいています。 _root.jpg_mc._x = 0; _root.jpg_mc.onEnterFrame = function(){ this._x += 1; } と追加し、横スクロールするようになったのですが、ここにマウスがオンすると動きを止めるという記述が分かりません。。。 大変お手間を取らせてすみません。よろしければご教授願えるでしょうか。 変更したソース: var obj_array:Array = new Array(); //変数obj_arrayの初期化 var menu_num:Number = 4; //変数menu_mcの値 メニュー数 この数値は外部XMLに変換予定 var maxlength:Number = 800*menu_num; //メニュー列の最大幅 //XMLオブジェクトの生成と外部XMLの読み込み var obj_xml:XML = new XML(); //変数obj_xmlの初期化 XML生成 obj_xml.onLoad = start_me; //変数obj_xmlは変数start_meを読み込む obj_xml.ignoreWhite = true; //変数obj_xmlはXMLファイルの空白、改行などを無視する obj_xml.load("scrollslide.xml"); //変数obj_xmlはXML(scrollslide.xml)を読み取る //XMLのロード成功可否を判断する function start_me(success:Boolean):Void { //変数start_meがtrue or falseの場合 if (success == true) { //読み込み成功した場合、 for (var i = 1; i<=menu_num; i++) { //変数iが1のとき、変数menu_num(4)よりiが小さければ(4回)下記を繰り返す var menu_str:String = "menu"+i; //変数menu_strは menu+i  obj_array[i] = jpg_mc.attachMovie("menu", menu_str, i); //変数obj_array(i)はインスタンスを設定 obj_array[i].num = i; //インスタンスを配列で管理 obj_array[i]._x = 800*(i-1); //変数obj_array(i)は800×(i-1)X軸方向に進む obj_array[i]._y = 0; var jpg_str:String = obj_xml.firstChild.childNodes[(i-1)*2].firstChild; //変数jpg_strはXMLオブジェクトからJPG名を読み込む var link_str:String = obj_xml.firstChild.childNodes[i*2-1].firstChild; //XMLオブジェクトからURLを読み込む obj_array[i].jpg_mc.loadMovie(jpg_str); //変数obj_array[i]は変数jpg_mcにjpg_strを読み込む obj_array[i].onEnterFrame = scrollphoto_me; //イベントが発生した時に行うイベントアクション obj_array[i].onPress = press_me; //クリックした時に行うイベントアクション obj_array[i].onRollOver = roll_me; //領域に入ったときに行うイベントアクション obj_array[i].onRollOut = rollout_me; //領域外に出たときに行うイベントアクション obj_array[i].onRelease = release_me; //クリックして離したときに行うイベントアクション obj_array[i].link = link_str; } } else { //読み込みに失敗した場合 seltext = "xml read error"; //読み込めなかったときに表示する } } //追加したスクロールの部分です。 _root.jpg_mc._x = 0; _root.jpg_mc.onEnterFrame = function(){ this._x += 1; } //変数 release_me function release_me():Void { trace(this.link); //URLを記述 getURL(this.link, "_parent"); //同ウインドウ内でURLを読み込む } //サムネイルインスタンスのマウスロールオーバーアクション function roll_me():Void { this._alpha = 80; } //サムネイルインスタンスのマウスロールアウトアクション function rollout_me():Void { this._alpha = 100; } stop();

関連するQ&A

  • XMLで画像を読み込むと巨大化します・・・

    Flash8にて、外部XML画像とURLを読み込みしています。 初の試みでして、たどたどしくも双方ともに読み込むところまでは皆様のこれまで作られたデータを基に作成出来たのですが、画像を読み込んだときに巨大化されてしまって困っています。 ▼XML --------------------------------------------------- <?xml version="1.0" encoding="utf-8"?> <jpeg> <jpegURL>images/image1.jpg</jpegURL> <link>http://yahoo.co.jp/1</link> <jpegURL>images/image2.jpg</jpegURL> <link>http://yahoo.co.jp/2</link> <jpegURL>images/image3.jpg</jpegURL> <link>http://yahoo.co.jp/3</link> <jpegURL>images/image4.jpg</jpegURL> <link>http://yahoo.co.jp/4</link> </jpeg> --------------------------------------------------- 800×250で画像を読み込みたいのですが、 読み込むと、すさまじく巨大化してしまっています。。 作ろうとしているのは、横にスクロールするナビゲーションです。 XMLで画像とリンク先を指定、画像は同じ階層に「img」というフォルダを作って入れています。 下記が、1フレーム目に記載しているASです。 ▼AS --------------------------------------------------- var obj_array:Array = new Array(); var center:Number = Stage.width/2; var menu_num:Number = 4; var maxlength:Number = 800*menu_num; //サイズ指定箇所 var friction:Number = -0.03; var obj_xml:XML = new XML(); obj_xml.onLoad = start_me; obj_xml.ignoreWhite = true; obj_xml.load("scrollslide.xml"); function start_me(success:Boolean):Void { if (success == true) { for (var i = 1; i<=menu_num; i++) { var menu_str:String = "menu"+i; obj_array[i] = _root.attachMovie("menu", menu_str, i); obj_array[i].num = i; obj_array[i]._x = 800*(i-1); //X座標 obj_array[i]._y = 0; var jpg_str:String = obj_xml.firstChild.childNodes[(i-1)*2].firstChild; var link_str:String = obj_xml.firstChild.childNodes[i*2-1].firstChild; obj_array[i].jpg_mc.loadMovie(jpg_str); obj_array[i].onEnterFrame = scrollphoto_me; obj_array[i].onPress = press_me; obj_array[i].onRollOver = roll_me; obj_array[i].onRollOut = rollout_me; //関数呼び出し obj_array[i].onRelease = release_me; obj_array[i].link = link_str; } } else { seltext = "xml read error"; } } function release_me():Void { trace(this.link); getURL(this.link, "_parent"); } function scrollphoto_me():Void { var speed:Number = (_root._xmouse-center)*friction; var vx:Number = this._x+speed; if (vx<=-800) { //ステージ左に消えたら vx += maxlength; //サムネイルの最後列の後ろに移動 } else if (vx>=Stage.width+10) { //ステージ右に消えたら vx -= maxlength; //サムネイル最前列の前に移動 } this._x = vx; updateAfterEvent(); } function roll_me():Void { this._alpha = 80; } function rollout_me():Void { this._alpha = 100; } stop(); --------------------------------------------------- サイズを指定している箇所に問題があるのでしょうか。 初心者でして、全く見当がつかず困っております。 もしよろしければ、先人の方たちにご意見とご指摘を頂ければと思います。宜しくお願いいたします。

    • ベストアンサー
    • Flash
  • 配列での管理について

    外部JPGファイル名が記述してあるXMLファイルを読み込んで,サムネイルインスタンスを生成したいと思います。 構想としては 1、読み込んだXMLファイルのノードの数(変数名:menu_num)を参照。 2、ノード数の分attachMovieメソッドでシンボル(識別子:thum-menu)の生成を繰り返す 3、生成したシンボルに含まれるムービークリップインスタンス(インスタンス名:jpg_mc)にloadMovieメソッドで外部JPGをロードする 途中まで作ったフレームアクションが下記の通りです。 // 1 System.useCodepage = true; var obj_xml:XML = new XML(); obj_xml.ignoreWhite = true; obj_xml.load("sample.xml"); obj_xml.onLoad = start_me; function start_me(success:Boolean):Void {    if (success == true) {    var nodeList:Array = obj_xml.firstChild.childNodes;    var menu_num:Number = nodeList.length; // 2. インスタンスの生成と設定   for (var i:Number = 1; i<=menu_num; i++) {    var menu_str:String = "thum-menu0"+i;     _root.attachMovie("thum-menu", menu_str, i);    trace(i); これ以降(行程2)で生成した複数のシンボルを配列で管理したいのですが、なかなかうまくいきません。どなたかおしえていただければ幸いです。 ちなみにXMLファイルのノード数の取得はちゃんとできてるようです。 使用ソフトは Flash 8 で ActionScript2.0 です。

  • マウスの基準点について

    www.i-tv.in/test/shop_menu.swf 上記のものスクリプトの参考書を見ながら作りました。マウスが摩擦をおく基準が上の方になっています。 これを中央にもっていきたいと思いましたが、このような単純なことは調べても出てきません。どなかた教えて頂ければ幸いです。宜しくお願いします。 function start_me(success:Boolean):Void { if (success == true) { for (var i = 1; i<=menu_num; i++) { var menu_str:String = "menu"+i; _root.attachMovie("menu",menu_str,i); obj_array[i] = eval(menu_str); obj_array[i].num = i; obj_array[i].mctext = i; obj_array[i]._y = 125*(i-1); obj_array[i]._x = 10; obj_array[i]._alpha = 40; var jpg_str:String = obj_xml.firstChild.childNodes[i-1].firstChild; obj_array[i].jpg_mc.loadMovie(jpg_str); obj_array[i].onEnterFrame = scrollphoto_me; obj_array[i].onPress = press_me; obj_array[i].onRollOver = roll_me; obj_array[i].onRollOut = rollout_me; } } else { seltext = "xml read error"; } }

    • ベストアンサー
    • Flash
  • 外部XMLからFlashに読み込んだ画像にリンクをつける方法

    初めまして。 この度初めて外部XMLをFlashに読み込むコンテンツを制作しており、最後の段階でハマっておりますため、皆様のお力をお借りできればと思い投稿させていただきました。 ちなみに制作環境はMac OS10.3、flashはCS3です。 よくあるパターンのflashによる横スクロールメニュー(画像がマウス操作で左右に流れるもの)を作成しておりますが、表示される10枚の画像をflash内ではなく、外部imagesフォルダに置いておき、XMLにてflash内に作成されたムービークリップに読み込み表示させるコンテンツで、表示されたそれぞれの画像に、やはりXML内に記述されたそれぞれ別のURLを指定して、クリックでジャンプさせようとしています。 横スクロールに関しては問題なく表示できましたが、問題はリンクです。traceでは10個のURLが戻ってくるのですが、実際に各画像をクリックしてみると、全ての画像が10番目のリンク先となってしまっています。 ネットでも色々調べてみたのですが、getURL(this.変数)ではなくgetURL(this._parent.変数)にする等試してみましたがうまくいきません。 下記にActionScriptとXMLファイルの内容を記載致しますので、ご参考の上、ご回答いただけましたらありがたく思います。 ~以下1フレーム目のフレームスクリプト~ var obj_array:Array = new Array(); var center:Number = Stage.width/2; var menu_num:Number = 10; var maxlength:Number = 120*menu_num; var friction:Number = -0.03; System.useCodepage = true; var obj_xml:XML = new XML(); obj_xml.onLoad = start_me; obj_xml.ignoreWhite = true; obj_xml.load("scrollslide.xml"); function start_me(success:Boolean):Void { if (success == true) { for (var i = 1; i<=menu_num; i++) { var menu_str:String = "menu"+i; _root.attachMovie("menu", menu_str, i); obj_array[i] = eval(menu_str); obj_array[i].num = i; obj_array[i]._x = 120*(i-1); obj_array[i]._y = 30; obj_array[i]._alpha = 70; var jpg_str:String = obj_xml.firstChild.childNodes[i-1].firstChild.firstChild; obj_array[i].jpg_mc.loadMovie(jpg_str); var jumpURL:String = obj_xml.firstChild.childNodes[i-1].lastChild.firstChild.nodeValue; jump = jumpURL; trace(jump); obj_array[i].onEnterFrame = scrollphoto_me; obj_array[i].onPress = press_me; obj_array[i].onRollOver = roll_me; obj_array[i].onRollOut = rollout_me; } } else { seltext = "xml read error"; } } function scrollphoto_me():Void { var speed:Number = (_root._xmouse-center)*friction; var vx:Number = this._x+speed; if (vx<=-120) { vx += maxlength; vx = Math.round(vx); } else if (vx>=Stage.width-5) { vx -= maxlength; } vx1 = Math.round(vx); this._x = vx1; updateAfterEvent(); } function press_me():Void { getURL(this.jump); } function roll_me():Void { this._alpha = 100; } function rollout_me():Void { this._alpha = 70; } stop(); ~以下XMLファイルの記述~ <?xml version="1.0" encoding="Shift_JIS"?> <jpeg> <jumpURL> <jpegURL>images/fla/image1.jpg</jpegURL> <URL>http://www.yahoo.co.jp</URL> </jumpURL> <jumpURL> <jpegURL>images/fla/image2.jpg</jpegURL> <URL>http://www.exnos.co.jp</URL> </jumpURL> <jumpURL> <jpegURL>images/fla/image3.jpg</jpegURL> <URL>http://www.sony.co.jp</URL> </jumpURL> <jumpURL> <jpegURL>images/fla/image4.jpg</jpegURL> <URL>http://www.toyota.co.jp</URL> </jumpURL> <jumpURL> <jpegURL>images/fla/image5.jpg</jpegURL> <URL>http://www.nissan.co.jp</URL> </jumpURL> <jumpURL> <jpegURL>images/fla/image6.jpg</jpegURL> <URL>http://www.honda.co.jp</URL> </jumpURL> <jumpURL> <jpegURL>images/fla/image7.jpg</jpegURL> <URL>http://www.mafdamino.com</URL> </jumpURL> <jumpURL> <jpegURL>images/fla/image8.jpg</jpegURL> <URL>http://www.nakata.net</URL> </jumpURL> <jumpURL> <jpegURL>images/fla/image9.jpg</jpegURL> <URL>http://www.nifty.com</URL> </jumpURL> <jumpURL> <jpegURL>images/fla/image10.jpg</jpegURL> <URL>http://www.adobe.com</URL> </jumpURL> </jpeg> 以上、よろしくお願致します。

    • ベストアンサー
    • Flash
  • ActionScriptのLoaderクラス

    以下、FLASHのカテゴリーがあることに気付かずに、プログラミング(その他)に投稿してしまいましたので、再投稿いたします。よろしくお願いいたします。 以下はActionScript3.0を用いたフォトギャラリーで、外部のXMLファイルに記述しているパスをFLASH上に読み込み、それを参照して外部のフォルダからサムネイル画像を読み込むプログラムの一部です。 おそらく、ActionScriptの超初歩的なことが分かっていないのだと思います。 申し訳ございませんが、ご教示ください。 1 var thumbLoader_obj:Loader; 2 for(var i:uint=0;i<8;i=i+1){ 3 var thumbBtn:MovieClip=this["btn0"+(i+1)+"_mc"]; 4 var thumbUrl:URLRequest=new URLRequest(imgThumb_arr[i]); 5 thumLoader_obj=new Loader(); 6 thumbLoader_obj.load(thumbUrl); 7 thumbLoader_obj.x=3; 8 thumbLoader_obj.y=3; 9 thumbBtn.addChild(thumbLoader_obj); 10 } 以上は配列:imgThumb_arrに格納しているサムネイル画像のパスを参照して、loadメソッドを用いて インスタンス:thumLoader_objに読み込んだサムネイル画像を、サムネイル画像の枠を格納しているインスタンス:thumbBtnにループ処理で配置させるプログラムです。 3行目からわかる通り、サムネイル画像の枠のインスタンス名はbtn01_mc~btn08_mcで、 7行目と8行目は単なるサムネイル画像と枠の配置調整のための座標設定です。 さて、質問なのですが、5行目の代わりに1行目を thumLoader_obj=new Loader(); と書いて、5行目をコメントアウト(もしくは削除)してもプログラム的には問題ないように初心者の私には思えてしまうのですが、このようにすると、最後のサムネイル枠(btn08_mc)にしかサムネイル画像が読み込まれません。最初の通りだとすべての枠に該当するサムネイル画像が読み込まれてうまくいきます。明らかなプログラム上の違いがあるのだと思いますが、調べてみても簡単には分かりませんでした。どなたか、お教えいただければ幸いです。

  • サブウィンドウのリンクに応じて親ウィンドウのセレクトメニューにデータを反映させる

    よろしくお願いします。 子ウィンドウ側の地下鉄南北線という文字リンクをクリックすると 00:北24条駅","01:札幌駅","02:大通駅"が親ウィンドウのセレクトメニューに反映されるように変えたいのです。下記のスクリプトを使ってどのように親ウィンドウと子ウィンドウに分ければいいのでしょうか? 駅名の数はそれぞれのリンクによって違います。 <html> <head> <title>セレクトメニューで選択したものに応じて2つめのセレクトメニューに反映させる</title> <script language="JavaScript" type="text/JavaScript"> <!-- var data = new Array(":交通",":地下鉄南北線",":地下鉄東西線",":地下鉄東豊線"); var data0 = new Array(":---"); var data1 = new Array("00:北24条駅","01:札幌駅","02:大通駅"); var data2 = new Array("10:西18丁目駅","11:西11丁目駅","12:大通駅","13:バスセンター前","14:東札幌"); var data3 = new Array("20:札幌駅","21:大通駅","22:豊水すすきの"); function SetList(objid, arr){ var obj = document.getElementById(objid); for(i=obj.length; i>=0; i--){ obj.options[i] = null; } for(i=0; i<arr.length; i++){ var a = arr[i].split(":"); obj.options[i] = new Option(a[1], a[0]); } } //--> </script> </head> <body onLoad="SetList('sel0', data);"> <form name="form1"> <select id="sel0" name="sel0" style="width:160px;" onChange="SetList('sel1', eval('data' + this.selectedIndex))"> <option>---</option> </select> <select id="sel1" name="sel1" style="width:160px;"> <option>---</option> </select> </form> </body> </html> どなたか教えていただける方がいましたらどうぞよろしくお願いいたします。

  • AS2 for文内のfunctionがうまくいきません

    今までフレームアクションと配布されているActionScriptの簡単なカスタマイズ程度しかしたことがないActionScript初心者です。 現在ActionScriptを使いこなせるようになるように勉強中なのですが、途中で躓いている部分があり、先に進めません。 ご存知の方、ご教授して頂けると幸いです。 ■したいこと 1.ライブラリから横一列にMC(btn_mc)を配置 2.btn_mc内にそれぞれサムネイル画像を読み込む 3.btn_mcをクリックするとサムネイルの拡大画像がnull_bgに読み込まれる といった簡易的なアルバムを作っている途中です。 ■スクリプト bar = menu_mc.content_mc.menu_bar; objA = new Array (); i = 0; sx = 0; for (x = 0; x < 33; x++) { str = "btn_mc" + String (i); objA[i] = bar.attachMovie ("btn_mc", str, i + 1); objA[i]._x = sx; sx += 80; var mc_name = "img/" + x + ".jpg"; bar[str].null_mc.loadMovie (mc_name); bar["btn_mc" + i].onRelease = function () { null_bg.loadMovie (mc_name); }; i++; } ■参考URL http://ft-lab.ne.jp/cgi-bin/wiki.cgi?page=%A5%E0%A1%BC%A5%D3%A1%BC%A5%AF%A5%EA%A5%C3%A5%D7%A4%CE%CA%A3%C0%BD_Flash こちらの「敷き詰め」を参考にしています。 ■環境 WINDOWS XP Adobe FLASH CS3 Professional ■躓いている点 したいこと2のサムネイル画像を読み込むところまでは成功したのですが、その先の「btn_mcをクリックするとサムネイルの拡大画像がnull_bgに読み込まれる」がうまくいきません。 traceで調べてみると、クリックしたMC・読み込み画像がどちらも「x」が33になってしまっているのですが、これはどうしてなのでしょうか? 初めての質問なので、文章に解り辛い点・不備があるかもしれませんが、どうぞよろしくお願いいたします。

    • ベストアンサー
    • Flash
  • 未選択のプルダウンメニューをアラートしたい

    過去に同じような質問もありましたが、いろいろ検索してこちらの過去ログを拝見しても解決できなかったので質問させてください。 フォームで未入力の項目に対してアラート&フォーカスされるようにしました。 ここに『住んでいる県』(プルダウン)を追加したいのですがどうしてもうまくいきません。 <script type='text/javascript'> <!-- function check(frm){ var hissu=Array('name','zip','sex'); var hissu_nm = Array('名前','郵便番号','性別'); var len=hissu.length; for(i=0; i<len; i++){ var obj=frm.elements[hissu[i]]; if(obj.type=='text' || obj.type=='textarea'){ if(obj.value==''){ alert(hissu_nm[i]+'は必須です'); frm.elements[hissu[i]].focus(); return false; } }else{ for(var j=0, chk=0; j<obj.length; j++){ if(obj[j].checked) chk++; } if(chk==0){   alert(hissu_nm[i]+'は必須です'); return false; } } } return true; } //--> </script> どうかお分かりになる方よろしくお願いいたします。

  • 日付範囲指定について

    よろしくお願いします。 年、月をコンボボックスで表示させ、選択できるようにしてあります。jsの内容は以下です。 ----------------------------------------------------- var ymin = 1950; var ymax = 2050; function getToday(){ var t = new Date(); var y = t.getYear(); if(1900 > y){y += 1900;} var m = t.getMonth()+1; var d = t.getDate(); fyear(y); fmonth(m); fday(d); } function fyear(thisyear){ var obj = document.getElementById('year'); ymin =ymin - 0; ymax =ymax - 0; var j = 1; for(i = ymin; ymax > i; i++){ var str = i.toString() + "年"; obj.options[j] = new Option(str); obj.options[j].value = i; if(i == thisyear){ obj.options[j].selected = true; } j++; } } function fmonth(thismonth){ var obj = document.getElementById('month'); for(i = 1; 12 >= i; i++){ var str = i.toString() + "月"; obj.options[i] = new Option(str); obj.options[i].value = i; if(i == thismonth){ obj.options[i].selected = true; } } } ----------------------------------------------------- これを利用して日付範囲指定(例として、2006年1月~2008年8月ような感じ)を行いたいのですが、可能でしょうか? 自分で試した方法ですと、前半(2006年1月)は表示できるのですが、後半(2008年8月)が表示できませんでした。 試したソースは以下 --------------------------------------------------- <!-- var ymin = 1950; var ymax = 2050; function getToday(){ var t = new Date(); var y = t.getYear(); if(1900 > y){y += 1900;} var m = t.getMonth()+1; var d = t.getDate(); fyear(y); fmonth(m); tyear(y); tmonth(m); } function fyear(thisyear){ var obj = document.getElementById('year'); ymin =ymin - 0; ymax =ymax - 0; var j = 1; for(i = ymin; ymax > i; i++){ var str = i.toString() + "年"; obj.options[j] = new Option(str); obj.options[j].value = i; if(i == thisyear){ obj.options[j].selected = true; } j++; } } function fmonth(thismonth){ var obj = document.getElementById('month'); for(i = 1; 12 >= i; i++){ var str = i.toString() + "月"; obj.options[i] = new Option(str); obj.options[i].value = i; if(i == thismonth){ obj.options[i].selected = true; } } } function tyear(thisyear){ var obj = document.getElementById('tyear'); ymin =ymin - 0; ymax =ymax - 0; var j = 1; for(i = ymin; ymax > i; i++){ var str = i.toString() + "年"; obj.options[j] = new Option(str); obj.options[j].value = i; if(i == thisyear){ obj.options[j].selected = true; } j++; } } function tmonth(thismonth){ var obj = document.getElementById('tmonth'); for(i = 1; 12 >= i; i++){ var str = i.toString() + "月"; obj.options[i] = new Option(str); obj.options[i].value = i; if(i == thismonth){ obj.options[i].selected = true; } } } //--> どうかよろしくお願いします。

  • 【AS3】配列を使って複数のボタンに別々のリンク先を指定するスクリプト

    【AS3】配列を使って複数のボタンに別々のリンク先を指定するスクリプトを教えてください。 配列を使って、btn1、btn2、btn3というインスタンスに それぞれ別のリンク先を設定したいと思っています。 実際には15個以上のリンクボタンを設置したいので、 配列を使ってできるだけ短いスクリプトにしたいです。 ---------------------------------------------- for (var i:int = 1; i < 4; i++) { this["btn"+i].addEventListener( MouseEvent.CLICK , onClick ); } function onClick( event:MouseEvent ) { var url:Array = new Array(); url[1]="http://www.yahoo.co.jp"; url[2]="http://www.google.co.jp"; url[3]="http://www.goo.ne.jp"; for(var i:int = 1; i < 4; i++){ if (this ["btn"+i]) { var link:URLRequest=new URLRequest(url[i]); var target:String="_self"; navigateToURL(link,target); } } } ---------------------------------------------- 上のように記述してみたのですが、全てのボタンが 配列一番最後のリンク先(url3)になってしまいます。 traceで「i」を出力してみると 1 2 3 と出るので、 for(var i:int = 1; i < 4; i++){}で 全て繰り返してしまっているらしいことはわかりますが どこをどう修正すればいいのかわかりません; 初心者で恐れ入りますが、易しくご教示いただけると幸いです。

    • ベストアンサー
    • Flash