雨と風と快晴と 2.0

個人の勉強とPCライフに役立つツールをめざすブログ。
個人としてはWebクリエイターとして活躍中(?)。

ActionScript3.0 トゥイーン系ライブラリ BetweenAS3

2010年03月15日 | プログラミング
動きのあるFlashを作成する場合、AS2の頃はFuse Kitを使っていたのだが、残念ながらAS3バージョンはあるのかないのか判らない。
そのため、制約がない場合はAS2にて開発を行っていた1年以上前。
また、もっとも有名であろうTweenerも半年くらい前には開発が終了してしまい、同時に複雑なトゥイーンも必要としていなかったこともあってずっとそのままにしていた。

だが、新しく頂いた案件で、トゥイーンが必要となったため改めて調べてみた。

で、見つかったのが BetweenAS3
使い勝手はFuse Kitなどとほとんど変わらないので違和感なし。
開発中のアルファ版とのことだが、自分のレベルでは十分すぎる完成度。


で、使い方は以下の通り。

import org.libspark.betweenas3.BetweenAS3;
import org.libspark.betweenas3.tweens.ITween;
import org.libspark.betweenas3.easing.*

// 一番簡単なトゥイーンの方法。
BetweenAS3.tween( square1Mc, { x:450 },{x:50}, 1.0).play();

// 順番に動かす場合はこんな感じ
var serialTween1:ITween = BetweenAS3.tween( square2Mc, { x:150 },{x:50,y:150}, 0.25);
var serialTween2:ITween = BetweenAS3.tween( square2Mc, { y:100 }, null, 0.2);
var serialTween3:ITween = BetweenAS3.tween( square2Mc, { x:250 },null, 0.25);
var serialTween4:ITween = BetweenAS3.tween( square2Mc, { y:150 },null, 0.2);
var serialTween5:ITween = BetweenAS3.tween( square2Mc, { x:450 },null, 0.5);
BetweenAS3.serial(serialTween1,serialTween2,serialTween3,serialTween4,serialTween5).play();

// 並行処理の場合はこんな感じ。イージングも可能。
var parallelTween1:ITween = BetweenAS3.tween( square3Mc, { x:450 },{x:50}, 1, Back.easeInOut);
var parallelTween2:ITween = BetweenAS3.tween( square4Mc, { x:450 },{x:50}, 1, Quint.easeInOut);
BetweenAS3.parallel(parallelTween1,parallelTween2).play();


考え方もシンプルで好きかも。
イージングの種類も多岐に渡っているからじっくり見てみたい。


ActionScript3.0 タイマー処理

2010年03月14日 | プログラミング

ASにはSleep関数が存在しないため、タイマーによる疑似的なスリープを設定する必要がある。


var timer:Timer = new Timer(1000 ,1); // 1000ミリ秒 = 1秒
timer.addEventListener(TimerEvent.TIMER, timerFunc);
timer.addEventListener(TimerEvent.TIMER_COMPLETE, timerCompFunc);
timer.start();

function timerFunc(Event){
trace("予定する繰り返し回数:"+timer.repeatCount);
trace("現在の繰り返し回数 :"+timer.currentCount);
}

function timerCompFunc(Event){
trace("タイマーが完了");
}


1回だけ動かす場合(Sleepとして使う場合も)、TIMER、TIMER_COMPLETE のどちらを使っても同じ結果になる。
まぁ、1回だけならTIMERでやっちゃうかな。

repeatCount、currentCountプロパティを使うことで、繰り返し全体の何回目かを取得することができる。
これによって、偶数、奇数の場合で処理を分けたりもできるようだ。

注意点としては、タイマーに指定した処理間隔にズレが生じる場合があるらしい。
これは、呼び出された関数で処理が完了してからの間隔であるため、関数内で時間がかかると、その分、次の処理に遅れが出るとのこと。
 # どこかの記事で読んだだけで、自分は未確認・・・。



ActionScript3.0 文字列操作のいろいろ

2010年03月14日 | プログラミング

AS3に染まりきっている今日この頃。
毎回同じようなことを調べていてウザいので、まずは文字列操作についてここにまとめておく。
 # 何度も調べるってことは身についていないということか・・・。

まず、変数定義。


var targetStr:String ;
var targetStr1:String ;
var targetStr2:String ;
var pattern:RegExp;
var resultObject:Object;


最初に、邪魔な文字列を削除する場合。
ずっと1つ目のやり方でやっていたのだけど、replace関数があることを発見!!(←遅いよ・・・)
入れ替えだけならかなり便利だ。


// "target006SubMc" の "Sub" を削除して "target006Mc" としたい場合(その1)
targetStr = "target006SubMc";
targetStr1 = targetStr.split("Sub").join("");

trace(targetStr,targetStr1); // →出力結果: target006SubMc target006Mc

// "target006SubMc" の "Sub" を削除して "target006Mc" としたい場合(その2)
targetStr = "target006SubMc";
targetStr1 = targetStr.replace("Sub","");

trace(targetStr,targetStr1); // →出力結果: target006SubMc target006Mc



続いて、文字列の中の一部を取り出す方法。
とりあえず3つ用意したが、「その2」は「その1」の発展形。
「その3」は正規表現を利用してみたが、数字が含まれない場合は戻り値がないからエラー処理も必要になるはず。
どれが一番よいのかは不明。
ベンチマークする予定はなし。



// "target006Mc" の "006" だけ取り出したい(その1)
targetStr = "target006Mc";
targetStr1 = targetStr.substr("target".length);
targetStr2 = targetStr1.substr(0,targetStr1.indexOf("Mc")) ;

trace(targetStr,targetStr1,targetStr2); // →出力結果: target006Mc 006Mc 006


// "target006Mc" の "006" だけ取り出したい(その2)
間違っていたので削除しました


// "target006Mc" の "006" だけ取り出したい(その3)
// AS3.0から正規表現が使えるようになった!!
targetStr = "target006Mc";
pattern = /(d+)/;
resultObject = pattern.exec(targetStr);

trace(targetStr,resultObject[0]); // →出力結果: target006Mc 006




AS3.0から正規表現が使えるようになったことは、かなり使えると思う。
でも、PerlとかPHPとかとちょっとお作法が違うので戸惑ってます。
まぁ、使えることには間違いない。


で、もうひとつ、正規表現を使った数字の金額へ補正するプログラム。



// 正規表現を使って、数字を金額用のカンマ付きの文字列として返す
var price:int = 10000000; // 1千万
trace(getPriceString( price )); // →出力結果: 10,000,000


function getPriceString( price ){
var pattern:RegExp = /(d)(?=(d{3})+(?!d))/g;
return String(price).replace(pattern, "$1,");
}



とりあえずこの位は押さえておきたい・・・。