プロが教える店舗&オフィスのセキュリティ対策術

関連した質問で恐縮です。

・シーン1
  ┗Thumb_nail(ムービーインスタンス)
    ┗スクロールバー( sc_ bar )
    ┗ sheet(ムービーインスタンス)
      ┗target(画像読み込み用ダミームービーインスタンス)

targetを複製しながらJPEGファイルを読み込んでいます。(ファイルが存在するまで)

そのScriptは全てThumb_naliのタイムラインのアクションです。

<1フレーム>
var i = 1 ;
var e_flg = 0 ;

function Sheet_Scrolling() {
sheet._x = sc_bar.getScrollPosition()*(-1) + 0 ;
}
sc_bar.setChangeHandler("Sheet_Scrolling");


<3フレーム>
var fileload:LoadVars = new LoadVars();
fileload.load("b"+i+".jpg");
fileload.onLoad = function(success:Boolean) {
 if (!success) {
  e_flg = -1;
 }
 else {
  e_flg = 1 ;
 }
};


<5フレーム>
switch(e_flg ) {
 case 0:
  gotoAndPlay(4) ;
  break ;

 case 1 :
  sheet.target.duplicateMovieClip("b" + i, i) ;
  sheet["b" +i].loadMovie("b" + i+ ".jpg") ;
  sheet["b" +i]._name = "b" + i ;
  sheet["b" +i]._x += (i - 1) * 90 ;
  i++ ;
  e_flg = 0 ;
  gotoAndplay(3) ;
  break ;

 case -1:
  sc_bar.setScrollProperties(50, 0, (i-1)*90-360);
  stop() ;
  break;

 default:
  break ;
}


ここからが本題なのですが、読み込んだJPEGが押下された時のアクションはどこでどのように記述するのかご教授願えませんでしょうか?。(試した内容は文字数制限で書けません。)

A 回答 (5件)

フレーム5の case -1: に、




 for( no = 1 ; no <= ( i - 1 ) ; no++ )
 {
  sheet[ "b" + no ].onPress = function ()
  {
   /*ここにクリックされた時の処理を書く*/
  };
 }


こんな感じで、いかがでしょうか。
変数名 i は、for 文のループカウンタとしてよく使われます。i でなければならない理由は特にないのですが、プログラムの世界では古くからの慣習になっています。
ファイル数をカウントする変数は、分かりやすい別の名前を付けるといいと思いますよ。

この回答への補足

いつもありがとうございます。

case-1のところで、お教え頂いたScriptを記述し、
「_root.gotoAndPlay(10) ;」を追加しました。
ここで、選ばれたサムネイル画像の拡大版(ここで別のファイルを読込みます。)とSpec(テキスト)を下欄に表示しようと思います。

全てのサムネイル画像(Scroll対象のJPEG)のマウスの計上が変化するようになりましたが、反応しません。
「_root」と記述すると、シーン1のタイムラインにジャンプすると言う認識でしたが間違いでしょうか?。

どうぞ宜しく御願いします。

補足日時:2004/09/09 11:02
    • good
    • 0

・・・間違い探しゲームのようで何ですが、落ち着いて、よーく見てください。



 sheet._x = sc_bar.scrollPosition * ( -1 ) + 0;

です。


 > sheet._x = sc_bar.scrollPosition()*(-1) + 0 ;
                  ▲

scrollPositionのすぐ後についている()を削除してください。これで直ると思います。
    • good
    • 0
この回答へのお礼

ありがとうございます。
scrollPosition()とscrollPositionの意味が分かっていないようです。

お陰様でScrollBarの件は一件落着しました。

また、別の問題が発生しましたので、新たに質問させて頂きます。


どうぞ宜しくお願い致します。

お礼日時:2004/09/11 01:31

落ち着いて、例として挙げたスクリプトをよく見てください。


http://okweb.jp/kotaeru.php3?q=989128 の#3からコピーしてきたものです。

 function Sheet_Scrolling()
 {
  sheet._x = sc_bar.scrollPosition * ( -1 ) + 50;
 }


 sheet._x = sc_bar.scrollPosition * ( -1 ) + 50;
            ▲
 > sheet._x = sc_bar.getScrollPosition()*(-1)    + 50 ;
             ▲

