home > AS3

AS3 : TextField フォーカスイベント

July 01, 2011

テキストエリアがフォーカス(選択)されたか、されてないかの判定。

フォーカスされた時
FocusEvent.FOCUS_IN
フォーカスが外れた時
FocusEvent.FOCUS_OUT

stage.addEventListener(FocusEvent.FOCUS_IN,focusIn);
stage.addEventListener(FocusEvent.FOCUS_OUT,focusOut);

private function focusIn(e:FocusEvent):void {
 trace("focusIn");
}
private function focusOut(e:FocusEvent):void {
 trace("focusOut");
}

参考サイトはこちら
http://moire69.sakura.ne.jp/ac/?p=222


Permalink | Comments (0)

AS3 : 画像のアップロード

January 24, 2011

ローカルから画像ファイルをアップロードする方法。

間違いやすい点として戻り値は
Event.COMPLETE ではなくて、
DataEvent.UPLOAD_COMPLETE_DATA より取得する。

JPGEncoderのライブラリーはこちらから一式DLください。


import com.adobe.images.JPGEncoder;
import flash.utils.ByteArray;
import jp.psyark.net.MultipartFormDataBuilder;

private function SelectAction():void
{
 //セレクト
 fileRef = new FileReference();
 fileRef.addEventListener( Event.SELECT, onSelectFile );
 var imagesFilter:FileFilter = new FileFilter("Images", "*.jpg");
 fileRef.browse([imagesFilter]);
}
private function onSelectFile( e:Event ):void
{
 fileRef.removeEventListener( Event.SELECT, onSelectFile );
 if(fileRef.size <= 5000000){//5M以下の場合
  fileRef.addEventListener(Event.COMPLETE, onFileLoaded);
  fileRef.addEventListener(IOErrorEvent.IO_ERROR, onFileLoadError);
  fileRef.addEventListener(ProgressEvent.PROGRESS, onProgress);
  fileRef.load();
 }
}
//onFileLoadError
private function onFileLoadError(event:Event):void
{
 fileRef.removeEventListener(Event.COMPLETE, onFileLoaded);
 fileRef.removeEventListener(IOErrorEvent.IO_ERROR, onFileLoadError);
 fileRef.removeEventListener(ProgressEvent.PROGRESS, onProgress);
 trace("File load error");
}
//onProgress
private function onProgress(event:ProgressEvent):void
{
 var percentLoaded:Number=event.bytesLoaded/event.bytesTotal*100;
 trace("loaded: "+percentLoaded+"%");
}
//onFileLoaded
private function onFileLoaded(event:Event):void
{
 fileRef.removeEventListener(Event.COMPLETE, onFileLoaded);
 fileRef.removeEventListener(IOErrorEvent.IO_ERROR, onFileLoadError);
 fileRef.removeEventListener(ProgressEvent.PROGRESS, onProgress);
 
 var fileReference:FileReference=event.target as FileReference;
 var data:ByteArray=fileReference["data"];
 trace("File loaded");
 var movieClipLoader:Loader=new Loader();
 movieClipLoader.loadBytes(data);
 movieClipLoader.contentLoaderInfo.addEventListener(Event.COMPLETE, onMCLoaderComplete);
}
//onMCLoaderComplete
private function onMCLoaderComplete(event:Event):void
{
 trace("onMovieClipLoaderComplete");
 //BitmapData
 var upppbmp:BitmapData = Bitmap(event.target.content).bitmapData;
 trace("upppbmp = "+upppbmp);
 
 //エンコードする
 var jpegup:JPGEncoder = new JPGEncoder(100);
 var byteArrup:ByteArray = jpegup.encode(upppbmp);
 
 var selecturl:URLRequest = new URLRequest();
 selecturl.url = _uploaderphp;
 var variables:URLVariables = new URLVariables();
 variables.imgupload = byteArrup;
 selecturl.method = URLRequestMethod.POST;
 selecturl.data = variables;
 
 fileRef.addEventListener(Event.COMPLETE, onUploadData);
 fileRef.addEventListener(DataEvent.UPLOAD_COMPLETE_DATA, uploadDataHandler);
 fileRef.addEventListener(ProgressEvent.PROGRESS, onProgressUP);
 //fileRef.addEventListener(IOErrorEvent.IO_ERROR, ioErrorUP);
 fileRef.upload(selecturl);
}
//===================================================//
//アップロードと同時にXMLを取得する:UPLOAD_COMPLETE_DATA
//===================================================//
private function uploadDataHandler(e:DataEvent):void
{
 fileRef.removeEventListener(DataEvent.UPLOAD_COMPLETE_DATA, uploadDataHandler);
 //XML取得
 var uploaderXML:XML = new XML( e.data );
 trace("uploaderXML = "+uploaderXML);
}

