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)