Perl5-CGI

アクセス数   Since 25-Jan.-2002 全頁累計:  全頁日毎:   Web初安打:

本サイトは開いた頁の画像を効果的に魅せる術を模索しながら作成しています。

Java系アプリケーションや、CGIなどのスクリプトを実行させている関係で表示完了まで時間が掛かるページがありますので御了承下さい。

ブラウジングはInternetExplorerについてはVer.11以上でFireFox、Operaで可能です。Edge、Safariは未確認です。IE11以前のバージョンでは正常に表示されない場合があります。

Java実行環境のセキュリティ強化、Flashアプリケーションが2020年末でサポート終了になるため、JavaScriptで代替実装しています。HTML5には未対応です。

Windowsの画面は1024×768、ブラウザの文字サイズは中[M]が標準です。画面サイズが小さいと表示が崩れることがあります。表示エラーの対処はこちら


更新日:2023/01/01

Copyright (c)2005-2023 "o9chan4" ALL RIGHTS RESERVED.

  

■JavaVMの代替としてのFlash-ActionScript

Microsoft JVMがサポートされなくなったのでWeb上にFlash-ActionScriptを実装評価した。ActionScript等で記述するよりはJava

の方が自由度が高く感じるが、ActionScript言語のバージョンが上がりJavaの様なクラスを導入したことで少し柔軟性が出てき

た。記述はJavaScriptと似ているが常にフレーム、レイヤー、タイムラインなどを考えないといけないのは少し面倒に思う。アプリ

ケーションソフトはMacromedia製の物にした。Flashを実装してもフェードイン、フェードアウトアニメーションだけで使用するのは勿

体無い。と言ってもアニメーションでしか使わないだろう。

下のFlashカウンターはページヘッダのカウンターと同じ物です。

  

■上記Flashカウンターの構成

cgiに文字列出力方法を指定してコマンド発行

◆cgiオプション指定

aa.cgi?xx=op0&zz=op1

◆total

Array:

[0][0][0][0][0][0]

◆day

Array:

[0][0][0]

cgiが出力する文字列形式で変数をセット

◆cgi出力

total=123456

or

day=987

cgiから送られて来る文字列は可変長であるから後ろ詰め

◆total

Array:

[1][2][3][4][5][6]

or

◆day

Array:

[9][8][7]

G

I

F

9 ・・・
8 ・・・
7 ・・・
6 ・・・
5 ・・・
4 ・・・
3 ・・・
2 ・・・
1 ・・・
0 ・・・

 

[1] [2] [3] [4] [5] [6]
total or day出力指定

変数ロード完了イベント待ち

文字列を桁毎に分解 1桁目 2桁目 3桁目 4桁目 5桁目 6桁目

子Movie: reqValue

loadVariables(URL)

子Movie:getFrameNum

 文字列を配列へ変換

子Movie:selClmImg

gotoAndStop(桁毎のindex値)

 

cgiを起動:

子Movieで「桁制御」に進める:

↑↓ ↑↓ ↑↓ ↑↓ ↑↓ ↑↓
親Movie

変数初期化後停止

子Movieの文字列処理の完了待ち 桁処理後、次の桁へコマ送り 停止
親フレームNo. 1 2 3 4 5 6 7

時間軸→t

   

◆親フレームに配置するMovieClip

main MovieClip

reqValue

getFrameNum

selClmImg

変数初期化のみ実行

 

変数は_parent.**で参照する。

SWFが初期化され、親フレームが動作を開始するとコマンドがcgiへ送られる。 親フレームに配置した「reqValue」を右クリックして表示されるメニューのアクションにイベントハンドラを書く。cgiから「total=123456」と文字列を受け取ったら、イベントハンドラで文字列処理をし親フレームの配列に保存する。 フレーム1にスクリプトを書いてある。MovieClipが再生されると親フレームのclm[桁インデックス]を順次参照してイメージを表示する。「数字0」のイメージを表示させるにはframe=2にジャンプさせる。