WEBカメラからのキャプチャーをとる方法は下記です。

private function CameraAction():void
{
 camera = Camera.getCamera();
 if(camera != null){
  trace("使用可能なカメラあり。");
  camera.addEventListener(StatusEvent.STATUS, statusHandler);
  camera.setMode(camera_width, camera_height, 15);
  camera.setMotionLevel(10);
  camera.setQuality(0, 50);

  video = new Video(camera.width, camera.height);
  video.attachCamera(camera);
  _webcamera.addChild(video);
  video.x = -camera_width/2;
  video.y = -camera_height/2;
 }else{
  trace("使用可能なカメラがありません。");
 }
}
//statusHandler
private function statusHandler(evt:StatusEvent):void
{
 trace("camera.muted = "+camera.muted);
 if(camera.muted){
  trace("カメラへのアクセスが拒否されました。");
  trace("カメラの映像を表示するにはアクセスを許可してください。");
  Security.showSettings(SecurityPanel.PRIVACY);
 }else{
  trace("使用中のカメラ : " + camera.name);
  trace("幅x高さ : " + camera.width + "x" + camera.width);
 }
}
private function BitmapAction():void
{
 bdTmp = new BitmapData(camera_width, camera_height);
 bdTmp.draw(video);

 //エンコードする
 var jpeg:JPGEncoder = new JPGEncoder(100);
 var byteArr:ByteArray = jpeg.encode(bdTmp);
 jpgSend(byteArr);
}
private function jpgSend(ba:ByteArray):void
{
 var builder:MultipartFormDataBuilder = new MultipartFormDataBuilder("247672365515574"); //バウンダリは適当
 builder.addPart("imgupload", ba, "geee_webcam.jpg"); //JPEGエンコードされたByteArray

 //POST---imgupload
 var _uploaderphp:String = "sample.php";//アップロードするプログラム先
 JpegRequest = new URLRequest();
 JpegRequest.url = _uploaderphp;
 builder.configure(JpegRequest);

 JpegLoader = new URLLoader();
 JpegLoader.addEventListener(Event.COMPLETE, ImageSoushin);
 JpegLoader.addEventListener(IOErrorEvent.IO_ERROR, ioErrorHD);
 JpegLoader.load(JpegRequest);
}
private function ioErrorHD(e:IOErrorEvent):void
{
 trace("ioErrorHD");
}
private function ImageSoushin(eventObject:Event):void
{
 trace("ImageSoushin");
 JpegLoader.removeEventListener(Event.COMPLETE, ImageSoushin);
 JpegLoader.removeEventListener(IOErrorEvent.IO_ERROR, ioErrorHD);

 //XML取得
 var uploaderXML:XML = new XML( eventObject.target.data );
 trace("uploaderXML = "+uploaderXML);
}

Permalink | Comments (0)

AS3 : CASA Framework

January 19, 2011

以下よりCASAのAS3ライブラリーをダウンロードします。
http://svn.as3.casalib.org/dev/
めんどくさい人はこちらから一式DLください。

