info

category : FlashAS3
[SWFObject1.5]htmlへflashを貼り付ける  @ FlashAS3 , FlashAS3 Tips 2008年6月25日

すでに2.0もリリースされている便利なJavascriptですが2.0を使わず1.5を使っています。
理由は特に無いです。そして、使うときいつも書き方を忘れるのでメモ

<script language="JavaScript" type="text/javascript">
<!--
var installedVer=deconcept.SWFObjectUtil.getPlayerVersion();
var requiredver=9;
var requiredver2=45;

if(installedVer['major']==requiredver&&installedVer['rev']>=requiredver2
|| installedVer['major']>requiredver){
	var so=new SWFObject('swf/main.swf','main','1010','640','9.0.45.0','#ffffff');
	so.addParam('wmode','opaque');
	so.addParam('base','swf/');
	so.addParam('menu','false');
	so.write('flashcontent');
}else{
	プラグインのバージョンが低いときの処理
}
// -->
[Papervision3D]3Dオブジェクトにalphaプロパティを追加  @ FlashAS3 , Papervision3D 2008年6月25日

Papervision3DでFlashを制作しているとき、ふと気付いたのですが
3Dオブジェクトにalphaプロパティが無くて「透明→不透明」の演出が出来ないのです。
「MovieMaterial」でやることも出来ますが処理が重いのでNG
そこでPapervision3Dをちょこっといじってみました。いまのところ「BitmapMaterial」かつ「Plane」の
3Dオブジェクトだけつくりました。
下記のコードを追加すれば「alpha」プロパティが追加されて
不透明度を操作することが出来ます。しかも軽い!
ただ、BitmapDataのクローンを作成するので少しリソース食います
でかい画像をテクスチャにするときは使えないかもです。

ファイル名:Plane.as

public var cmf=new ColorMatrixFilter([1,0,0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0]);
private var _alpha:Number=1;
public function reset_alpha(){
	cmf=new ColorMatrixFilter([1,0,0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, _alpha, 0]);
	this.material.texture.applyFilter(this.material.bmpd, this.material.bmpd.rect, new Point(0, 0), cmf);
}
public function set alpha(v:Number):void{
	if(!this.visible)return;
	_alpha=((v<0)?0:v);
	cmf=new ColorMatrixFilter([1,0,0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, _alpha, 0]);
	this.material.texture.applyFilter(this.material.bmpd, this.material.bmpd.rect, new Point(0, 0), cmf);
}
public function get alpha(){
	return _alpha;
}
public function dipose_bmpd(){
	this.material.bmpd.dispose();
}

ファイル名:BitmapMaterial.as

変数を宣言
public var bmpd:BitmapData;

コンストラクタの該当部分を下記のようにする
if( asset ){
	texture = asset;
	this.bmpd=asset.clone();
}
[wmode][ExternalInterface]wmode:opaqueでポップアップブロック  @ FlashAS3 , FlashAS3 Tips 2008年6月1日

swfファイルをhtmlへ貼り付けるとき、
wmodeを設定しないと(デフォルト値だと)ブラウザ上で再生速度が遅くなります。
これを解決する方法としてwmodeをopaqueにするとよいですが、
IEで「navigateToURL」を使って新規ウィンドウに
リンクを開くとポップアップブロックにかかります。サンプルページ
そこで「ExternalInterface」を使用すればこの問題を解決することができます。
FlashCS3のヘルプには

ExternalInterface クラスは外部 API であり、ActionScript と Flash Player のコンテナとの間で
直接通信できるようにするアプリケーションプログラミングインターフェイスです。

と書かれています。よくわかりませんが、JavaScriptの関数とか実行できるということみたいです。
これをリンクを開くときに使うには下記のようなasファイルを用意して
ボタンがクリックされたときに「getURLex」にURLを渡して実行してやればよいです。
wmodeには他にも問題がありますがそれはまた次の機会に。

ファイル名 : getURL.as
package {
	import flash.net.navigateToURL;
	import flash.net.URLRequest;
	public function getURL(url, window="_blank"){
		navigateToURL(new URLRequest(url), window);
	}
}

ファイル名 : getURLex.as
package{
import flash.external.ExternalInterface;
public function getURLex(url, window="_blank"){
	if(ExternalInterface.available){
	var str="";
	try{
		str=ExternalInterface.call("function(){return navigator.userAgent;}").toString();
	}catch(e){
		str="failed";
	}
	if(str=="failed" || str.indexOf("Safari")>-1 || str.indexOf("Opera")>-1){
		getURL(url);
	}else{
		try{
			ExternalInterface.call("function(){window.open('"+url+"', '"+window+"'); void(0);}");
		}catch(e){
			getURL(url);
		}
	}
	}else{
		getURL(url);
	}
}
}
「_global」はどこへいった  @ FlashAS3 , FlashAS3 Tips 2008年5月18日

無くなったようです。
グローバルメソッドを作るときはasファイルで定義してやればいいみたいです。
こんな感じで
ファイル名:set_release.as

package{
	import flash.display.MovieClip;
	import flash.events.MouseEvent;
	import flash.display.SimpleButton;
	public function set_release(mc, func){
		mc.addEventListener(MouseEvent.MOUSE_UP, func);
	}
}
[ECMAScript]  @ FlashAS3 2008年5月18日

ECMAScript(えくますくりぷと)はEcma Internationalによって策定されたスクリプト言語である。互換性の低いJavaScriptJScriptを標準化すべく、両方の言語に共通する部分を取り入れて作られた。現在の最新バージョンは3 (3rd edition)。1999年12月に標準化。関連規格の一つであるECMAScript for XML(E4X)では、ネイティブでXMLがサポートされている。

ECMAScript4
現在、ECMAScript 4 の仕様作成が進められている。 型に関する機能が増え、大規模・大人数開発のための機能が増えている。 単純なプログラムから、より巨大で信頼性の高い大規模プログラムへの「進化的プログラミング」のための機能を提供する。 ECMAScript 3 とは、少々、下位互換性がない。 ActionScript 3 の、おおかた上位互換であるが、これも、一部、互換性がない。
http://www.ecmascript.org/docs.php – 最新の仕様
(Wikipediaより抜粋)

[ActionScript]  @ FlashAS3 2008年5月18日

ActionScript(アクションスクリプト)とは、アドビシステムズ社の製品であるFlashに使用されるプログラミング言語である。ECMAScript(ECMA-262)を拡張した物である。これを用いることにより、動画や音声のプレイヤーの作成など、コンテンツに複雑な処理や双方向性を持たせたFlashを作成することが可能である。

ActionScriptが初めて搭載されたのが2000年に発売されたFlash5で、後継バージョンであるFlash MX 2004(Flash7)からは2.0が、Flash CS3(Flash9)では3.0が搭載されている。Flash4や、それ以前でも、スクリプト機能は搭載されていたが、それは、 ActionScriptとは呼ばれておらず、ECMAScriptベースでもなかった。

初代ActionScriptは単純で覚えやすいスクリプト言語であり、プロトタイプベースのオブジェクト指向言語だったが、ActionScript 2.0、3.0ではより大規模開発に適したクラスベースのオブジェクト指向言語を搭載し、より厳密化した。
(Wikipediaより抜粋)