桁数分配置する。

var count;
var id = 0;
var frm = 1;
var dispClms = 5;

clm = new Array(dispClms+1);
       :

       :

Stop();

loadVariables(

"http://myhomepage.com/aa.cgi?mode=op1",

this,"post");

 

onClipEvent(data){

  _parent.count = this.total;

  len = _parent.count.length;

       :

       :

  _parent.clm[0] =1;

  _parent.clm[1] =2;

  _parent.clm[2] =3;

  _parent.clm[3] =4;

  _parent.clm[4] =5;

  _parent.clm[5] =6;

//action end;

_parent.frm++;
_parent.nextFrame(_parent.frm);

}

this.gotoAndStop(_parent.clm[_parent.id++]+2);

if(_parent.id>_parent.dispClms){
       :

       :
_parent.stop();
}else{
_parent.frm++;
_parent.gotoAndStop(_parent.frm);
}

CGIに限らずASP、PHP等のサーバーサイドスクリプトも同じ手法で作成出来る筈です。

※実装の詳細はHow-to本を参照下さい。プログラムのソースは公開していません。

 参考書籍:ActionScript+CGIプログラミング[ソフトバンクパブリッシング社]にも作成方法の記述があります。参考にしてください。

  

■HTMLからFLASH-ActionScriptの内部変数を指定する

最終目的がフレームアニメーションの実装ではなくどちらかと言えば「Java仮想マシン」の代替だからHTMLからFLASHのAction 

Scriptへパラメータ渡しでムービークリップ全体を制御したかった。1つのSWFファイルだけで汎用的に使用出来ないと不具合が

発見された時、SWFファイルの修正作業が面倒になってしまう。「Java仮想マシン」の代替として使用するかどうかはこれらがクリ

ア出来るかであった。

<OBJECT WIDTH="xx" HEIGHT="xx" classid="d27cdb6e-ae6d-11cf-96b8-444553540000" ・・・>
 <PARAM NAME=movie VALUE="movie.swf">
 <PARAM NAME=quality VALUE=high>
 <PARAM NAME=bgcolor VALUE=#000000>

 <PARAM NAME=FlashVars VALUE="name1=op1&name2=op2&・・・">

  <EMBED src="movie.swf" FlashVars="name1=op1&name2=op2&・・・" ・・・></EMBED>

</OBJECT>

Macromedia社のWeb上でFLASHアプリケーションノートを探し、APPLETのパラメータ記述と同様の手法で、左記の様にすることで1ファイルで汎用性を持たせることが出来た。凝ったアプリケーションを作成しないのであればFLASH-ActionScriptで代替することは可能となった。変数は「&」を除いた形式、つまりSWFが初期化される時にActionScript内部変数としてそのままname1=op1、name2=op2とセットされるから都合が良い。

 

■フェードイン/フェードアウトアニメーション

<OBJECT classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=7,0,0,0" WIDTH="350" HEIGHT="235" id="movie" ALIGN="">

<PARAM NAME=movie VALUE="movie.swf">

<PARAM NAME=quality VALUE=high>

<PARAM NAME=bgcolor VALUE=#000000>

<PARAM NAME=menu VALUE=false>

<PARAM NAME=scale VALUE=noscale>

<PARAM NAME=FlashVars VALUE="pushswf=demo&repeat=3&intervl=1000&timeout=10000&autorun=yes&looping=yes&finout=yes">

<EMBED src="movie.swf" FlashVars="pushswf=demo&repeat=3&intervl=1000&timeout=10000&autorun=yes&looping=yes&finout=yes" menu="false" scale="noscale" quality=high bgcolor=#000000 WIDTH="350" HEIGHT="235" NAME="movie" ALIGN="" TYPE="application/x-shockwave-flash" PLUGINSPAGE="http://www.macromedia.com/go/getflashplayer"></EMBED>

</OBJECT>

MovieClipの割り当て 抜粋SAMPLE