package {
import flash.display.*;
import flash.events.*;
import flash.net.*;
import flash.utils.*;
import org.casalib.load.*;
import org.casalib.events.*;

public class CasaSampleCls
{
   private var _imgURLs:Array = ["data/samp1.jpg", "data/samp2.jpg", "data/samp3.jpg", "data/samp4.jpg", "data/samp5.jpg"];
   private var _groupLoad:GroupLoad;
   
   public function ActionCls():void
   {
    //グループロードする
    startLoadGroup();
   }
   private function startLoadGroup():void
   {
    _groupLoad = new GroupLoad();
    _groupLoad.addEventListener(LoadEvent.COMPLETE, onCompleteGroupLoad);
    var len:int = _imgURLs.length;
    for (var i:int = 0; i < len; i++)
    {
     var imageLoad:ImageLoad = new ImageLoad(_imgURLs[i]);
     imageLoad.addEventListener(IOErrorEvent.IO_ERROR, onErrorImageLoad);
     _groupLoad.addLoad(imageLoad);
    }
    //スタート
    _groupLoad.start();
   }
   private function onErrorImageLoad(e:IOErrorEvent):void
   {
    trace("onErrorImageLoad");
    
    var imgs:Array = _groupLoad.completedLoads; //ロードが成功した画像
    var len:int = imgs.length;
    for (var i = 0; i < len; i++)
    {
     if (!imgs[i].loaded)
     {
     //ロードが失敗した画像のかわりにエラー画像のURLを入れる。
     _imgURLs[i] = "data/error.jpg";
    }
   }
   //もう一度グループロードする
   startLoadGroup();
  }
  private function onCompleteGroupLoad(e:LoadEvent):void
  {
   trace("onCompleteGroupLoad");
   
   var len:int = _groupLoad.loads.length;
   for (var i:int = 0; i < len; i++)
   {
    var img:Bitmap = _groupLoad.loads[i].contentAsBitmap; //ビットマップにキャストする。
    img.smoothing = true;
    img.x = 0;
    img.y = 0;
    addChild(img);
   }
 }
}

参考サイトはこちら
http://d.hatena.ne.jp/yoshidam/20100402/1270202619


Permalink | Comments (0)

AS3 : SWFAddress

progressinを使わず、AS3でSWFAddressを使う方法。

ライブラリは下記より最新のものをDLください。
http://www.asual.com/swfaddress/

イベントの種類
・URLを変更したい場合
SWFAddressEvent.CHANGE
・ページが変わったというイベントが実行される場合
SWFAddressEvent.INTERNAL_CHANGE
・ブラウザの戻るボタンや進むボタンなど、FLASH以外での制御が行われた場合
SWFAddressEvent.EXTERNAL_CHANGE

package {
import flash.display.*;
import flash.events.*;
import flash.net.*;
import SWFAddress;
import SWFAddressEvent;
public class SwfaddressCls
{
   private var _defaultTitle:String;
   
   public function SwfaddressCls():void
   {
    //SWFAddress
    SWFAddress.addEventListener(SWFAddressEvent.INIT, initHandler);
   }
   public function clickHandler(_swfname:String):void
   {
    SWFAddress.setValue( _swfname );
    SWFAddress.setTitle( _swfname );
    
    switch(_swfname)
    {
     case "sample1":
      trace("sample1");
      break;
     case "sample2":
      trace("sample2");
      break;
     case "resetStatus()":
      SWFAddress.resetStatus();
      break;
    }
   }
   private function initHandler(event:SWFAddressEvent):void
   {
    SWFAddress.removeEventListener(SWFAddressEvent.INIT, initHandler);
    
    trace("------------------------------------");
    trace("parameterNames: " + event.parameterNames);
    trace("parameters: " + event.parameters);
    trace("path: " + event.path);
    trace("pathNames: " + event.pathNames);
    trace("target: " + event.target);
    trace("type: " + event.type);
    trace("value: " + event.value);
    
    trace("getBaseURL: " + SWFAddress.getBaseURL());
    trace("getHistory: " + SWFAddress.getHistory());
    trace("getParameter: " + SWFAddress.getParameter("unko"));
    trace("getParameterNames: " + SWFAddress.getParameterNames());
    trace("getPath: " + SWFAddress.getPath());
    trace("getPathNames: " + SWFAddress.getPathNames());
    trace("getQueryString: " + SWFAddress.getQueryString());
    trace("getStatus: " + SWFAddress.getStatus());
    trace("getStrict: " + SWFAddress.getStrict());
    trace("getTitle: " + SWFAddress.getTitle());
    trace("getTracker: " + SWFAddress.getTracker());
    trace("getValue: " + SWFAddress.getValue());
    trace("------------------------------------");
    
    _defaultTitle = SWFAddress.getTitle();
    
    SWFAddress.addEventListener(SWFAddressEvent.CHANGE, changeHandler);
    SWFAddress.addEventListener(SWFAddressEvent.EXTERNAL_CHANGE, externalChangeHandler);
    SWFAddress.addEventListener(SWFAddressEvent.INTERNAL_CHANGE, internalChangeHandler);
  }
  private function changeHandler(event:SWFAddressEvent):void
  {
    trace("------------------------------------");
    // パラメータのキー名一覧を配列で取得
    trace("parameterNames: " + event.parameterNames);
    // パラメータ全てを連想配列(Object 型)で取得
    trace("parameters: " + event.parameters);
    // SWFAddress の path 文字列(#以降の文字列)を取得する
    trace("path: " + event.path);
    // SWFAddress の path を配列で取得
    trace("pathNames: " + event.pathNames);     trace("target: " + event.target);
    trace("type: " + event.type);
    trace("value: " + event.value);
    
    switch(event.value)
    {
     case "/sample1":
      trace("sample1");
      Action(sample1);
      break;
     case "/sample2":
      trace("sample2");
      Action(sample2);
      break;
    }
  }
  private function externalChangeHandler(event:SWFAddressEvent):void
  {
    trace("------------------------------------");
    // パラメータのキー名一覧を配列で取得
    trace("parameterNames: " + event.parameterNames);
    // パラメータ全てを連想配列(Object 型)で取得
    trace("parameters: " + event.parameters);
    // SWFAddress の path 文字列(#以降の文字列)を取得する
    trace("path: " + event.path);
    // SWFAddress の path を配列で取得
    trace("pathNames: " + event.pathNames);
    trace("target: " + event.target);
    trace("type: " + event.type);
    trace("value: " + event.value);
  }
  private function internalChangeHandler(event:SWFAddressEvent):void
  {
    trace("------------------------------------");
    // パラメータのキー名一覧を配列で取得
    trace("parameterNames: " + event.parameterNames);
    // パラメータ全てを連想配列(Object 型)で取得
    trace("parameters: " + event.parameters);
    // SWFAddress の path 文字列(#以降の文字列)を取得する
    trace("path: " + event.path);
    // SWFAddress の path を配列で取得
    trace("pathNames: " + event.pathNames);
    trace("target: " + event.target);
    trace("type: " + event.type);
    trace("value: " + event.value);
  }
 }
}

参考サイトはこちら
http://feb19.jp/blog/archives/000181.php


Permalink | Comments (0)

AS3 : ファイルをダウンロードさせる方法

December 24, 2010

Flash側からファイルをダウンロードさせる方法です。

var _downloadpass:String = "http://sample";//ダウンロードさせるパス
var localRef:FileReference = new FileReference();
var request:URLRequest = new URLRequest(_downloadpass);
try {
 trace("Prompt and download file");
 localRef.download(request);
} catch (error:Error){
 trace("Unable to download file.");
}

Permalink | Comments (0)

AS3 : マウスホイール

October 12, 2010

これも良く忘れるのでメモ。

winとmacで同じように機能するマウスホイールの設定です。
ブラウザーによってスクロール量(delta値)の違いはまだありますが....

pixelbreakerを下記よりダウンロードします。
http://blog.pixelbreaker.com/flash/as30-mousewheel-on-mac-os-x
あとはimportして使います。

import flash.events.Event;
import com.pixelbreaker.ui.osx.MacMouseWheel;

MacMouseWheel.setup(stage);
stage.addEventListener(MouseEvent.MOUSE_WHEEL, MouseWheelHandler);

private function MouseWheelHandler( event:MouseEvent ):void
{
trace("MouseDelta : " + event.delta);
_objectmc.bar.y -= event.delta;
}

参考サイト
http://www.ficc.jp/labs/archives/ando/as3_mac/


Permalink | Comments (0)

AS3 : スライド設定

September 20, 2010

良く忘れるのでメモ。

各インスタンス名の説明
元のオブジェクト : _slidemc
スライドするオブジェクト : slideimg
スライドバー : bar

import flash.events.*;
import flash.geom.Rectangle;

//イベントリスナー登録
_slidemc.bar.buttonMode = true;
_slidemc.bar.addEventListener(MouseEvent.MOUSE_DOWN, startMove);
_slidemc.bar.addEventListener(MouseEvent.MOUSE_UP, StopMove);
_slidemc.addEventListener(MouseEvent.MOUSE_UP, StopMove);

〜省略〜

private var Druggrec:Rectangle = new Rectangle(338,-177,0,(405 - 100));// ドラッグの範囲
private var yMax:Number;// MCが実際にスライドする範囲
private var SlideRate:Number;// スライドする割合

//スライド
public function startMove(event:MouseEvent):void
{
_slidemc.bar.startDrag(false,Druggrec);

yMax = 405 - 90;
SlideRate = (_slidemc.slideimg.height - yMax)/yMax;
_slidemc.bar.addEventListener(Event.ENTER_FRAME,ActiveScroll);
}

public function StopMove(event:MouseEvent):void
{
_slidemc.bar.stopDrag();
_slidemc.bar.removeEventListener(Event.ENTER_FRAME,ActiveScroll);
}

//スライドさせるTweener
public function ActiveScroll(event:Event){
Tweener.addTween(_slidemc.slideimg, { y:-Math.abs(SlideRate*( -177 - _slidemc.bar.y )),
time:1, transition:"easeOutExpo"});
}


Permalink | 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");
}
}
}


