No.10 初期状態の作成
04 OnLoad動作 〜 レイヤーへの適応 〜
 
 実際の表示ルーチンは、40ライン程度で構成されるそれほど複雑ではない構造になっています。
 下図のスクリプト一覧から、重点をピックアップして説明していこうと思います。

「line 701〜740」


  var LayerLocationCount = 0;
  for (Count =0 ; Count < FileCount ; Count ++){
    if (LayerBeing[Count]){
      ReadCookie(Count,0)
      XX2 = rCx;YY2 = rCy;
      if ( (XX2== -1) && (YY2 == -1 ) ){
        if (D_Locat[Count]) {
          XX2 = parseInt(D_Locat[Count] ,10 );
          for (Y_count=0 ; Y_count < D_Locat[Count].length ; Y_count ++){
            if ( D_Locat[Count].charAt(Y_count) == "," ){
              YY2 = parseInt( D_Locat[Count].substr( Y_count+1 , 4) ,10);
              break;
            }
          }
        } else { 
          XX2 = "NON"; YY2 = "NON"; 
        }

        if ( isNaN(XX2) ) { XX2 = LayerResetState[0] +
                             (LayerLocationCount * LayerResetState[1]) }
        if ( isNaN(YY2) ) { YY2 = LayerResetState[2] +
                             (LayerLocationCount * LayerResetState[3]) }
      }

      In_Move( Count , XX2 , YY2);
      In( ("Hopup_Message" + Count) ,DisplayData[Count],Count);

      LayerLocationCount++;
    }
  }
  zIndexDispose()
  zIndex_Compares();
  Display_Msg(0);

  setCookie("LAYNUM",(LayerCount+ "_"+FileCount ),Days);
  setCookie("LAYTTL",LayerTotal,Days);

レイヤーの存在確認  「Line 705」



 存在を判定するには、「layerBeing[] 」配列を用います。この配列は、レイヤーを作成する際に、存在するレイヤー番号に対して「 true 」を埋め込むように組まれています。 この配列を用いることによって、存在しないレイヤーの情報を書き込むといったエラーを回避することができます。
 レイヤーの存在に関する式は

「line 705」


  if (LayerBeing[Count]){ 〜 }

 で、この条件文に合致した場合にのみ、レイヤーの数値算出を行うようになっています。

Cookie情報の確認  「Line 706〜708」



 Cookieから情報を呼び出すには、「 ReadCookie() 」ファンクションを用いますが、このファンクションに関しては別章で詳細を説明するとして、ここでは割愛します。
 ReadCookie(Count,0)  を指定すると、レイヤー番号「 Count 」に対するX座標とY座標を取得することが出来ます。

「line 706〜708」


  ReadCookie(Count,0)
  XX2 = rCx;YY2 = rCy;
  if ( (XX2== -1) && (YY2 == -1 ) ){ 〜 }

 「 ReadCookie() 」での数値取得においては、Cookie 情報が存在しなかった場合には、それぞれの値を「−1」とする設計になっています。 Cookie情報の記録の性質上、X座標のみ、もしくはY座標のみしか記録されないといったことは無いので、ここでは数値の一致に関する条件式を1つにまとめています。
if ( (XX2== -1) && (YY2 == -1 ) ){ 〜 } は、以上の事から、Cookieが存在しなかった場合に発動する条件文になるわけです。

Cookiefが存在しなかった場合の座標設定  「Line 709〜723」



 さて、座標情報に関しては製作者のステータスよりCookieのほうが必ず優先されるので、Cookie上にステータスが存在しなかった場合にのみ、製作者のステータスを設定するスクリプトが動作することになります。

「line 709〜719」


  if (D_Locat[Count]) {
    XX2 = parseInt(D_Locat[Count] ,10 );
    for (Y_count=0 ; Y_count < D_Locat[Count].length ; Y_count ++){
      if ( D_Locat[Count].charAt(Y_count) == "," ){
        YY2 = parseInt( D_Locat[Count].substr( Y_count+1 , 4) ,10);
        break;
      }
    }
  } else { 
    XX2 = "NON"; YY2 = "NON"; 
  }

 製作者ステータスは、「 D_Locat[] 」配列上に、「”100,200”」といった文字列で記録されています。 製作者側の設定を簡略化するためのものですが、このため、数値を取り出すには文字列からの切り出しを行う必要があります。
 このスクリプトの動作原理は前ページで解説した物と同じで、区切り記号を認識して、その後ろの数値を代入するといった形になります。

「line 710」


    XX2 = parseInt(D_Locat[Count] ,10 );

 X座標の取得は、普通に文字列を数値に変換するだけで問題ありません。 これは、parseIntの項で解説した通り、数値以外の文字列以降の情報は破棄されるため、「”100,200”」といった座標情報の場合、数値として「100」が代入されるからに他なりません。問題はY座標ですが、これも、「,」記号の後ろの数値を取ればよいので、

「line 711〜716」


  for (Y_count=0 ; Y_count < D_Locat[Count].length ; Y_count ++){
    if ( D_Locat[Count].charAt(Y_count) == "," ){
      YY2 = parseInt( D_Locat[Count].substr( Y_count+1 , 4) ,10);
      break;
    }
  }

 上記のように、
   D_Locat[Count].charAt(Y_count) == ","
で記号を検出し、そのあとの番号である
   Y_cont + 1 の値以降の数値を 
   YY2 = parseInt( D_Locat[Count].substr( Y_count+1 , 4) ,10);

として算出することで可能となります。



 さて、製作者が「D_state[] 」へデータを記録しなかった場合ですが、この場合、別の数値を代入する必要があるので、

「line 717〜719」


  } else { 
    XX2 = "NON"; YY2 = "NON"; 
  }

 上記のように代替文字列として「NON」を代入しています。()

最終的な値の入力  「Line 721〜722」



 Cookie にも、製作者の個別のステータスも存在しなかった場合、そのレイヤーをどの位置にどのように配置するか、最終的なレベルでの値を決めなくてはなりません。 ここでは、その為の値としてこのスクリプトが組み込まれています。

「line 721〜722」


  if ( isNaN(XX2) ) { XX2 = LayerResetState[0] +
                 (LayerLocationCount * LayerResetState[1]) }
  if ( isNaN(YY2) ) { YY2 = LayerResetState[2] +
                 (LayerLocationCount * LayerResetState[3]) }

 具体的には、「基準の左上値 + レイヤーの実際の表示順序 × 倍率」 の計算式を用い、そのうちの
   基準の左上値倍率を、ユーザーが指定することになります。
 

情報の反映とCookie記録  「Line 725〜740」



 さて、最終的には何らかの形でレイヤーの表示情報を作成することが出来たので、最後にレイヤーの数値を、実際の画面上へ配置するスクリプトを動作させます。

「line 717〜719」


      In_Move( Count , XX2 , YY2);
      In( ("Hopup_Message" + Count) ,DisplayData[Count],Count);

      LayerLocationCount++;
    }
  }
  zIndexDispose()
  zIndex_Compares();
  Display_Msg(0);

  setCookie("LAYNUM",(LayerCount+ "_"+FileCount ),Days);
  setCookie("LAYTTL",LayerTotal,Days);

   In_Move() ファンクション は、レイヤーの座標の変更を、
   In() ファンクション は、レイヤーの表示状態を、それぞれ反映します。

 表示が完了した後、startwindow() ファンクションの終了際に
   zIndexDisposr()ファンクションでzIndexの値を適応し、
   zIndex_Compares()ファンクション
で、zIndexの値の補正を、必要に応じて行っていくわけですが、これらは別章で説明するとして、ここでは割愛します。



ページの最上段へ移動します