timeupId = setInterval(s1,intv1);
alphaCntIntvId = setInterval(s2,intv2);

var loadingStatus:Object = new Object();

var imgLoader:MovieClipLoader = new MovieClipLoader();

//最大ロードイメージ数8枚

for(i=0;i<8;i++){

  imgLoader.addListener(loadingStatus);

           :
}
//MovieClipをプログラムで配置
for(j=0;;j++){
  this.attachMovie(name1,name2,deepth++);
  name2._alpha = 0;
   if(j ==
repeat){                              //html指定のロード終了数検出
    break;
  }
}

stop();

 

MovieClipImgLoader  抜粋SAMPLE

_root.imgLoader.loadClip(_root.imgURL+pushswf,this);
stop();

ActionScriptでアルファー値制御によるフェードイン/フェードアウトアニメーション

表示インターバル:1秒、表示イメージ:4枚、イメージロードタイムアウト:10秒、アルファー値は4ステップ変化

タイムアウトでローディングを停止させるとダイアルアップ接続条件で問題が生じる。ActionScriptのステータスチェックタイマーは10mSではなく100mSという大き目にしてある。このインターバルでMovieClipのdeepthアルファー値制御も含め全て行う。

親フレームに空のムービークリップをプログラムで配置し、それに階層を付けてjpegイメージをロードして行く。

メソッドは親フレームのフレーム1に全て書いてある。ActionScriptの記述はインターバルタイマーを割り込みに使用した機器組込み用ファームウエア的にした。こちらのコーディング方法に慣れているので。FlashPlayer6以前ではjpegイメージのロードしたバイト数はActionScriptで検出出来るが、ロードするイメージの全バイト数が一体幾つなのかが求められないのは不都合。SWF内部に全バイト数値を持つのもHTMLのパラメータで指定するのも意図に合わないからローディングパーセント表示はしない。だからMovieClipLoaderクラスが使用出来るFlashPlayer7以上での再生を必修条件にした。

MovieClipLoadStatus 抜粋SAMPLE

loadingStatus.onLoadInit = function(name2:MovieClip){
   isImgLoadComplete();
}

loadingStatus.onLoadErr = function(name2:MovieClip,errCode:String){
   loadingError();
}

function isImgLoadComplete(){
         :
 name2._alpha = 100;
 startMovie();
}

 

■ActionScriptの実装

JavaAppletを使用するよりはFlashで実装した方がページの表現力を高く出来る点では有利。フレームアニメーションにしてしまうとSWFファイル

の再利用が出来ない。もし、ActionScriptを使用すれば汎用的に使える物が出来るのならば、その方が後々都合が良い。

本サイトのwebページに実装したActionScript

機能

Script仕様

備考

ページ・アクセスカウンター Microsoft-JVM廃止、HTML4.01でAPPLETタグが廃止になったからFlashのActionScriptで機能代替。イメージ表示形式はアプレット・カウンターと同じにしてある。カウント値のイメージ表示のみを行い、カウント仕様変更はCGIスクリプト側で行う。レンタルサーバー/プロバイダー側ではアクセスカウンターを用意してあることが多く自作する必要性はない。 カウンター本体は

CGIプログラム

アルファー値制御アニメーション アルファー値の変化が少ないのでフェードイン/フェードアウトが少し荒い。もう少し細かく出来るがやり過ぎはCPUに負担が掛かる。アニメーションは該当するMovieClipの_levelかdeepthに対してアフファー値を透明〜不透明とすることで行う。  
Flash・イメージローダー

<IMG>タグを使用せず、Scriptで画像をロードする。

ページに貼り付けてあるイメージの不用意なドラッグ&ドロップはサポートしない。対応させる場合はActionScriptの記述にて管理をする。

イメージローダーと言う素材として利用。

 

Home

目次| 更新情報

編集後記| Article| Link| 壁紙Sample| Guest

Music| 撮影テーマ| My写真| 海釣り| 釣行メモ| 40cmOverへの道