Permalink | 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;
?>


Permalink | 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


Permalink | Comments (0)

TextFieldの高さを取得

June 02, 2010

TextFieldの高さはtextHeightで取得できるみたい。
ただ、上下に2pixelのズレがあるので+4すれば大丈夫みたいです。

参考サイト
http://labs.torques.jp/2009/09/25/560/


Permalink | Comments (0)

AS3 : System.useCodePage

April 01, 2010

ちょっとハマってしまったのでメモ。
AS2だと
System.useCodepage = false;
AS3だと
System.useCodePage = false;

Page のPが大文字になってます。


Permalink | 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


Permalink | 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 = 512;
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, 0xff0000 );// 線のスタイル設定:赤
//g.beginFill (0xff0000, 1.0);// 面のスタイル設定:赤

/* 円で表示する場合
var n:Number = 0;
n = ( _byteArray.readFloat() * WaveH );
g.drawCircle(275,200,(WaveH - n));
*/

/* 波形表示の場合*/
g.moveTo( 0, WaveH );
//左チャンネルの波形 : 0〜255
//右チャンネルの波形 : 256〜511
//左 + 右 チャンネル取得して描画
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 );
}
}
}

【追記20101115】
サンプルはこちら



問題点としては、別ブラウザーで表示した別サイトの音も解析しようとしておかしな動きをするようですね。
まあ同時に表示しておく人はあまりいないと思いますが。。。

