home > AS3
YouTube Player を Flash に埋め込む
August 13, 2010
YouTube のプレイヤー SWF(http://www.youtube.com/apiplayer?version=3)をロードすればできるようです。
ただし、Flash Player 10 以上。
フルスクリーンで埋め込んだデモ
http://www.publicroots.com/test/youtube/
package
{
import flash.display.DisplayObject;
import flash.display.Loader;
import flash.display.LoaderInfo;
import flash.display.MovieClip;
import flash.events.Event;
import flash.net.URLRequest;
import flash.system.Security;
public class YouTubeApi extends MovieClip
{
private var _youtubePlayer:Object;public function YouTubeApi()
{
Security.allowDomain("*");var loader:Loader = new Loader();
loader.contentLoaderInfo.addEventListener(Event.INIT, initHandler);
loader.load(new URLRequest("http://www.youtube.com/apiplayer?version=3"));
}
private function initHandler(event:Event):void
{
_youtubePlayer = Loader(LoaderInfo(event.currentTarget).loader).content as Object;
addChild(_youtubePlayer as DisplayObject);
_youtubePlayer.addEventListener("onReady", onReadyHandler);
_youtubePlayer.addEventListener("onError", onErrorHandler);
_youtubePlayer.addEventListener("onStateChange", onStateChangeHandler);
_youtubePlayer.addEventListener("onPlaybackQualityChange", onPlaybackQualityChangeHandler);}
private function onReadyHandler(event:Event):void
{
trace("ready", Object(event).data);
_youtubePlayer.setSize(500, 375);
//リサイズ設定
addEventListener(Event.ENTER_FRAME, onEnterFrame);// OK GoのPVをロードして自動再生
_youtubePlayer.loadVideoById("V2fpgpanZAw");
}
private function onErrorHandler(event:Event):void
{
// error 150 となる場合は、指定した映像が「埋め込み拒否」されている。(どうしようもない)
trace("error", Object(event).data);
}
private function onStateChangeHandler(event:Event):void
{
// state -1 未スタート(SWFが読み込まれたときは -1 の onStateChange イベントが発行される)
// state 0 終了
// state 1 再生中
// state 2 一時停止
// state 3 バッファリング中
// state 5 停止(SWF が読み込まれ、キューに追加されて、再生可能になったら5の onStateChange イベントが発行される)
trace("state", Object(event).data);
}
private function onPlaybackQualityChangeHandler(event:Event):void
{
// クオリティを変更した場合
trace("quality", Object(event).data);
}
private function onEnterFrame(event:Event):void
{
var ww:Number = Math.floor(stage.stageWidth);
var hh:Number = Math.floor(stage.stageHeight);var scale_w:Number = stage.stageWidth/500;
var scale_h:Number = stage.stageHeight/375;
var scale:Number = Math.max(scale_w,scale_h);//大きい比率を検出
_youtubePlayer.setSize(500*scale, 375*scale);_youtubePlayer.x = -(ww - 500)/2;
_youtubePlayer.y = -(hh - 375)/2;
}
}
}
参考サイトはこちら
http://feb19.jp/blog/archives/000182.php
Posted at 07:37 PM | Comments (0)
FlickrとFlashの連動 - Flickr API
August 04, 2010
ドキュメントクラス(MainStage.as)は省略。flaファイルのルートにphotoMCという名前のMCを配置します。必要ならローディングMC(loadingimg)も配置。
アクセス先
XML :
http://api.flickr.com/services/rest/?method=flickr.photos.search&api_key=" + api_key + "&user_id=" + user_id +"&privacy_filter=1"
画像URL :
http://farm" + farm_id[i] + ".static.flickr.com/" + server_id[i] + "/" + photo_id[i] + "_" + secret[i] + ".jpg"
サイズ指定がある時
http://farm" + farm_id[i] + ".static.flickr.com/" + server_id[i] + "/" + photo_id[i] + "_" + secret[i] + "_" + size + ".jpg"
今回は使ってませんが、サイズの種類は下記です。
s small square 75x75
t thumbnail, 100 on longest side
m small, 240 on longest side
- medium, 500 on longest side
b large, 1024 on longest side (only exists for very large original images)
o original image, either a jpg, gif or png, depending on source format
詳しくは、Flickr APIのドキュメントを確認ください。
http://www.flickr.com/services/api/
Flickr APIを使ってデモを作ってみました。
2010.08.09
今流行の3D風にしてみました。3D眼鏡でみると何となくそう見えます。
3D Flickr Viewer
http://www.publicroots.com/test/flickr/
2010.08.12
ドットで表現してみました。
Dot Flickr Viewer
http://www.publicroots.com/test/flickr/index2.html
package{
import flash.media.*;
import flash.net.*;
import flash.display.*;
import flash.events.*;
import flash.xml.*;
import flash.net.URLRequest;
import flash.net.URLLoader;
import flash.net.URLLoaderDataFormat;
import flash.events.Event;
import flash.events.IOErrorEvent;
import flash.display.Loader;
import flash.display.LoaderInfo;
import flash.utils.Timer;
import flash.events.TimerEvent;
import flash.system.Security;public class Flickrapi
{
private var _mainstage:MainStage;
//NSID、api_keyを格納
private var user_id:String = "〜NSID〜";
private var api_key:String = "〜api_key〜"private var myXML:XML;
private var myLoader:Loader;
//リクエスト用のURLを生成します
private var url:String = "http://api.flickr.com/services/rest/?method=flickr.photos.search&api_key=" + api_key + "&user_id=" + user_id +"&privacy_filter=1";
private var myURLReq:URLRequest;
private var myXMLLoader:URLLoader;
private var taotalimg:Number;
private var taotalmaxxx:Number = 100;
private var photoURL:Array = new Array();
private var photo_id:Array = new Array();
private var farm_id:Array = new Array();
private var server_id:Array = new Array();
private var secret:Array = new Array();private var loadcount:Number = 1;
private var myCont:MovieClip;
//ループ時間
private var timer:Timer;
private var myImage:Bitmap;
//サイズ
private var size:String = "b";public function Flickrapi(_ms:MainStage):void
{
trace("[ FlickrAPICls ]");
_mainstage = _ms;
myCont = _mainstage.photoMC;//クロスドメインポリシーファイルのロード
Security.loadPolicyFile("http://farm1.static.flickr.com/crossdomain.xml");
Security.loadPolicyFile("http://farm2.static.flickr.com/crossdomain.xml");
Security.loadPolicyFile("http://farm3.static.flickr.com/crossdomain.xml");
Security.loadPolicyFile("http://farm4.static.flickr.com/crossdomain.xml");
Security.loadPolicyFile("http://farm5.static.flickr.com/crossdomain.xml");_mainstage.loadingimg.visible = true;
TopLoading();
_mainstage.stage.addEventListener(Event.RESIZE, TopLoadingResize);//読込みスタート
FlickrAPIStart();
}//リサイズで中央表示
//TopLoadingResize
private function TopLoadingResize( event:Event ):void {
TopLoading();
}
public function TopLoading():void {
//loadingimg
_mainstage.loadingimg.x = _mainstage.stage.stageWidth/2;
_mainstage.loadingimg.y = _mainstage.stage.stageHeight/2;
//myCont
myCont.x = _mainstage.stage.stageWidth/2 - myCont.width/2;
myCont.y = _mainstage.stage.stageHeight/2 - myCont.height/2;
}
private function FlickrAPIStart():void
{
myURLReq = new URLRequest(url);
//リクエスト発行します
myXMLLoader = new URLLoader();
myXMLLoader.dataFormat = URLLoaderDataFormat.TEXT;
myXMLLoader.addEventListener(Event.COMPLETE,setPhotoXML);
myXMLLoader.addEventListener(IOErrorEvent.IO_ERROR,isError);
myXMLLoader.load(myURLReq);
}
private function setPhotoXML(e:Event):void{
//読み込んだ後の処理を記述
myXML = new XML(myXMLLoader.data);
taotalimg = myXML.photos.@total;
trace("投稿写真の枚数 = "+taotalimg);
//配列にURL格納
for(var i:int = 1 ; i <= taotalmaxxx; i++){
photo_id[i] = myXML.photos.photo[(i-1)].@id;
farm_id[i] = myXML.photos.photo[(i-1)].@farm;
server_id[i] = myXML.photos.photo[(i-1)].@server;
secret[i] = myXML.photos.photo[(i-1)].@secret;photoURL[i] = "http://farm" + farm_id[i] + ".static.flickr.com/" + server_id[i] + "/" + photo_id[i] + "_" + secret[i] + ".jpg";
//trace("photoURL[ "+i+" ] = "+photoURL[i]);
}
//写真のロード
PhotoLoad(loadcount);
}private function PhotoLoad(_lun:Number):void
{
_mainstage.loadingimg.visible = true;var photoURLreq:URLRequest = new URLRequest(photoURL[_lun]);
myLoader = new Loader();
myLoader.contentLoaderInfo.addEventListener(Event.COMPLETE,setImage);
myLoader.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR,isError);
myLoader.load(photoURLreq);
}
private function setImage(e:Event){
myCont.alpha = 0;
myImage = e.target.content;
var loadedImage:Bitmap = Bitmap(myImage);
myCont.addChild(myImage);
//タイマー
timer = new Timer(4000,1);
timer.addEventListener(TimerEvent.TIMER, PhotoChangeFunc);
timer.start();
_mainstage.loadingimg.visible = false;
Tweener.addTween( myCont, { salpha:1, time:1, transition:"easeInQuart", onComplete:PhotoAlphaEnd} );
}
private function PhotoAlphaEnd():void
{
Tweener.removeTweens( myCont );
}private function PhotoChangeFunc( event:TimerEvent ):void
{
timer.removeEventListener(TimerEvent.TIMER, PhotoChangeFunc);
Tweener.addTween( myCont, { alpha:0, time:1, transition:"easeInQuart", onComplete:PhotoEnd} );
}
private function PhotoEnd():void
{
Tweener.removeTweens( myCont );
myCont.removeChild(myImage);
//ループ実行
if(loadcount < taotalmaxxx){
loadcount++;
}else{
loadcount = 1;
}
PhotoLoad(loadcount);
}
private function isError(e:IOErrorEvent):void{
trace("failed to Load photos info");
}
}
}
Posted at 08:06 PM | Comments (0)
AS3:サーバー時間表示
July 20, 2010
phpを使ってサーバー時間を取得する方法。良く忘れるのでメモ。
ローカル時間だとユーザに変更される可能性があるので、サーバー時間を取得する機会がたまにあります。
Clock.as
package
{
import flash.display.*;
import flash.events.Event;
import flash.events.EventDispatcher;
import flash.net.URLLoader;
import flash.net.URLLoaderDataFormat;
import flash.net.URLRequest;
import flash.net.URLRequestMethod;
import flash.net.URLVariables;public class Clock extends Sprite
{
private var url:String = "clock.php";//-------------------------
// コンストラクタ
//-------------------------
public function Clock()
{
addEventListener( Event.ENTER_FRAME, onEnterFrameHandler );
}
private function onEnterFrameHandler(event:Event):void
{
if (url) getClock(url);
}
//-------------------------
// ロード
//-------------------------
public function getClock(url:String):void
{
var urlRequest:URLRequest = new URLRequest(url);
urlRequest.method = URLRequestMethod.GET;
var urlLoader:URLLoader = new URLLoader();
urlLoader.dataFormat = URLLoaderDataFormat.VARIABLES;
urlLoader.addEventListener(Event.COMPLETE, completeHandler);
urlLoader.load(urlRequest);
}//-------------------------
// ロード完了
//-------------------------
private function completeHandler(e:Event):void
{
var urlVariables:URLVariables = new URLVariables(e.target.data);
_clocktxt.text = urlVariables.year +"/"+ urlVariables.month +"/"+ urlVariables.day +"/"+
urlVariables.week +"/"+ urlVariables.hour +":"+ urlVariables.minutes +":"+ urlVariables.seconds;
}
}
}
clock.php
<?php
$year = date("Y"); //年(4ケタ)
$month = date("n"); //月(1ケタ)
$day = date("j"); //日(1ケタ)
$week = date("w"); //曜日(0~6)
$hour = date("G"); //24時間表記
$minutes = date("i"); //分(2ケタ)
$seconds = date("s"); //秒(2ケタ)
switch ($week) {
case 0:
$week = "日曜";
break;
case 1:
$week = "月曜";
break;
case 2:
$week = "火曜";
break;
case 3:
$week = "水曜";
break;
case 4:
$week = "木曜";
break;
case 5:
$week = "金曜";
break;
case 6:
$week = "土曜";
break;
default:
break;
}
//出力
echo "year=".$year."&month=".$month."&day=".$day."&week=".$week."
&hour=".$hour."&minutes=".$minutes."&seconds=".$seconds;
?>
Posted at 12:16 AM | Comments (0)
AS3 : MCに枠線つけるスクリプト
July 16, 2010
import flash.filters.GlowFilter;
〜
onSetFilterglow();
function onSetFilterglow():void {
//---枠線設定(グロー)
var c:uint=0xFFFFFF;
var a:Number=1;
var bX:Number=6;
var bY:Number=6;
var st:Number=10;
var filterglow:GlowFilter=new GlowFilter(c,a,bX,bY,st);
//枠線適用
mymc.filters = [filterglow];
}
何気にできると思ってたのに、意外に知らなかったのでメモ。
参考サイト
http://www.c-geru.com/as_blind_side/2010/03/post-2.html
Posted at 01:51 PM | Comments (0)
TextFieldの高さを取得
June 02, 2010
TextFieldの高さはtextHeightで取得できるみたい。
ただ、上下に2pixelのズレがあるので+4すれば大丈夫みたいです。
参考サイト
http://labs.torques.jp/2009/09/25/560/
Posted at 06:27 PM | Comments (0)
AS3 : System.useCodePage
April 01, 2010
ちょっとハマってしまったのでメモ。
AS2だと
System.useCodepage = false;
AS3だと
System.useCodePage = false;
Page のPが大文字になってます。
Posted at 07:03 PM | Comments (0)
AS3 : URLエンコード
AS3.0で文字列をUTF-8でエンコードする方法。
簡単にできるんですね。
import flash.utils.escapeMultiByte;
〜
var _sample:String = escapeMultiByte("URLエンコード");
trace(_sample);
参考サイト
http://f-site.org/articles/2007/06/09232451.html
Posted at 06:55 PM | Comments (0)
AS3 : Google Maps API
March 07, 2010
FlashとGoogleMapの連携って意外に簡単。
まず、SDKをダウンロードしてからAPIキーを取得する。
http://code.google.com/apis/maps/documentation/flash/
http://code.google.com/apis/maps/signup.html
swcファイル(map_1_8a.swc)をComponentsに格納します。
あとはクラスをインポートしていくつかnewするだけで地図が表示できます。
import com.google.maps.LatLng;
import com.google.maps.Map;
import com.google.maps.MapEvent;
import com.google.maps.MapType;
var map:Map = new Map();
map.key = "your_api_key";
map.setSize(new Point(stage.stageWidth, stage.stageHeight);
map.addEventListener(MapEvent.MAP_READY, onMapReady);
this.addChild(map);function onMapReady(event:Event):void {
map.setCenter(new LatLng(40.736072,-73.992062), 14, MapType.NORMAL_MAP_TYPE);
}
参考サイト
http://blog.alt-scape.com/archives/231
http://level0.kayac.com/2009/12/googlemapapi_route1.php
http://code.google.com/intl/ja/apis/maps/documentation/flash/tutorial-flash.html
ラインを引いたりするのも簡単にできそうですね。
Posted at 05:33 PM | Comments (0)
AS3 : SoundMixer.computeSpectrum
January 20, 2010
SoundMixer.computeSpectrumは結構問題あるようですが、
とりあえず波形を表示するサンプルを作ってみました。
package {
import flash.display.*;
import flash.events.*;
import flash.filters.*;
import flash.media.*;
import flash.net.*;
import flash.utils.*;
public class Main extends Sprite {
private var WaveH:int = stage.stageHeight/2;
//チャンネル毎のByteArray取得範囲
private const chanlength:int = 550;
private var _byteArray:ByteArray = new ByteArray();//サウンドの再生・毎フレームイベント設定
public function Main() {
var sound:Sound = new Sound();
var soundurl:URLRequest = new URLRequest("loop.mp3");
sound.load(soundurl);
var channel:SoundChannel;
channel = sound.play(0,100);
addEventListener( Event.ENTER_FRAME, enterFrameHandler );
//channel.addEventListener( Event.SOUND_COMPLETE, PlayCompleteHandler );
}//毎フレームサウンドの波形取得・線描画
private function enterFrameHandler( e:Event ):void {
//_byteArrayにサウンド波形の値を設定
SoundMixer.computeSpectrum( _byteArray, false, 0 );
var g:Graphics = graphics;
g.clear();
g.lineStyle( 0, 0x000000 );
g.beginFill (0xFF0000, 1.0); // 面のスタイル設定
/* 円で表示する場合
var n:Number = 0;
n = ( _byteArray.readFloat() * WaveH );
g.drawCircle(275,200,(WaveH - n));
*//* 波形表示の場合*/
g.moveTo( 0, WaveH );
//左チャンネルだけ取得して描画
var n:Number = 0;
for ( var i:int = 0; i < chanlength; i++ ) {
n = ( _byteArray.readFloat() * WaveH );
g.lineTo( i, WaveH - n );
}
}
private function PlayCompleteHandler( e:Event ):void {
removeEventListener( Event.ENTER_FRAME, enterFrameHandler );
}
}
}
問題点としては、別ブラウザーで表示した別サイトの音も解析しようとしておかしな動きをするようですね。
まあ同時に表示しておく人はあまりいないと思いますが。。。
http://feb19.jp/blog/archives/000133.php
Posted at 12:35 AM | Comments (0)
AS3 : Google Analytics
November 04, 2009
AS2の書き方から変更されてるんですね。
まずgoogle codeからgaforflashをダウンロードする。
Macの場合は、
Macintosh HD/Applications/Adobe Flash CS3/Configuration/Components
にダウンロードしたgaforflash/libフォルダーを"Google"とか適当な名前付けてコピーする。
Winの場合は、
C:¥Program Files¥Adobe¥ Adobe Flash CS3¥language¥Configuration¥Components
コンポーネントウィンドウの中からGoogle/analytics.swcをflaファイルの適当なレイヤーに配置、
名前はtrackerとかになってるからそのままでOK。パラメータのaccountに"UA-XXXXXXX-X"を入れる。
ソースは
import com.google.analytics.AnalyticsTracker;
import com.google.analytics.GATracker;//取得したいイベントの処理後に追加
tracker.trackPageview("/sample");
【追記】2010.3.7
GATrackerをnewしてtrackerを作成しする方法は下記です。
http://deepkick.com/blog/archives/2009/08/google_analytic.html
package {
import flash.display.*;
import flash.events.*;
import com.google.analytics.AnalyticsTracker;
import com.google.analytics.GATracker;
public class Main extends Sprite {
private var tracker:AnalyticsTracker;
public function Main () {
tracker = new GATracker( this, "UA-xxxxxx-yy", "AS3", true );
stage.addEventListener( MouseEvent.CLICK, onStageClick );
}private function onStageClick ( event:MouseEvent ):void {
tracker.trackPageview("/sample");
}
}
}
Posted at 01:05 PM | Comments (0)
AS3 : ドロップシャドー
October 14, 2009
import flash.filters.DropShadowFilter;
〜
//dropShadow
private var dropShadow : DropShadowFilter;
〜
//ドロップシャドー
dropShadow = new DropShadowFilter();
dropShadow.distance = 0;
dropShadow.blurX = 16;
dropShadow.blurY = 16;
dropShadow.alpha= 0.20;
sample_img.filters = [dropShadow];
Posted at 10:45 PM | Comments (0)
AS3 : 背景テクスチャ
October 02, 2009
画像素材のリンゲージプロパティをBG_dotにしてから下記の設定OK。
private var detailSprite : Sprite;
private var _paternobj : BitmapData;
〜
//背景のテクスチャー設定
detailSprite = new Sprite();
_paternobj = new BG_dot(0, 0);
detailSprite.graphics.beginBitmapFill(_paternobj);
detailSprite.graphics.drawRect(0, 0, _detailthis.stage.stageWidth,
_detailthis.stage.stageWidth);
detailSprite.graphics.endFill();
//背景をaddする
_detailthis.addChild(detailSprite);
detailSprite.x = 0;
detailSprite.y = 0;
〜
Posted at 09:11 PM | Comments (0)
AS3 : swfのあるドメインを取得する
June 02, 2009
AS2ではswfのあるアドレスを
_root._url
で取得できたんですがAS3ではできません。
でいろいろ調べた結果、ドメインを取得する方法がありました。
import flash.net.LocalConnection;
〜
//swfを置いているドメイン名(サブドメイン含む)
public static function get currentDomain():String{
var url_string:String = new LocalConnection( ).domain;
trace(url_string);//出力結果 www.sample.com
}
Posted at 02:22 AM | Comments (0)
AS3 : PHPとの通信方法
May 11, 2009
import flash.events.*;
import flash.net.URLLoader;
import flash.net.URLLoaderDataFormat;
import flash.net.URLRequest;
import flash.net.URLRequestMethod;
import flash.net.URLVariables;
〜
//sample1, sample2, sample3の値をPOSTする
var variables:URLVariables = new URLVariables();
variables.sample1 = "sample1";
variables.sample2 = "sample2";
variables.sample3 = "sample3";
var urlRequest:URLRequest = new URLRequest(sample_php_url);
urlRequest.method = URLRequestMethod.POST;
urlRequest.data = variables;
var urlLoader:URLLoader = new URLLoader();
urlLoader.dataFormat = URLLoaderDataFormat.VARIABLES;
urlLoader.addEventListener(Event.COMPLETE, SampleComplete);
urlLoader.load(urlRequest);public function SampleComplete(eventObject:Event):void
{
送信完了後のアクション
}
【追記】2009.08.10
sample1=sample1
sample2=sample2
sample3=sample3
の値をPOSTで送信する時の方法です。
でsample_php_urlにPHPのアドレスを代入すればOKです。
Posted at 05:39 PM | Comments (0)
AS3 : Loaderオブジェクトでロードしたswfの変数を参照する
April 23, 2009
//loader
public var ldrobj : Loader;
var urImage : URLRequest;
var info : LoaderInfo;
var contents_url : String;//コンテンツアドレス
var subcontents:*;ldrobj = new Loader();
urImage = new URLRequest(contents_url);
ldrobj.load(urImage);
this.addChild(ldrobj);// ローダーインフォを取得
info = ldrobj.contentLoaderInfo;
info.addEventListener (Event.OPEN,LoaderInfoOpenFunc);
info.addEventListener(ProgressEvent.PROGRESS, LoadProgress);
info.addEventListener(Event.COMPLETE, loaded_INFO);//-----[読み込み開始イベントの処理]
public function LoaderInfoOpenFunc(event:Event){
trace ("読み込みを開始した");
}
//-----[読み込み中イベントの処理]
public function LoadProgress(event:ProgressEvent):void
{
trace("progress = " + Math.round((event.bytesLoaded*100)/(event.bytesTotal)));
}
//-----[読み込み完了イベントの処理]
public function loaded_INFO(event:Event):void
{
subcontents = ldrobj.content;
subcontents._intbtn();//ロード後に実行したい関数 : _intbtn
〜演出〜
Tweener.addTween(ldrobj, {alpha:1, time:1, transition:"easeInExpo", delay:1});
info.removeEventListener (Event.OPEN,LoaderInfoOpenFunc);
info.removeEventListener(ProgressEvent.PROGRESS, LoadProgress);
info.removeEventListener(Event.COMPLETE, loaded_INFO);
}
subcontents = ldrobj.content;
subcontents._intbtn();//ロード後に実行したい関数 : _intbtn()
この部分。
subcontentsを使ってアクセスすればOKです。
Posted at 09:17 PM | Comments (0)
AS3 : HTMLからSWFにパラメータを受け渡す方法
April 22, 2009
idという名のパラメータを受け渡しする場合
HTML側
<script type="text/javascript" src="swfobject.js"></script>
〜
<div id="flashcontent">
〜代替テキスト〜
</div>
<script type="text/javascript">
var so = new SWFObject("sample.swf", "swfl", "550", "400", "8", "#000000");
so.addVariable("id", getQueryParamValue("id"));
so.write("flashcontent");
</script>
〜
fla側
var tmpParam_obj:Object;
var id_number:String;
〜
tmpParam_obj = loaderInfo.parameters;
id_number = String(tmpParam_obj["id"]);
trace("id_number = "+id_number);
loaderInfo.parametersに格納されるようです。
Posted at 08:50 PM | Comments (0)
AS3 : フルスクリーン時のスクロール
April 21, 2009
Flashでフルスクリーンにした時にあるサイズになったらスクロールを表示したい時。
メインのクラスは
import Scrollarea;
〜
Stage.scaleMode = "noScale";
var stagearea:Scrollarea = new Scrollarea(1000, 550, "flashcontent");
〜
Scrollareaクラスは
package{
import flash.events.MouseEvent;
import flash.display.Sprite;
import flash.display.MovieClip;
import flash.external.ExternalInterface;
public class Scrollarea
{
public function Scrollarea(WrapWidth:Number, WrapHeight:Number, IDName:String) {
IDName != undefined ? ExternalInterface.call("setWrapID", IDName) : null;
ExternalInterface.call("setWrapSize", WrapWidth, WrapHeight);
}
public function setWidth(WrapWidth:Number) {
ExternalInterface.call("setWrapWidth", WrapWidth);
}
public function setHeight(WrapHeight:Number) {
ExternalInterface.call("setWrapHeight", WrapHeight);
}
}
}
js
var FlashWidth=0;
var FlashHeight=0;
var WrapID="WrapFlash"function getBrowserWidth ( ) {
if ( window.innerWidth ) { return window.innerWidth; }
else if ( document.documentElement && document.documentElement.clientWidth != 0 ) { return document.documentElement.clientWidth; }
else if ( document.body ) { return document.body.clientWidth; }
return 0;
}
function getBrowserHeight ( ) {
if ( window.innerHeight ) { return window.innerHeight; }
else if ( document.documentElement && document.documentElement.clientHeight != 0 ) { return document.documentElement.clientHeight; }
else if ( document.body ) { return document.body.clientHeight; }
return 0;
}
function setWrapWidth (WrapWidth) {
FlashWidth=WrapWidth;
setFlaArea();
}
function setWrapHeight (WrapHeight) {
FlashHeight=WrapHeight;
setFlaArea();
}
function setWrapSize (WrapWidth,WrapHeight) {
FlashWidth=WrapWidth;
FlashHeight=WrapHeight;
setFlaArea();
}
function setWrapID (IDName) {
WrapID=IDName;
}
function setFlaArea(){
var WrapFlashElement = document.getElementById(WrapID);
if(getBrowserWidth()>FlashWidth){ WrapFlashElement.style.width = "auto"; }
else{ WrapFlashElement.style.width = FlashWidth+"px"; }
if(getBrowserHeight()>FlashHeight){ WrapFlashElement.style.height = "auto"; }
else{ WrapFlashElement.style.height = FlashHeight+"px"; }
}
window.onresize = setFlaArea;
Posted at 11:50 PM | Comments (0)
AS3 : ColorTransform
April 02, 2009
AS3でカラー設定を変更する方法。
import flash.geom.ColorTransform;
〜省略〜
var color:ColorTransform = new ColorTransform(0.36,1,1,1,64,129,-70,0);
sample.transform.colorTransform = color;
詳細に書くと
redMultiplier:Number (default = 1.0) - [ 0 ~ 1 ]
greenMultiplier:Number (default = 1.0) - [ 0 ~ 1 ]
blueMultiplier:Number (default = 1.0) - [ 0 ~ 1 ]
alphaMultiplier:Number (default = 1.0) - [ 0 ~ 1 ]
redOffset:Number (default = 0) - [-255 ~ 255 ]
greenOffset:Number (default = 0) - [-255 ~ 255 ]
blueOffset:Number (default = 0) - [-255 ~ 255 ]
alphaOffset:Number (default = 0) - [-255 ~ 255 ]
また、 Tweenerのプロパティで利用する場合は
import caurina.transitions.Tweener;
import caurina.transitions.properties.*;
import caurina.transitions.properties.ColorShortcuts;
ColorShortcuts.init();//初期化
〜省略〜
Tweener.addTween(bgSprite, {_color_redMultiplier:1, time:5, delay:10, transition: "linear"});
Tweener.addTween(bgSprite, {_color_redOffset:12, time:5, delay:10, transition: "linear" });
Tweener.addTween(bgSprite, {_color_greenMultiplier:1, time:5, delay:10, transition: "linear" });
Tweener.addTween(bgSprite, {_color_greenOffset:34, time:5, delay:10, transition: "linear" });
Tweener.addTween(bgSprite, {_color_blueMultiplier:1, time:5, delay:10, transition: "linear" });
Tweener.addTween(bgSprite, {_color_blueOffset:56, time:5, delay:10, transition: "linear" });
Posted at 02:20 AM | Comments (0)
AS3 : Soundファイル
March 12, 2009
■ライブラリ埋込み型
import flash.display.*;
import flash.events.*;
import flash.net.URLRequest;
import caurina.transitions.Tweener;
import flash.net.URLRequest;
import flash.net.navigateToURL;
import flash.media.Sound;
import flash.media.SoundChannel;
import flash.media.SoundTransform;〜省略〜
//サウンド
var sound_obj : ClickSound;
var sound_obj2 : PushSound;
var channel : SoundChannel;
〜省略〜
sound_obj = new ClickSound();
sound_obj.play(0,1);
音楽ファイルをライブラリに読み込んで、リンゲージのクラス名を「ClickSound」にして
ActionScriptに書き出しをチェックする。
■外部ファイル型(以前にも掲載しているのですが念のため)
//サウンド
var mySound : Sound;
var mySoundChannel : SoundChannel;
var mySoundTransform : SoundTransform;
var soundURL_Loop : URLRequest = new URLRequest("sound/loop_bgm.mp3");//ファイルのパス〜省略〜
mySound = new Sound(soundURL_Loop);
mySoundChannel = mySound.play(0,99);
mySoundTransform = new SoundTransform();
mySoundTransform.volume = .8;
mySoundChannel.soundTransform = mySoundTransform;
【追記】
最近便利なのでカヤックさんの下記クラス使ってます。
http://level0.kayac.com/2009/01/post_10.php
使いやすくまとめてくれてるので、
ちょっとしたBGM再生の時はとても便利です。
Posted at 10:11 PM | Comments (0)
AS3 : Timer
AS3のTimerの使い方。
import flash.utils.Timer;
import flash.events.TimerEvent;
〜省略〜
var timer:Timer = new Timer(2000,1);
timer.addEventListener(TimerEvent.TIMER, SampleFunc);
timer.start();
〜省略〜
public function SampleFunc( event:TimerEvent ):void
{
trace("SampleFunc");//2秒後にトレース:SampleFunc
}
Posted at 03:28 PM | Comments (0)
AS3.0 : XMLファイルを読込む
February 24, 2009
var sampXml:XML;
var sampXML_REQUEST:URLRequest;
var sampXMLLoader:URLLoader;
var samp_level:Number;
//コンストラクタ
public function Sample():void
{
・・・sampXml = new XML();
sampXML_REQUEST = new URLRequest( tenkiadd );
sampXMLLoader = new URLLoader( tenkiXML_REQUEST );
sampXMLLoader.addEventListener( Event.COMPLETE, _onsampXMLComplete );
}
public function _onsampXMLComplete(event:Event):void
{
sampXml = XML( sampXMLLoader.data );
samp_level = sampXml.samp1[0].samp2[0].@samp3;
trace(samp_level);//出力:TestXML
}
値はそんままで、属性は@でとれるようになってます。
すごく扱いやすくなりましたね。
XMLはこんなかんじ↓
<?xml version="1.0" encoding="UTF-8" ?>
<samp0>
<samp1>
<samp2 samp3="TestXML" />
</samp1>
</samp0>
どうも初めのタグ<samp0>は省略されるらしい。
【追記】2009/04/08
個の数を出したいときは
samp_un = sampXml.samp1[0].samp2[0].length();
でOK。
Posted at 12:50 AM | Comments (0)
AS3.0 : 外部テキストファイルを読込む
February 23, 2009
var _areacode:String;//テキストファイルのパス
var myTextLoader:URLLoader;
var myTextRequest:URLRequest;
var area_str:String;
var areaVars:Array;
//コンストラクタ
public function Sample():void
{
・・・
myTextLoader = new URLLoader();
myTextRequest = new URLRequest(_areacode);
myTextLoader.addEventListener(Event.COMPLETE, onmyTextComplete);
myTextLoader.load(myTextRequest);
}
public function onmyTextComplete( eventObject:Event ):void
{
text_str = String(eventObject.target.data);
textVars = new Array();
textVars = text_str.split(",");
for (var name_str:String in textVars){
trace([name_str, textVars[name_str]]);
}
}
Posted at 11:04 PM | Comments (0)
Tweener Ver2
Tweenerで変数を渡したい時は下記を使えばOK。
onCompleteParams:[param]
import caurina.transitions.Tweener;var param:Number = 99;
Tweener.addTween(_mc, { _y:50, time:1, transition:"easeInSine",
onComplete:sampleFunc, onCompleteParams:[param]});function sampleFunc(param:Number):void
{
trace(param)//出力99
}
【追記】
//Tweenを途中で消す時
Tweener.removeTweens(sampleMC);
// sampleMCの全トゥイーンを一時停止
Tweener.pauseTweens(sampleMC);
// sampleMCの全てのトゥイーンを再開
Tweener.resumeTweens(sampleMC);
これよく忘れるのでメモメモ。。
Posted at 10:57 PM | Comments (0)
SWFObjectとFlashVars
December 22, 2008
SWFObject v1.5の場合は
var so = new SWFObject("swf/main.swf", "main", "100%", "100%", "8", "#FFFFFF", true);
so.addVariable("FlashVars", "sample");
so.addParam("allowScriptAccess", "always");
〜
so.write("flashContentsBlock");
Flash側
var myname:String;
var flashVars:Object = this.root.loaderInfo.parameters;
myname = flashVars['sample'];
SWFObject v2.1の場合は
<head>
<script type="text/javascript" src="swfobject-2-1.js"></script>
<script type="text/javascript">
function createPlayer(thePlaceholder, thePlayerId, theFile, theAutostart) {
var flashvars = {
file:theFile,
autostart:theAutostart
}
var params = {
allowfullscreen:"true",
allowscriptaccess:"always"
}
var attributes = {
id:thePlayerId,
name:thePlayerId
}
swfobject.embedSWF("player.swf", thePlaceholder, "320", "196", "9.0.115",
false, flashvars, params, attributes);
}
function init() {
createPlayer("placeholder1", "player1", "xxxxxx1.flv", false);
createPlayer("placeholder2", "player2", "xxxxxx2.flv", false);
createPlayer("placeholder3", "player3", "xxxxxx3", false);
}
</script>
</head>
でいけるみたい。忘れそうなのでメモ。
【追記】
URLにパラメーター付けてアクセスする時。
HTML側
so.addVariable("id", getQueryParamValue("id"));
Flash側のソースは下記になります。
import flash.display.*;
〜
var tmpParam:Object; = loaderInfo.parameters;
var id_numberString = String(tmpParam["id"]);
〜
参考サイト
http://www.link-log.net/archives/2007/07/htmlswf_2.html
Posted at 11:20 AM | Comments (0)
mouseEnabled
November 23, 2008
AS2ではuseHandCursorでボタンの機能を無効化していたのですが、AS3では
_mc.mouseEnabled = false;
でOK。
【追記】
5ive™.blog 引用
http://www.5ive.info/blog/archives/82
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
mouseEnabled
これはマウスイベントを受け取るかどうかを判断するプロパティ。こいつをfalseにするとマウスイベントを受け取らなくなるので、一時的にリスナーを切りたいけどremoveEventListenerするのが面倒とか、あるタイミングだけマウスに反応させたくない時に使用する。
mouseChildren
これと合わせて覚えておきたいのがmouseChildrenだ。mouseChildrenはオブジェクトの子に対してマウスが有効かどうかを判断するプロパティ。つまり親MCにぶらさがる子MCすべてのマウスイベントの伝播を止めることができる。一括してマウスイベントを受け取りたくない時に使うとかなりの手間が省ける。
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
Posted at 09:07 PM | Comments (0)
AS3でカスタムイージング
October 18, 2008
AS3でカスタムイージングを使う時は下記のfromCurve関数を設定すればOK。
private const _sample_array:Array = [{Mx:0,My:0,Nx:0,Ny:8,Px:10,Py:-83},
{Mx:10,My:-75,Nx:26,Ny:-238,Px:17,Py:206},{Mx:53,My:-107,Nx:62,Ny:186,Px:-21,Py:-195},
{Mx:94,My:-116,Nx:22,Ny:-202,Px:20,Py:175},{Mx:136,My:-143,Nx:54,Ny:156,Px:-18,Py:-174},
{Mx:172,My:-161,Nx:14,Ny:-94,Px:14,Py:55},{Mx:200, My:-200}];〜
Tweener.addTween(SampleMC, {y:0, time:5, transition:fromCurve,transitionParams: _sample_array});
〜
function fromCurve (t:Number,b:Number,c:Number,d:Number,pl:Array):Number {
var r:Number = 200 * t/d;
var i:Number = -1;
var e:Object;
while (pl[++i].Mx<=r) e = pl[i];
var Px:Number = e.Px;
var Nx:Number = e.Nx;
var s:Number = (Px==0) ? -(e.Mx-r)/Nx : (-Nx+Math.sqrt(Nx*Nx-4*Px*(e.Mx-r)))/(2*Px);
return (b-c*((e.My+e.Ny*s+e.Py*s*s)/200));
}
Posted at 05:53 PM | Comments (0)
setChildIndex()
October 17, 2008
最前面にするとき
var lastIndex:int = 前面にするMCの親.numChildren - 1;
前面にするMCの親.setChildIndex(前面にするMC, lastIndex);
(numChildren ・・・ この子リストに含まれる子の数)
(例)
var lastIndex:int = container.numChildren - 1;
container.setChildIndex(this.menu_mc,lastIndex);
最背面にするとき
背面にするMCの親.setChildIndex(背面にするMC, 0);
(例)
container.setChildIndex(this.menu_mc,0);
http://ameblo.jp/linking/entry-10069008383.html
Posted at 02:14 PM | Comments (0)
自身のロード状況を表示
September 23, 2008
//------------------------------------------
//ローディング設定
//------------------------------------------
import caurina.transitions.Tweener;
import caurina.transitions.properties.ColorShortcuts;
stage.scaleMode=StageScaleMode.NO_SCALE;
stage.align=StageAlign.TOP_LEFT;//▼SWFファイル容量取得
var totalBytes:uint = this.loaderInfo.bytesTotal;//▼イベントハンドラ設定
stage.addEventListener(Event.ENTER_FRAME, xEnterFrame);//▼関数定義
function xEnterFrame(event:Event) {
var loadPer:uint = Math.floor(this.loaderInfo.bytesLoaded / totalBytes * 100);
load_robo.h_mask.scaleY = loadPer/100;
if (loadPer >= 100){
load_robo.heart_click.alpha = 1;
Tweener.addTween(load_robo, {alpha:0, time:2, transition:"easeOutExpo",
delay:2, onComplete:onMainload});
stage.removeEventListener(Event.ENTER_FRAME, xEnterFrame);
}
}//ローディング完了
function onMainload(){
play();
}
stop();
Posted at 06:01 PM | Comments (0)
Loader
外部のswfを読込む方法。
package {
import flash.display.Loader;
import flash.net.URLRequest
public class MainLoad extends MovieClip{
static var ldr_top:Loader;
static var url_top:String;
static var urImage_top:URLRequest;
public function sample_load(){
ldr_top = new Loader();
url_top = "swf/top.swf";
urImage_top = new URLRequest(url_top);
ldr_top.load(urImage_top);
mm.addChild(ldr_top);
}
}
}
Posted at 05:50 PM | Comments (0)
Papervision3Dでピクセル等倍表示
ピクセル等倍になる距離 = camera.focus * camera.zoom - camera.focus
ピクセル等倍になる距離 = camera.focus * camera.zoom - camera.focus + camera.focus
でできるらしい。
camera.focus = 100;
camera.zoom = 11;
//ピクセル等倍になる距離 = camera.focus * camera.zoom - camera.focus
//ピクセル等倍になる距離 = camera.focus * camera.zoom - camera.focus + camera.focus
camera.z = camera.focus * camera.zoom - camera.focus;
詳しくはこちら
http://blog.r3c7.net/?p=166
Posted at 05:37 PM | Comments (0)
Tweener
September 09, 2008
import caurina.transitions.Tweener;
import caurina.transitions.properties.ColorShortcuts;
import caurina.transitions.properties.FilterShortcuts;
//ColorShortcutsの初期化
ColorShortcuts.init();
//FilterShortcutsの初期化
FilterShortcuts.init();
//ムービの初期設定
var mc:Object = {time:0 , x:300 , y:200 , alpha:0 , _Blur_blurX:50 , _Blur_blurY:50, _brightness:1};
Tweener.addTween(sample.MoveClip {alpha:1, _Blur_blurX:0, _Blur_blurY:0, _brightness:0,
transition:"easeInQuart", time:0.5, delay:2.5, onComplete:Sample});
public function Sample(){
〜Action〜
}
かなり多用してます。
_brightnessもあります。
【追記】
解除する時は
MovieClip.removeTweens( 〜 );
でOK
全て削除する場合は
Tweener.removeAllTweens();
Posted at 09:54 PM | Comments (0)
AS3でリンク設定
import flash.net.navigateToURL;
import flash.net.URLRequest;
〜
//_blank
var url_send:URLRequest = new URLRequest( "http://www.yahoo.co.jp/" );
navigateToURL(url_send);
//_self
var url_send2:URLRequest = new URLRequest( "http://www.yahoo.co.jp/" );
navigateToURL(url_send2, "_self");
なんかめんど臭い。
Posted at 09:50 PM | Comments (0)
AS3でFlv再生
September 05, 2008
VideoStageCls.asドキュメントクラス
package {
import flash.display.*;
import flash.events.*;
import flash.media.*;
import flash.net.*;public class VideoStageCls extends Sprite{
//NETSTREAM
private var connection : NetConnection;
private var netStream : NetStream;
private var obj : Object;
private var video_obj : Video;
private var video_cotena : DisplayObjectContainer;
public function VideoStageCls()
{
VideoStart();
}
private function VideoStart():void
{
video_cotena = new Sprite();
addChild(video_cotena);
//ローカルファイルアクセス用のネットコネクションを作成する
connection = new NetConnection();
//ストリーミングの場合「null」を変更する
connection.connect (null);
//Object
obj = new Object();
//ネットストリームオブジェクトを作成する
netStream = new NetStream(connection);
//画面上に表示する
video_obj = new Video();
video_cotena.addChild(video_obj);
video_obj.x = 0;
video_obj.y = 0;
video_obj.width = 800;
video_obj.height = 600;
//ビデオオブジェクトとネットストリームオブジェクトを関連付ける
video_obj.attachNetStream (netStream);
netStream.play("flv/sample.flv");//再生
netStream.client = obj;
netStream.addEventListener(AsyncErrorEvent.ASYNC_ERROR,asyncErrorHandler);
netStream.addEventListener(IOErrorEvent.IO_ERROR,URLLoaderIOErrorFunc);
netStream.addEventListener(NetStatusEvent.NET_STATUS ,URLLoaderProgressFunc);
video_cotena.stage.addEventListener(Event.ENTER_FRAME, Main_EnterFrame);
}
private function Main_EnterFrame(event:Event){
//-----------------------------------------------------------------
//再生中の FLV ファイルに埋め込まれている詳細情報を取得
//-----------------------------------------------------------------obj.onMetaData = function(param:Object){
trace("総時間 : " + param.duration + "秒");
trace("幅 : " + param.width);
trace("高さ : " + param.height);
trace("ビデオレート : " + param.videodatarate + "kb");
trace("フレームレート : " + param.framerate + "fps");
trace("コーデックID : " + param.videocodecid);
//キューポイント
var key:String;
for( key in param ){
trace("[ key ] " + key + ": " + param[key]);
}
}
}
private function asyncErrorHandler(event:AsyncErrorEvent):void
{
trace("ASYNC_ERROR");
}
private function URLLoaderIOErrorFunc(event:IOErrorEvent):void
{
trace ("ファイル入出力のエラー");
}
private function URLLoaderProgressFunc(event:NetStatusEvent):void
{
switch(event.info.code){
case "NetStream.Buffer.Empty":
trace ("バッファが空になったので中断");
break;
case "NetStream.Buffer.Full":
trace ("バッファを満たしたので再生");
break;
case "NetStream.Buffer.Flush":
trace ("ストリーム読み込みが終了した");
break;
case "NetStream.Play.Start":
trace ("再生の開始");
break;
case "NetStream.Play.Stop":
trace ("再生の停止");
break;
case "NetStream.Play.StreamNotFound":
trace ("FLV ファイルが見つからない");
break;
case "NetStream.Play.Failed":
trace ("その他のエラー");
break;
case "NetStream.Seek.Failed":
trace ("シークが失敗した");
break;
case "NetStream.Seek.InvalidTime":
trace ("有効ではないシーク時間を指定した");
trace ("指定可能なシーク時間 : " + event.info.details);
netStream.seek (event.info.details);
break;
case "NetStream.Seek.Notify":
trace ("シーク操作を完了");
break;
default:
trace ("その他のイベントコード:" + event.info.code);
}
}
}
}
【追記】
一時停止した動画を再び再生したい場合は
_netStream.pause();
_netStream.resume();
一時停止と再生を交互に繰り返したい場合は
_netStream.togglePause();
再生位置を取得する場合は
var time : Number = _netStream.time;
再生位置(単位:秒)を変更する場合は
_netStream.seek(20);
Posted at 08:35 PM | Comments (0)
AS3のメモリー解放
これがなかなかやっかいです。外部swfをloaderで読込んで消したい時にunLoadするだけではメモリーは解放されません。
http://www.trick7.com/blog/2008/08/07-044657.php
http://www.kkfactory.net/mt/archives/2008/08/as3loaderbitmap.html
色々書いてるけど、もっと簡単にできないものでしょうか?
http://www.kkfactory.net/mt/archives/2008/08/as3loaderbitmap.html
これを実装してみたけど、うまくいきませんでした...
Posted at 08:25 PM | Comments (0)
Papervision3Dでマウスに反応
Viewport3D.interactive = true
にする。
Posted at 08:18 PM | Comments (0)
AS3でサウンド再生
AS3で音を再生する方法。
import flash.media.Sound; import flash.media.SoundChannel; import flash.media.*;var mySound:Sound;
var mySoundChannel:SoundChannel;
var mySoundTransform:SoundTransform = new SoundTransform();
var soundURL = new URLRequest("sound/Loop.mp3"); //ロードするMP3ファイルのURL略
//再生
public function MainBGM_Play(){
mySound = new Sound(soundURL);
mySoundChannel = mySound.play(0,99);
mySoundTransform.volume = 1;
mySoundChannel.soundTransform = mySoundTransform;
}
//音量調整
public function MainBGM_Small(){
mySoundTransform.volume = 0.5;
mySoundChannel.soundTransform = mySoundTransform;
}
public function MainBGM_Stop(){
mySoundTransform.volume = 0;
mySoundChannel.soundTransform = mySoundTransform;
}
//完全にストップ
public static function SoundAllNo(){
mySoundTransform.volume=0;
SoundMixer.soundTransform = mySoundTransform;
SoundMixer.stopAll();//再生中のサウンドをすべて停止します。
}
Posted at 08:03 PM | Comments (0)
AS3
September 04, 2008
最近、やっとAS3を本腰入れてやってます。基本実戦で覚えるタイプなのでかなり苦戦しています(泣)
いろいろメモしておきたい事が山ほどあるのでこれから随時アップしていきます。
Posted at 05:28 PM | Comments (0)