似ていて紛らわしいのですが、getScrollPosition() ではなく scrollPosition です。scroll の s が小文字になりましたので、この間違いにもご注意を。
UIScrollBar コンポーネントでは、getScrollPosition はなくなりました。
sheet の中心点(左端)が Thumb_nail の中心点にくるように配置している場合は、+50 は不要です。

-----------

解説書の件はあまり参考にならないと思いますが、まあ、一応書きますと。
私は、「サンプルで学ぶ!Flash5J 」で描画とアニメの基本を、「 GO!GO!FLASH5 [ゲームを作ろう編]」で ActionScript の基本を勉強しました。
いつかもちょっと書きましたけれど、Flash 5 の時代の本ですので入手も困難でしょうし、MX や MX 2004 が主流の今では内容も不足です。
Flash 5 の頃には、target.onPress = ・・・ の書き方はありませんでした。これを知ったのは、「 ActionScript+CGIプログラミング」という本でした。「 GO!GO!FLASH5 [ゲームを作ろう編]」と同じ、森 巧尚さんの著書です。
外部ファイルとのやりとりも触れられており、今でも入手は可能ですが、Flash とCGIの Perl の連携がテーマですので、入門用としてはオススメできません。
MX 2004 では解説書は卒業し、ヘルプで調べながらやっています。ところどころ大ボケな間違いがあるのも、このためです(すみません ^^;)

変数や関数については、C言語や Java など、アプリケーションの開発にも使われているプログラミング言語の解説書の方が詳しいかもしれませんね。
ちなみに私がC言語を勉強した時にお世話になったのは、林 晴彦さんの「新C言語入門」という本です。
当時はスーパービギナー編・ビギナー編・シニア編・応用編の4冊から成るシリーズでした。
スーパービギナー編は、本当に何も知らない、ビギナー編も早い人向けに書かれており、私もこれで関数や変数・制御文( for ・ if ・ switch など)のことを勉強しました。
C言語の解説書ではベストセラーで、シリーズの構成は変わっているかもしれませんが、今でも改訂・重版されているようです。

ActionScript の構文や思想は、Java を模していると言われています。その Java の元になったのはC++という言語で、C++はC言語を発展させたものです。
ActionScript で、各ステートメントを”;”で区切る・コメントの入れ方・制御文・演算子などは、C言語と全く同じです。関数の扱い方も、一部を除けば同じです。
また、ActionScript 2.0 になって取り入れられた、fileload:LoadVars =・・・のように”:”で区切って変数の型を明示するスタイルは、おそらく Java のスタイルだと思います。
C言語や Java と ActionScript は違う言語ではありますが、似ているところはたくさんあります。C言語や Java の解説書でも、役に立つところはあるかもしれません。

余談ですが。
出版関係の方のお話では、解説書の価格は1000~2000円台が基本とのことでした。3000円以上の本はよほどの内容でない限り買う人が少なく、売り上げも見込めないそうです。
私が見た限り、3000円以上の解説書は確かに内容が高度で、明らかにターゲットを上級者やプロに絞っている本が殆どでした。
財布の都合もありますけれど(^^ゞ)、3000円以上の本は、特に初心者の頃にはやはり買う気がしません。買っても理解できないくらい難しく、ムダになる可能性も高いからです。
最近は、全ページフルカラー印刷の写真・図版付きで厚さも分厚く、コストの面で3000円を超えている本(アプリケーションの全機能を解説した、辞書的な本に多い)もありますが、1色刷りまたは2色刷り程度でページ数もそれなりなのに3000円以上もする本は、中・上級者向けの難しい本と見てよさそうです。
ちょっと変わった面からの判断基準ですが、ご参考までに。

万人が絶賛した本でも、自分にとっては役に立たなかった、というのは、よくある話です。
また、いくら本を読んでも、実際にやってみなければ結局理解できないのは、プログラミングもアプリケーションの使い方も同じです。
いきなり難しいものから作ると挫折してしまいますから、簡単な作品を途中で投げ出さないで完成させて、少しずつステップアップしていくといいと思いますよ。