http://feb19.jp/blog/archives/000133.php


Permalink | 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");
  }
 }
}


Permalink | 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];

Permalink | 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;

Permalink | 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
}


Permalink | 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です。


Permalink | 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です。


Permalink | 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に格納されるようです。


Permalink | 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;


Permalink | 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" });


Permalink | 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再生の時はとても便利です。


Permalink | 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
}


【追記 20110623】
reset():タイマーが実行されている場合はタイマーを停止して、ストップウォッチのリセットボタンのように、currentCount プロパティを 0 に戻します。
start():タイマーがまだ実行されていない場合は、タイマーを起動します。
stop():タイマーを停止します。


Permalink | 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。


Permalink | 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]]);
}
}

Permalink | 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);

これよく忘れるのでメモメモ。。


Permalink | 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


Permalink | 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すべてのマウスイベントの伝播を止めることができる。一括してマウスイベントを受け取りたくない時に使うとかなりの手間が省ける。
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜


Permalink | 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));
}


Permalink | Comments (0)

setChildIndex()

October 17, 2008

MCの震度を変更する方法メモ。

最前面にするとき
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


Permalink | 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();



Permalink | 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);
  }
 }
}


Permalink | 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


Permalink | 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, mc);
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();


Permalink | 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");

なんかめんど臭い。


Permalink | 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);


Permalink | 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

これを実装してみたけど、うまくいきませんでした...


Permalink | Comments (0)

Papervision3Dでマウスに反応

Viewport3D.interactive = true

にする。


Permalink | 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();//再生中のサウンドをすべて停止します。
}


Permalink | Comments (0)

AS3

September 04, 2008

最近、やっとAS3を本腰入れてやってます。基本実戦で覚えるタイプなのでかなり苦戦しています(泣)
いろいろメモしておきたい事が山ほどあるのでこれから随時アップしていきます。


Permalink | Comments (0)