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
Tweet
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);
}
Tweet
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
Tweet
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
Tweet
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.");
}
Tweet
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/
Tweet
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"});
}
Tweet
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");
}
}
}
Tweet
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;
?>
Tweet
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
Tweet
TextFieldの高さを取得
June 02, 2010
TextFieldの高さはtextHeightで取得できるみたい。
ただ、上下に2pixelのズレがあるので+4すれば大丈夫みたいです。
参考サイト
http://labs.torques.jp/2009/09/25/560/
Tweet
AS3 : System.useCodePage
April 01, 2010
ちょっとハマってしまったのでメモ。
AS2だと
System.useCodepage = false;
AS3だと
System.useCodePage = false;
Page のPが大文字になってます。
Tweet
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
Tweet
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
Tweet
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");
}
}
}
Tweet
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];
Tweet
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;
〜
Tweet
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
}
Tweet
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です。
Tweet
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です。
Tweet
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に格納されるようです。
Tweet
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;
Tweet
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" });
Tweet
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再生の時はとても便利です。
Tweet
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():タイマーを停止します。
Tweet
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。
Tweet
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]]);
}
}
Tweet
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);
これよく忘れるのでメモメモ。。
Tweet
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
Tweet
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すべてのマウスイベントの伝播を止めることができる。一括してマウスイベントを受け取りたくない時に使うとかなりの手間が省ける。
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
Tweet
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));
}
Tweet
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
Tweet
自身のロード状況を表示
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();
Tweet
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);
}
}
}
Tweet
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
Tweet
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();
Tweet
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");
なんかめんど臭い。
Tweet
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);
Tweet
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
これを実装してみたけど、うまくいきませんでした...
Tweet
Papervision3Dでマウスに反応
Viewport3D.interactive = true
にする。
Tweet
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();//再生中のサウンドをすべて停止します。
}
Tweet
AS3
September 04, 2008
最近、やっとAS3を本腰入れてやってます。基本実戦で覚えるタイプなのでかなり苦戦しています(泣)
いろいろメモしておきたい事が山ほどあるのでこれから随時アップしていきます。
Tweet