この回答への補足

色々教えて頂いているのですが、UI ScrollBarだけが解決しません。

function Sheet_Scrolling() {
 trace("function call") ;
 sheet._x = sc_bar.scrollPosition()*(-1) + 0 ;
}

on(scroll) {
 _parent.Sheet_Scrolling();
}

Script上は問題無いと思うのですが。スライダを動かすと正しくTraceが出力されるのですがSheetが動いてくれません。

この1ヶ月程度で質問させて頂いた内容を全て網羅した1本のFlashファイルを作成する事が出来ました。
カテゴリー・サブカテゴリーの条件選択を各々のシーンで実行し、指定された条件にてサムネイル表示のシーンにて
外部ファイルからJPEGを読込み、スクロールバーを付けて表現し、選ばれたら拡大表示とJPEGの説明テキストを表示、マウスクリックにて別コンテンツにジャンプする。

あともう一歩です。

どうぞ宜しく御願い致します。

補足日時:2004/09/10 13:58
    • good
    • 0

> ちなみに、UI ScrollBarのScriptってMXのScrollBarのものと、全然違うのでしょうか?。



全く違うとは言いませんが、一部が変更になりました。
”スライダが動いた時にスクロール処理が実行される原理”と、”スライダの位置情報を得る方法”が、大きく変更されました。UIScrollBar に移行するには、スクリプトの変更が必要です。
詳しくは http://okweb.jp/kotaeru.php3?q=989128 の#3に書いておきました。そちらを参考にして移行してください。なお、#3の回答の一部に誤りがあり、申し訳ありませんでした。


スクリプトの大文字・小文字の区別は、きちんとした方がいいでしょう。案外あいまいな解釈ですので、上手くいったりいかなかったりと動作が不安定になり、不具合の原因にもなります。
「アクション」ウィンドウでは、キーワードや識別子になっている文字には色が付きます。
gotoAndPlay など、Flash で提供されているメソッド等を記述して文字の色が変わらなかったら、それはつづりや大文字・小文字が違っているということです。入力する時の目安にしてください。
ちなみに配色は、「編集」→「環境設定」の「 ActionScript 」のタブで変更できます。

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

_root のフレーム 10 でインスタンス thumb_nail が持っている変数を利用する場合は、その時点でインスタンス thumb_nail が _root のタイムラインに存在していることが条件になります。フレーム 10 では消えているけれど、フレーム1では存在していたんだから、という理屈は通用しません。

thumb_nail での no という変数は、for 文を使うための、ただのループカウンタです。まあ、ファイルを数える変数に変更なさったとしても、要するに単なるカウンタとして利用としているだけですよね。
最終的な値は最後にファイルを読みに行った時の数、例えば画像ファイルが5つあったのなら6が入っています。ですから、_root からこれを参照しても、何番目のサムネイルがクリックされたかを知ることはできません。

_root のフレーム1に、変数を1つ用意してください。ここでは仮に、item_no とします。初期値はとりあえず0でいいでしょう。
次に、#1で紹介した for ループを、次のように変更してみてください。
(ファイル数を no 、ループカウンタを i とします)


 for( i = 1 ; i <= ( no - 1 ) ; i++ )
 {
  //サムネイルの管理番号を設定
  sheet[ "b" + i ][ "image_no" ] = i;

  sheet[ "b" + i ].onPress = function ()
  {
   //クリックされたサムネイルの番号を記録
   _root.item_no = this.image_no;

   _root.gotoAndPlay( 10 ); 
  };
 }


sheet[ "b" + i ][ "image_no" ] = i; で、サムネイルの各ムービークリップに image_no という変数が定義されます。この変数には通し番号が入ります。
クリックされた時にこの変数の中身を別の変数に記録しておくと、_root の方でも、何番目のサムネイルがクリックされたのかを知ることができます。
また、この管理番号を受け取る変数を _root に置いておけば、フレーム 10 で thumb_nail がなくなっていても利用できます。


