home > Flash
crossdomain.xmlのミス
October 11, 2007
今、プログラムphpとFlashの連携したサイトを作っているんだけど。クライアントが同じサーバーにはphpを置きたくないときた。なので別のサーバーにphpをいれて、crossdomain.xmlを使って絶対パスでアクセスしようとしてたら、どうもうまくいかない・・・。数時間なやんだあげく、よくよく見ると
<allow-access-from domain="www.sample.com/" />
のドメイン部分にスラッシュ(/)をつけたままになっていた。/が入っているときかないんですね。”www.sample.com/”ではなくて、”www.sample.com”です。細かいところなので見逃しぎみ。これからは、キチンと覚えておこう!
Tweet
FlashTracer
August 27, 2007
ブラウザーでトレースを使ってアプリケーションのデバッグをするのに便利な Firefox エクステンション「FlashTracer 」。これ結構、便利です。
いつもFlash上のプレビューでしか見れなかったトレースをブラウザーで確認できるとは...
方法はFlash Player Debug versionをインストールしてから、Macの場合flashlog.txtを選ぶ。場所は
Username/Library/Preferences/Macromedia/Flash Player/Logs/flashlog.txt
だと思います。
Tweet
crossdomain.xml
April 16, 2007
Flash Playerでは、セキュリティ上外部ドメインからデータを受信することはできません。その時に必要なのがcrossdomain.xmlです。これがロードしたいドメインのルートに入っていればできます。つまりcrossdomain.xmlはFlash Playerに外部サーバへの情報アクセス権限を与える設定ファイルのことです。
ファイル内容は下記です。
<?xml version="1.0"?>
<!DOCTYPE cross-domain-policy SYSTEM
"http://www.macromedia.com/xml/dtds/cross-domain-policy.dtd">
<cross-domain-policy>
<allow-access-from domain="外部ファイルを読み込む方のドメイン" />
</cross-domain-policy>
Tweet
Flashの透過
April 06, 2007
やり方は、すごく簡単なんですがすぐに忘れてしまうのでメモしときます。
<object>部分に
<param name="wmode" value="transparent">
<embed>部分に
<embed 〜 wmode="transparent">
を追加する。
【追記】03/06/2009
wmodeには
opaque 不透明表示と
transparent 透明表示があります。
ただし、Flash Player9以前では不透明opaqueにすると日本語入力にバグが生じます。
その他もfpsにも影響があるようです。
Flash Player10から解消されているようです。
詳しくはこちら
http://d.hatena.ne.jp/jedisystemer/20090227/1235754536
Tweet
myAry.push()
March 28, 2007
よくサンプルデータなどにでてくる関数push()。これは配列の末尾に指定された要素を追加します。追加する要素は「,」で区切って複数列記できます。また、pop()は配列の末期の要素を取り出します。
‥配列が、[F1,F2,F3,F4,F5]になる。
myAry = [ "F1","F2","F3","F4"];//配列定義
myAry.push("F5");
trace(myAry);
‥
Tweet
Flashからフラウザを閉じる
March 27, 2007
this.btn_close.onPress = function(){
getURL("javascript:window.close()");
}
Flash MX2004以前であれば、これでだけでいけますが、Flash8で書き出すとこれだけではうまくブラウザは閉じてくません。ブラウザを閉じるには書き出したhtmlのソースを変更する必要があります。
allowScriptAccess="sameDomain"
↓
allowScriptAccess="always"
こう変更すれば閉じるようになります。かなり悩んで調べつくしたんですがなかなか載ってないですね。
Tweet
Flashに読み込んだ画像の色合い
March 23, 2007
なんかFlashに画像を読み込むと、色合いが淡くなってしまう現象がおきます。作成環境としては、Mac G5でFlashのバージョンが8になってくらいからだと思います。解決策としては、Flashのバージョンを5に落としてから画像を読み込みなおすと色合いが元にもどりました。かなり面倒くさい方法なので、誰かいい方法をご存知ではないでしょうか?教えてください。
Tweet
flvのストリーミング再生/停止/一時停止
March 22, 2007
読み込み設定
var connection_nc:NetConnection = new NetConnection();
connection_nc.connect(null);
var stream_ns:NetStream = new NetStream(connection_nc);
stream_ns.Play("sample.flv");
読み込みファイル設定
this.myvideo.attachVideo(stream_ns); stream_ns.play("mov_sample.flv");
再生/ストップ/一時停止する場合
stream_ns.play("sample.flv"); or stream_ns.close(); or stream_ns.pause();
○ play()
外部オーディオファイルまたはビデオファイル (FLV) の再生を開始します。
○ close()
ストリーム上のすべてのデータの再生を停止し、time プロパティを 0 に設定して、他のユーザーがストリームにアクセスできるようにします。
○ pause()
ビデオストリームの再生を一時停止します。ビデオが既に一時停止している場合は、このメソッドを呼び出しても何も実行されません。
【追記】
pause()で一時停止したあとは、 pause()で再生になる。
【追記】
// サウンドコントロールの対象にするMovieClipをmy_mcとした場合
var my_sound:Sound = new Sound(my_mc);
my_mc.attachAudio(netStream);
my_sound.setVolume(0); // サウンドoff
trace(my_sound.getVolume()); // 確認用
Tweet
Flash上でのラインの描き方
March 19, 2007
Flash上でASを使ってラインを描く方法です。
仕事でノイズ波形を作りたかったのですが、ラインの描き方を
度忘れしてしまったので、調べなおしました。
- ラインの太さ,線の色,透明度を指定
- ラインの開始位置を指定
- ラインの最終位置を指定
- 開始位置からコントロールポイントを指定して、ある座標まで曲線を引く
myMC.lineStyle ( 太さ , 線の色 , 透明度 );
myMC.moveTo ( x , y );
myMC.lineTo ( x , y );
曲線の場合
myMC.curveTo ( x1 , y1, x2 , y2 );
x1:コントロールポイントX , x2:最終座標X
y1:コントロールポイントY , y2:最終座標Y
【追記】
また、色を塗りつぶしたい時は
myMC.beginFill ( 線の色 , 透明度 );
~ラインを引く~
myMC.endFill ();
の二つの関数でラインを囲むと、その中の色が変わります。
Tweet
removeMovieClipで完全にMCを消去する方法
March 18, 2007
removeMovieClipで消せるのは、
createEmptyMovieClip
attachMovie
duplidateMovieClip
で生成したMCだけではないらしいです。
自分でステージに配置したMCも消せるみたいです。
ステージ上に配置したMCのインスタンス名をmyMCとすると、
myMC.swapDepths(_root.getNextHighestDepth());
myMC.removeMovieClip();
でいけるみたいです。
ちなみにgetNextHighestDepth()は、現在使用されている最も数値の大きい深度のつぎの値を返します。この値をスクリプトで新規に配置するMCの深度に設定すれば、他のMCと重複せずに1番手前に配置することができます。
Tweet
ドロップシャドウ効果
今度は、ドロップシャドウ効果。
public DropShadowFilter([distance:Number], [angle:Number], [color:Number], [alpha:Number], [blurX:Number], [blurY:Number], [strength:Number], [quality:Number], [inner:Boolean], [knockout:Boolean], [hideObject:Boolean])
指定されたパラメータで新しい DropShadowFilter インスタンスを作成します。
パラメータ
distance:Number
シャドウのオフセット距離 (ピクセル単位)。デフォルト値は 4 (浮動小数値) です。
angle:Number
0 ~ 360 で表されるシャドウの角度 (浮動小数値)。デフォルト値は 45 です。
color:Number
シャドウのカラー。16 進数形式 (0xRRGGBB) で指定します。デフォルト値は 0x000000 です。
alpha:Number
シャドウカラーのアルファ透明度の値で、0 ~ 1 の範囲の値を指定できます。たとえば .25 と指定すると、透明度は 25 パーセントになります。デフォルト値は 1 です。
blurX:Number
水平方向のぼかし量です。指定できる値は 0 ~ 255 (浮動小数値) です。デフォルト値は 4 です。2 のべき乗 (2、4、8、16、32 など) は、他の値と比べて速くレンダリングできるよう最適化されます。
blurY:Number
垂直方向のぼかし量です。指定できる値は 0 ~ 255 (浮動小数値) です。デフォルト値は 4 です。2 のべき乗 (2、4、8、16、32 など) は、他の値と比べて速くレンダリングできるよう最適化されます。
strength:Number
インプリントやスプレッドの長さです。値が大きいほど、濃い色がインプリントされるので、シャドウと背景との間のコントラストが強くなります。指定できる値は 0 ~ 255 で、デフォルトは 1 です。
quality:Number
フィルタを適用する回数。0 ~ 15 の範囲の値を指定できます。デフォルト値は 1 で、低品質と等価です。2 は普通の品質、3 は高品質です。
inner:Boolean
影が内側の影であるかどうかを指定します。true の場合は、内部シャドウを示します。デフォルトは false (外側シャドウ) で、オブジェクトの外周にあるシャドウを示します。
knockout:Boolean
ノックアウト効果を適用するかどうかを指定します。true を指定すると、オブジェクトの塗りが透明になり、ドキュメントの背景色が表示されます。デフォルトはfalse で、ノックアウト効果は適用されません。
hideObject:Boolean
オブジェクトが非表示であるかどうかを示します。true を指定すると、オブジェクト自体は描画されず、シャドウだけが表示されます。デフォルト値は false (オブジェクトを表示) です。
(「にゃあぷろじゃくと」参照)
以下参考例
import flash.filters.DropShadowFilter;
var frog1:MovieClip;
var filtersArray1:Array = new Array();
var dropShadowFilter1:DropShadowFilter =
new DropShadowFilter(8, 45, 0x000000, 0.8, 16,
16, 1, 1, false, false, false);
filtersArray1.push(dropShadowFilter1);
frog1.filters = filtersArray1;
Tweet
ブラー効果
Flashでよく使うエフェクトを何点かご紹介。
まずは、ブラー効果(ぼけるエフェクト)です。
BlurFilter コンストラクタ
public BlurFilter([blurX:Number], [blurY:Number], [quality:Number])
指定されたパラメータでフィルタを初期化します。デフォルト値では、ソフトフォーカスのかかったイメージが作成されます。
パラメータ
blurX:Number
水平方向のぼかし量です。0 から 255 の範囲の浮動小数値を指定できます。デフォルト値は 4 です。2 のべき乗 (2、4、8、16、32 など) は、他の値と比べて速くレンダリングできるよう最適化されます。
blurY:Number
垂直方向のぼかし量です。0 から 255 の範囲の浮動小数値を指定できます。デフォルト値は 4 です。2 のべき乗 (2、4、8、16、32 など) は、他の値と比べて速くレンダリングできるよう最適化されます。
quality:Number
フィルタの適用回数です。デフォルト値は 1 で、低品質を示します。値 2 は普通の品質です。さらに、値 3 は高い品質で、ガウスぼかしに近似したものになります。
(「にゃあぷろじゃくと」参照)
以下参考例
// クラス宣言 (パッケージパスつき)
import flash.filters.BlurFilter;
var frog:MovieClip;
// 配列インスタンスの作成
var filtersArray:Array = new Array();
// フィルタインスタンスの作成
var blurFilter:BlurFilter = new BlurFilter(8, 0, 1);
// 配列インスタンスにフィルタインスタンスを格納
filtersArray.push(blurFilter);
// MovieClip.filtersプロパティに配列インスタンスを設定
frog.filters = filtersArray;
Tweet
ASサンプルサイト「にゃあプロジェクト」
March 14, 2007
かなり豊富なActionScriptのサンプルが掲載されています。
これからは参考にさせて頂きます。
すいませんでした。「ぷろじぇくと」はカタカナに変更しておきました。
Tweet
flvのストリーミング方法
今さらですが、よく忘れるのでflvのストリーミング方法をメモしときます。
ルートにmyvideoという名のMCをつくり、mov_sample.flvというムービーを
用意する。
//FLVストリーミング
var connection_nc:NetConnection = new NetConnection();
connection_nc.connect(null);
var stream_ns:NetStream = new NetStream(connection_nc);
//ループ設定
stream_ns.onStatus = function(infoObject:Object):Void {
if(infoObject.code =="NetStream.Play.Stop"){
stream_ns.play("mov_sample.flv");
}
};
this.myvideo.attachVideo(stream_ns);
stream_ns.play("mov_sample.flv");
キーポイントを打ってムービーとの同期を行うときは
var connection_nc:NetConnection = new NetConnection();
connection_nc.connect(null);
var stream_ns:NetStream = new NetStream(connection_nc);stream_ns.onCuePoint=function(info):Void {
if(info["name"]=="キーポイント1"){
キーポイント1アクション;
}
if(info["name"]=="キーポイント2"){
キーポイント2アクション;
}}
これをループ設定を消して、記入すればキーポイントで
ムービーが同期します。
【追記】
埋め込んだムービーをクリアする方法
・MyVideo.clear();
・MyVideo.attachVideo(null);
ストリームしたムービーを停止する方法
・stream.play("sample.flv");// 再生
・stream.pause(); // 一時停止
・stream.close();// 閉じる
使わないと忘れるので再度メモ。
参考サイトアドレス
http://hima.chu.jp/flash/tips/fcs-video.htm
Tweet
IEにてFlashの高速化
March 12, 2007
<param name="wmode" value="opaque" />
をhtml内のFlashコード部分に記入するだけで、数パーセント
処理スピードが上がります。
Tweet
function関数の設定解除
functionで関数を定義する時に、その設定を解除する時のActionScriptの書き方です。
//Action関数を定義
function Action(){ 〜 }
//Action関数を解除
delete Action;
ボタン設定の場合は
delete box.onRollOver;
delete box.onRollOut;
delete box.onRelease;
になります。
ただ、この方法で設定をきると、再度ボタンに関数設定する際は
もう一度、ボタンの設定をしなおす必要があります。
Tweet
Flickr API
March 11, 2007
前にAPIとFlashとの連携を勉強しようと思って、まずFlickr APIやってみました。
ここでAPI application key を取得する。
それから下記のコードでサムネイルの表示はされたのですが‥
マシーンにかなりの負担がかかって画像が表示されるのに時間がかかってしまいます。
誰か解決方法知りませんか?
import com.xfactorstudio.xml.xpath.*;
api_key = “自分のAPI application keyをコピーする”;
var xml:XML = new XML();
xml.ignoreWhite = false;
selectButton.enabled = false;
var xmlUrlTmp = "http://api.flickr.com/services/rest/?
method=flickr.photos.search&api_key="+api_key+"&tags=";
var num:Number = 1; // 写真の初期番号
//各配列を定義する
var photoUrl:Array = new Array();
var PhotoTitle:Array = new Array();
var PhotoID:Array = new Array();
var PhotoOwner:Array = new Array();
var setnum:Number = 1;
var paperview = 6;//xmlの読み込み
xml.onLoad = function(success:Boolean) {
if(success){
var rootNode = xml.firstChild;
var nextNode = rootNode.firstChild.firstChild;
loadPhoto(); // 写真を読み込む
}
};
/* 写真を読み込む関数 */
function loadPhoto(){
for( num = 1; num <= paperview; num++){
photoUrl[ num ] = "http://static.flickr.com/"+
XPath.selectNodes(xml, "rsp/photos/photo["+num+"]/@server") + "/" +
XPath.selectNodes(xml, "rsp/photos/photo["+num+"]/@id") + "_" +
XPath.selectNodes(xml, "rsp/photos/photo["+num+"]/@secret") + "_s.jpg";
PhotoTitle[ num ] = XPath.selectNodes(xml, "rsp/photos/photo["+num+"]/@title");
PhotoOwner[ num ] = XPath.selectNodes(xml, "rsp/photos/photo["+num+"]/@owner");
PhotoID[ num ] = XPath.selectNodes(xml, "rsp/photos/photo["+num+"]/@id");
_root.loader.duplicateMovieClip( "loader" + num , num);
_root["loader" + num ].titleLabel.text = PhotoTitle[ num ];//サムネイルの配置
_root["loader" + 1 ]._x = 3;_root["loader" + 1 ]._y = 3;
_root["loader" + 2 ]._x = 79;_root["loader" + 2 ]._y = 3;
_root["loader" + 3 ]._x = 3;_root["loader" + 3 ]._y = 79;
_root["loader" + 4 ]._x = 79;_root["loader" + 4 ]._y = 79;
_root["loader" + 5 ]._x = 3;_root["loader" + 5 ]._y = 155;
_root["loader" + 6 ]._x = 79;_root["loader" + 6 ]._y = 155;//サムネイルのロード
_root["loader" + num ].load_img.loadMovie( photoUrl[ num ] );
ThumBtn( _root["loader" + num ] ,num );
}
}//ボタンの設定
loadButton.onRollOver = function(){
this._alpha = 60;
}
loadButton.onRollOut = function(){
this._alpha = 100;
}
loadButton.onRelease = function(){
NoMovieClip(num);
num = 1; // 初期化
var requestUrl = xmlUrlTmp+tagLabel.text;
xml.load(requestUrl);
}
//ボタンアクション
function ThumBtn( mc:MovieClip , ss:Number ){
mc.onRollOver = function(){
_root.loading_txt._alpha = 0;
this._alpha = 60;
}
mc.onRollOut = function(){
_root.loading_txt._alpha = 100;
this._alpha = 100;
}
mc.onRelease = function(){
var urltext:String = "http://www.flickr.com/photos/" +
PhotoOwner[ ss ] + "/" + PhotoID[ ss ] + "/";
getURL(urltext , "_blank");
}
}
function NoMovieClip(num:Number){
for( i = 0; i <= num ; i++ ){
_root["loader" + i ].removeMovieClip();
}
num = 1;
setnum = 1;
updateAfterEvent();
}
【追記】
ちなみにサンプルはこれです。
Tweet
Flash内の簡単なアクセス解析方法
オールFlashで作成したコンテンツ内のアクセスログがほしい場合、
方法はいろいろあるが、一番簡単な方法はloadVariables()を使って、
擬似的に別ページを開いてるかのようにする方法です。
そして、その擬似ページのログをとる方法があります。
記述方法もいたって簡単、
on (release) {
this.loadVariables("log.html","GET");
}
で終わり。
log.htmlのログをとれば大丈夫。
【追記】
小ファイルの頭に入れる場合は、空のMC(access)を作って
this.access.loadVariables("log.html","GET");
を一番初めの_rootに記載しておけば大丈夫。
Tweet
MovieClipLoader
March 10, 2007
外部ファイルを読み込む時の設定。swf、jpeg、png、gifが読み込める。
ちなみにpng、gifはFlash8から読み込めるようになりました。
objMCLoader = new MovieClipLoader ();
myListener = new Object ();
// 通知を受け取るオブジェクトを登録
objMCLoader.addListener (myListener);
// 読み込みを開始できたとき
myListener.onLoadStart = function (target_mc) {
_root.loading.gotoAndStop (2);
}
// 読み込みに失敗したとき
myListener.onLoadError = function (target_mc) {
_root.loading.gotoAndStop (3);
};
// 読み込み中呼び出される
myListener.onLoadProgress = function (load, loadedBytes, totalBytes) {
// パーセントの計算
percent = Math.floor (loadedBytes / totalBytes * 100);
};
// 読み込み完了
myListener.onLoadComplete = function (target_mc) {
_root.loading.gotoAndStop (1);
};
// 読み込み完了後の初期化処理
myListener.onLoadInit = function (target_mc) {};
//実際に読み込む
objMCLoader.loadClip('intro.swf', _root.load);
※「target_mc」部部に読み替えるMovieClip名を記入。
Tweet
ランダム配列
March 09, 2007
//ランダム配列
for( k = 1; k <= client_cont ; k++){
this.client_array[ k ] = k;
}
xShuffleArray(client_array);//ランダム配列実行
function xShuffleArray(l_array) {
var i = l_array.length;
while ( i--) {
var j = Math.floor(Math.random()*i +1 );//ランダムなインデックスを計算
var t = l_array[i];
l_array[i] = l_array[j];
l_array[j] = t;
}}
まず、順番どおりの配列を作成してから
要素をランダムに入れ直す方法です。
Tweet
Flashのフルスクリーン設定
function onResize(){こんな関数を設定する。
//拡大設定
w = this.bg._width;
h = this.bg._height;
scale_w = stageCtrl.width / w * 100;
scale_h = stageCtrl.height / h * 100;
scale = Math.max(scale_w, scale_h);//大きい比率を検出
this._xscale = this._yscale = scale;
//座標設定
w_shift = stageCtrl.width / 2 - w / 2 * scale / 100;
h_shift = stageCtrl.height / 2 - h / 2 * scale / 100;
this._x = w_shift;
this._y = h_shift;
}
そこでもう一つ需要な事は、クオリティを"high"に
_quality = “high”;
して、画像にスムージングをかける。
これで、画像が拡大されてもガタガタになりません。
こまい事ですが、すぐに忘れるのでメモ。
Tweet