変数・関数の利用方法、関数が実行されるタイミング・変数の値がどのように参照されるかなどは、ActionScript の基本中の基本です。
今ひとつピンとこないようでしたら、ActionScript の基本に詳しい解説書や解説サイトのURLなりを手に入れて、しっかり研究してください。
UI コンポーネントの制御や外部ファイルからの読み込みは難度が高く、手を出すなら基本は既にマスターしていることが大前提になります。
頑張ってください。

この回答への補足

1.Thumb_nailの1フレームのフレームアクションと
  sc_bar(コンポーネント)のアクションに以下を記述。

  function Sheet_Scrolling() {
   trace("function call") ;
   sheet._x = sc_bar.getScrollPosition()*(-1)    + 50 ;
  }

  on(scroll) {
   _parent.Sheet_Scrolling();
  }

  結果は変わりませんでした。


2.環境設定で、識別子やキーワードを赤にすると良く分かりますね。


3.へぇ、このようにムービークリップに変数を定義出来るんですね!。


4.DPEさんのように基本に詳しいなるための解説書を教えて頂けませんか?。
  色々書店を廻って物色しましたが、書店毎に扱う書籍が違うし、何が自分に合っているのかが分かりません。

 皆さん異口同音に「自分で見て良いと思った物を」と言われますが、何も知らない者にとっては何が良いのかが分かりません。(もう3冊も購入しましたが、あまり役立つものじゃなかったようです。)

 DPEさんが習得された書籍などをご教授頂けませんか?。


どうぞ宜しくお願い致します。

補足日時:2004/09/09 22:45
    • good
    • 0

サムネイル画像をクリックした時に、シーン1のフレーム 10 に移動したい、ということで、よろしいでしょうか?



まず、フレームの移動が正常にできているかどうかを確認してください。
フレーム 10 でのファイルの読み込み等のスクリプトはコメントにして一時的に無効にしておき、フレーム 10 であることが分かる絵などを適当に描いて確認するといいでしょう。
移動するスクリプトは _root.gotoAndPlay( 10 ); で間違いはないので、おそらく移動はできていると思います。
フレームの移動が問題なくできているのであれば、移動した先での処理が上手くいっていないために、何も変化していないように見えるだけではないでしょうか。

この回答への補足

_root.gotoAndPlay( 10 ); 文の前と、ルートの10フレームのフレームアクションにTrace文を挿入して試してみましたが、10フレームのTrace文は表示されませんでした。

ちなみに、UI ScrollBarのScriptってMXのScrollBarのものと、全然違うのでしょうか?。
今は、Scriptは以前のままにしてコンポーネントだけはUI ScrollBarにしている為にScrollBarをスライドしてもサムネイルは動きません。


case -1:
 sc_bar.setScrollProperties(50, 0, (var_ctr-1)*90-360);
for( no = 1 ; no <= ( var_ctr - 1 ) ; no++ ) {
sheet[ "b" + no ].onPress = function () {
_root.gotoAndPlay(10) ;
};
}
stop() ;
break;

あっ、この補足を書いている時に「gotoAndPlay」の「Play」が「play」(pが小文字)になっていたので大文字に変更したら正しく動きました。
でも、この同じCase文の中で、読み込みを待つ為に前のフレームに戻ったり、次のJPEGを読む為に読み込みを行なっているフレームに戻したりしている箇所では「play」のままで正常に動いていたので、全然気が付きませんでした。
こんなものなのでしょうか?。

補足日時:2004/09/09 15:15
    • good
    • 0
この回答へのお礼

あのぅ、ちょっと違う事なのですが、サムネイル画像をクリックした時にシーン1の10フレームに移動させる際に、何番目のサムネイルがクリックされたのかを情報として渡したいのですが、どのようにすれば宜しいのでしょうか?。10フレームのScriptで_root.thumb_nail.noと記述すると「undefined」になってしまいます。

CASE-1でループ処理をしながら関数を記述しましたが、あそこでは「no」と言う変数は確定していないと言う事でしょうか?。

お礼日時:2004/09/09 16:03

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!