Home > Tags > flash

flash

[Flash Lite 1.1]制作前に知っておきたいことをQ&A形式でまとめてみた

最近、GREEやモバゲーにハマっている友達を見て、携帯Flashの需要は今後もますます増えるだろうなぁと実感。
私は携帯Flashは面倒くさそう(特にFlash Lite 1.1)という理由であまり触ったことがありませんでしたが、
やっぱ触った経験がある方がいいなぁと思って最近サンプルを作ってみてます。

Flash Lite 2.0以上であれば、まだスクリプティングは楽そうですが、
やっぱり主流はしばらくFlash Lite 1.1でしょって事で、1.1に挑戦!
私はFlash触ったときすでにAS2.0だったので、AS1.0なFlash Lite 1.1での制作は初めて知ることがたくさんありました。
また携帯ならではの制約や関数もあって、もう面倒くさい!
でも、Flash Lite 1.1のお作法に慣れることができれば、そんなに難しくないなって思いました。

と言う事で自分の備忘録として、Flash Liteの基礎知識や、Flash Lite1.1コンテンツ制作中にぶつかるギモンをQ&A形式でまとめていきまっす!!

Q.容量制限はどんな感じ?

基本的にdocomo、auは1ファイルにつき100KB、SoftBankは150KBとなっている。
ただしauでは、「一回の通信につき100KB」なので、loadMovieを繰り返せばメモリの許す限り、大量のコンテンツを表示させることができる。

各キャリアの容量制限

キャリア バージョン Flash Player 参考メモリサイズ
※機種ごとに変動
docomo 1.0 Flash4相当 FOMA 最大100KB
MOVA 最大20KB
1.1 Flash4相当 最大100KB
※外部load分含む
3.0 Flash8相当 最大100KB
※外部load分含む
※ボタンアクションの場合
1セッションにつき500KBまで
3.1 Flash8相当 最大100KB
※外部load分含む
※ボタンアクションの場合
1セッションにつき500KBまで
3.1 iモードブラウザ2.0端末 Flash8相当 最大500KB
※外部load分含む
※ボタンアクションの場合
1セッションにつき500KBまで
※FLVはプログレッシブ再生
のみ10MBまで
au 1.1 Flash4相当 WIN 最大100KB 1X 最大48KB
※1セッションにつき
2.0 Flash7相当 最大100KB
※1セッションにつき
3.0 Flash7相当 最大100KB
※1セッションにつき
SoftBank 1.1 Flash4相当 最大100KB
2.0 Flash7相当 最大150KB
※1セッションにつき
3.0 Flash7相当 最大150KB
※1セッションにつき

Q.メモリ制限はどんな感じ?

Flash Liteに割り当てられるメモリの量はパソコン用のFlashに比べて貧弱。
コンテンツ開発をしているときにビットマップが赤く表示されることがあれば、メモリ不足のサイン。

各キャリアの搭載メモリの目安

キャリア バージョン 参考メモリサイズ
※機種ごとに変動
docomo 1.0 200~400KB
1.1 2MB程度
3.0 3MB程度
3.1 3MB程度
3.1 iモードブラウザ2.0端末 15MB程度
au 1.1 1MB程度
2.0 3MB程度
3.0 3MB程度
SoftBank 1.1 1MB程度
2.0 2MB程度
3.0 3MB程度

メモリの使用状況を実機で確認するには

fscommand2を使用します。

//useMemoryをテキストフィールドに表示させれば確認できる
useMemory=fscommand2("GetTotalPlayerMemory")-fscommand2("GetFreePlayerMemory");

Q.各キャリアのサウンド形式はどんな感じ?

NTTドコモではMIDI、auとソフトバンクでは「SMAF」という携帯電話などに向けたサウンド形式が採用されている。

MIDIは機種の音源を使用するために、同じ曲でも機種ごとに音色が異なる可能性がある。
一方、SMAFは波形データであるため、基本的には同じ様な音色で再生することが可能。

各キャリアのサウンド形式

キャリア バージョン 参考メモリサイズ
※機種ごとに変動
docomo 1.1~3.1 MIDI、SMF
  3.1 iモードブラウザ2.0端末 MIDI、SMF、MP3
au 全バージョン SMAF(一部MIDI)
SoftBank

docomo端末でのmp3再生

docomo Flash Lite 3.1iモードブラウザ2.0端末では、MP3の再生が可能で、idタグの情報も取得できる。
MP3の容量はswfとあわせて500KBまで。

wav形式⇒SMAF形式変換ツール

YAMAHA製 Wave to SMAFコンバータ(無料)
http://smaf-yamaha.com/jp/tools/downloads.html#converter

Q.一般的なガイドラインが知りたい!

最新のFlash Lite3.1が普及するには、まだまだ時間が必要。
今後しばらくはFlash Lite1.1コンテンツで制作するのが主流。

一番普及台数が多いdocomo向けのFlash Lite1.1に合わせた参考ガイドライン

Flash Liteのバージョン Flash Lite 1.1
画面サイズ 横 240px × 縦 240px~320px
使用メモリ 1000KB
フレームレート 8~10fps
フォントサイズ 小:12px、大:24px
書き出しサイズ 100KB

Q.onEnterFrameが使いたい!

Flash Lite 1.1ではonEnterFrameが使えません。
1フレーム目にループさせたい処理を書いて、
2フレームにgotoAndStop(1);と書いてタイムライン上でループ処理を行うようにします。

Q.インスタンスにアクセスしたい!

tellTarget関数を使います。

ルートからインスタンスmcのフレームを2に移動する例

/*Flash Lite 2.0以降*/
mc.gotoAndStop(2);

/*Flash Lite 1.1の場合*/
tellTarget(”mc”){
gotoAndStop(2);
}

なお、Flash Lite 1.1はドットシンタックスではなく、スラッシュシンタックスなので、記述は下記のような感じになります。

ドットシンタックス(AS2.0) スラッシュシンタックス
mc.child mc/child
_parent.mc.child ../mc/child
_root.mc.child /mc/child

Q.インスタンスのプロパティを変更したい!

setProperty関数を使います。

インスタンスmcの_xを100にする例

/*Flash Lite 2.0以降*/
mc.x=100;
/*Flash Lite 1.1*/
setProperty(”mc”,_x,100);

第1引数にインスタンス名、第2引数にプロパティ、第3引数に値をいれます。

Q.外部へのアクセスはどうやってやるの?

外部へのアクセスはgetURL、LoadMovie、LoadMovieNum、LoadVariables、loadVariablesNumが使用できます。

外部へのアクセスはボタンアクションに設定すること

外部アクセスは必ずボタンアクションに設定されていないといけない。
ボタンアクションは「決定キー」「数字キー(0~9、#、*)」を押すことによるイベントのこと。
また、上下キーにはボタンアクションを割り当てることができない。上下キーはフォーカス移動のみに使用する。

//OK:数字キーは外部通信可能
on(KeyPress "1"){
getURL("a.swf");
}

//NG:上下キーはフォーカス移動のみ
on(KeyPress ""){//←NG:上、下、右、左はボタンアクションを設定できない。
getURL("a.swf");
}

ボタンアクション一回につき1通信しか無理

1回のボタンアクションに大して、1回の通信という制限がある。
1回のボタンアクションに対して、2つ以上の外部通信を記述してもエラーとなり、パブリッシュできない。

//NG:ハンドラ内のアクションは無視される
on(press){
getURL("a.swf");
getURL("b.swf");
}

Q.携帯電話の様々な情報を取得したい!

基本的にどんなコンテンツでも記法は同じだと思うのでスニペットを載せておきます。

時間の取得

/*時・分・秒の取得*/
hour = fscommand2("GetTimeHours");//時間
minute = fscommand2("GetTimeMinutes");//分
second = fscommand2("GetTimeSeconds");//秒

/*時・分・秒が10以下の場合先頭に0を足す*/
if (hour<10) {
 hour = "0" add hour;
}
if (minute<10) {
 minute = "0" add minute;
}
if (second<10) {
 second = "0" add second;
}

年月日の取得

/*年・月・日の取得*/
year = fscommand2("GetDateYear");//年
month = fscommand2("GetDateMonth");//月
day = fscommand2("GetDateDay");//日

/*年・月・日が10以下の場合先頭に0を足す*/
if (year<10) {
 year = "0" add year;
}
if (month<10) {
 month = "0" add month;
}
if (day<10) {
 day = "0" add day;
}

曜日の取得

/*曜日の取得(0~6⇒日~土)*/
weekday = fscommand2("GetDateWeekday");

/*取得した数字によって表示する文字列を変える*/
if (weekday == 0) {//日
 wd = "sun";
} else if (weekday == 1) {//月
 wd = "mon";
} else if (weekday == 2) {//火
 wd = "tue";
} else if (weekday == 3) {//水
 wd = "wed";
} else if (weekday == 4) {//木
 wd = "thu";
} else if (weekday == 5) {//金
 wd = "fri";
} else if (weekday == 6) {//土
 wd = "sat";
}

電波状況の取得

/*電波状況の取得(インスタンスsignalの表示を変更する例)
**docomo:0-3,au:0-4,SoftBank:0-4(0は圏外)*/
tellTarget ("signal") {
 qframe = fscommand2("GetSignalLevel");
 if (qframe>4) {
  qframe = 4;
 }
 gotoAndStop(qframe);
}

電池残量の取得

/*電池残量の取得(インスタンスbatteryの表示を変更する例)
**docomo,au,SoftBank共通:0-3*/
tellTarget ("battery") {
 gotoAndStop(fscommand2("GetBatteryLevel")+1);
}

電源情報の取得

/*電池残量の取得(インスタンスchargeの表示を変更する例)
**0:バッテリー使用、1:外部電源で動作*/
tellTarget ("charge") {
 gotoAndStop( fscommand2("GetPowerSouce")+1);
}

Q.電話へのリンクはどうするの?

下記のように記述すればOK。

/*電話の発信*/
getURL("tel:090xxxxxxxx");

Q.GPS情報の送信はできるの?

auとSoftBankは可能。docomoは不可能。

/*GPS情報送信*/

//auの場合(Flash Lite 2.0以降)
getURL("device:location?url=CGIのURL");

//SoftBankの場合(Flash Lite 2.0以降)
getURL("llocation:auto?url=CGIのURL");

//docomoの場合はFlash LiteからGPS機能は呼び出せない

参考にした本


Flash Liteで作る携帯コンテンツ実践教科書 (Web Designing BOOKS)
数少ないFlash Lite本の中で、わかりやすい良書。
16個のサンプルを掲載。
特に最後の方に掲載されているFlash Liteコンテンツに関する知識やTipsがうまくまとめられていて、すごく参考になりました!
なんか、amazonでは評判悪いけど、PCでのFlash制作をある程度経験ある方ならわかりやすいと思います!

 

関連する投稿

[progression勉強]実制作でつまづいたとこをQ&A形式でまとめてみた

最近、仕事の案件でflash案件がきた(てかflashにした)ので、
初めてprogressionを使って制作してました。

まだprogressionでの制作方法やas3のことすら、熟知していないのでいろんなところで
つまづいきました。。

ちょっとしたとこでつまづいても解決法をみつけだすのに長時間悩んだりすることが結構あったので、
実制作でprogressionを使ってみて私が躓いたとこや疑問に思ったことと、ググったりして知った答えを
書きとめていたものを、 Q&A形式でまとめてみました!

Q.Castのコンストラクタからステージを参照できない

ステージリサイズで位置とかサイズとか可変させようと思ってコンストラクタで、
リサイズ時実行させる関数をstageにaddEventListenerさせようとしたらコンパイルエラー。

stageの参照は _onCastAddedの中なら可能です。
要は表示オブジェクトコンテナに追加されたタイミングではじめて参照出来るようになるってことですね。

よく考えたらわかることなのですが、なんでエラーが返ってくるのか理解できずに躓いてました。。。

Actionscript:
  1. protected override function _onCastAdded():void {
  2.             stage.addEventListener( Event.RESIZE, onResizeHandler);
  3.             onResizeHandler(null);
  4.             addCommand(
  5.                 // 任意のコマンドを記述してください。
  6.                 new Trace(stage.stageWidth);               
  7.             );
  8.         }

これでOK!

Q異なるシーン間で値の受け渡しがしたい!

progressionのget~系メソッドがいいらしい!
http://www.northprint.net/2009/03/progressionget.html

私は名前つけるのめんどくさかったのでgetSceneBySceneId使いました!
http://flabaka.com/blog/?p=577

たとえばIndexSceneの_testという値を参照する。

var a:IndexScene = IndexScene(getSceneBySceneId(new SceneId("/index")));
trace(a._test);

これは表示リストに追加されてからでないと無理なので、コンストラクタではなく、_onCastAddedの中でやること!
あとIndexSceneのインポートを忘れずに!

Q.progressionのrootはどうやって参照?

trick7さんの記事を参考に!
http://www.trick7.com/blog/2008/12/09-114334.php

Q.castButtonを追加したときも何か動かしたい!

castButton用castSpriteを作ってやる方法を参考にさせてもらいました!
http://narayama.heteml.jp/2008/09/castbuttoncastsprite.html

Q.あれ?onLoadとonInitの違いは何やったっけ?

これ、初歩的ですが、何度も何度もnorthprintさんのgihyoの記事に掲載されてたこの図で確認してます。。。

Q.tweeneerのコマンドはあるけど、tweensyのコマンドは用意されてないの?

コミッターの seyself さんが、 tweensy をコマンドとして使用できる DoTweensy コマンドを作成してくださっているそうです。
http://trac.progression.jp/browser/experiments/sayself/extensions/classes/com/seyself/extras/progression

Q.castButtonでsceneIdを指定してじゃなく次のシーンに飛ばすにはどうするの?

次のシーンのsceneIdを取得するには

progression.current.next.sceneId;

前のシーンのsceneIdを取得するには

progression.current.previous.sceneId;

ということで、やってみる。

IndexSceneで関数nextSceneId,prevSceneIdを用意しといて、
子シーンオブジェクトの_onInitとかで

var a:IndexScene = IndexScene(getSceneBySceneId(new SceneId("/index")));
a.nextSceneId=progression.current.next.sceneId;
a.prevSceneId=progression.current.previous.sceneId;

と書き換えておいて

その子シーンオブジェクトの中のCastBtn(_nextBtnと_prevBtn)のsceneIdを書き換えてやる。

var a:IndexScene = IndexScene(getSceneBySceneId(new SceneId("/index")));
_nextBtn.sceneId=a.nextSceneId;
_prevBtn.sceneId=a.prevSceneId;

これが一番良い方法かわからないですが、参考程度に。

Q.castButtonでhtmlページにリンクさせるにはどうするの?

castButtonのプロパティにhrefがあるから、以下のような記述をコンストラクタにする。

href="http://kanariia.com/blog/";

sceneId プロパティと href プロパティが両方とも設定されている場合には、href プロパティの設定が優先されるそうな。

あと、windowTargetプロパティも用意されてるので、以下のように使える。いやーさすが。

href="http://kanariia.com/blog/";
windowTarget="_blank";

Q.castImageLoaderで読み込んだ画像をスムージングしたい

ExImageLoaderのプロパティにsmoothingというのがあるので、
コンストラクタで

smoothing=true;

でOK。
castImageLoaderはExImageLoaderのサブクラスなので。

ちなみにリサイズの際、縦横比を維持したい場合は

ratio=true;

でOK。

Q.castButtonの_onCastRollOverと_onCastRollOutにDoTweenerを設定したが、超速でのせたりはずしたりするとエラーがかえってくる。

こんなエラーがよくでて困ったことありませんか。

[ERROR] <DoTweener : command_2031> コマンドで CommandTimeOutError エラーが発生。


原因はコマンドが実行中なのに同じインスタンスに他のコマンドが上書きされるからだと思われる。
実行中のコマンドを中断してやることが必要。

コマンドを中断するためにどうすればよいか、でみつけたのがinterrupt()メソッド。
これを使うためにはexecute()メソッドでコマンドを実行する必要があるらしい。

じゃあaddCommand使わないでやってみよーてことで、こんな感じ。


Actionscript:
  1. package myproject.btn {
  2.     import jp.progression.casts.*;
  3.     import jp.progression.commands.*;
  4.     import jp.progression.events.*;
  5.     import jp.progression.loader.*;
  6.     import jp.progression.*;
  7.     import jp.progression.scenes.*;
  8.    
  9.     /**
  10.      * ...
  11.      * @author kanariia
  12.      */
  13.     public class TestBtn extends CastButton {
  14.        
  15.         private var _rollOver:SerialList;
  16.         private var _rollOut:SerialList;
  17.        
  18.         /*======================================================================*//**
  19.          * コンストラクタ
  20.          */
  21.         public function TestBtn( initObject:Object = null ) {
  22.             super( initObject );
  23.         }   
  24.        
  25.         /*======================================================================*//**
  26.          * ユーザーが CastButton インスタンスにポインティングデバイスを合わせたときに送出されます。
  27.          * このイベント処理の実行中には、addCommand() メソッド、及び insertCommand() メソッドによるコマンドの同期処理が行えます。
  28.          */
  29.         protected override function _onCastRollOver():void {
  30.             if (_rollOut) {
  31.                 //_rollOutのコマンドをすべて解除する
  32.                 _rollOut.interrupt();
  33.             }
  34.            
  35.             _rollOver = new SerialList();
  36.             _rollOver.addCommand(
  37.             new DoTweener(this, { alpha:0.5, time:0.5, transition:"easeOutExpo" } )
  38.             );
  39.             //コマンド実行
  40.             _rollOver.execute();           
  41.            
  42.         }
  43.        
  44.         /*======================================================================*//**
  45.          * ユーザーが CastButton インスタンスからポインティングデバイスを離したときに送出されます。
  46.          * このイベント処理の実行中には、addCommand() メソッド、及び insertCommand() メソッドによるコマンドの同期処理が行えます。
  47.          */
  48.         protected override function _onCastRollOut():void {
  49.             if (_rollOver) {
  50.                 //_rollOverのコマンドをすべて解除する
  51.                 _rollOver.interrupt();
  52.             }
  53.            
  54.             _rollOut = new SerialList();
  55.             _rollOut.addCommand(
  56.             new DoTweener(this, { alpha:1, time:0.5, transition:"easeOutExpo" } )
  57.             );
  58.             //コマンド実行
  59.             _rollOut.execute();   
  60.         }
  61.     }
  62. }

スマートじゃないかもしれないけど、こうすればエラーはとまります!

Q.CastButtonの無効化はどうするの?

いつものようにenabled=false;にしても、無理だったので調べました。

ボタン有効・無効を設定する
buttonEnabledプロパティが用意されていたので、

buttonEnabled=false;

でいけるみたい!

Q.ページタイトルはどうやって変えるの?

http://blog.img8.com/archives/2008/11/004207.html

SceneObjectにはtitleというプロパティがあります。
prog.sync=true;じゃないと作動しないらしい。
あと、index.htmlのタイトルがIndexSceneにたどりつくまで
表示されるので、直しておくべし。

sceneObjectのコンストラクタとかに

title="テストサイト"

みたいな感じで書けばOK。

indexSceneでほかのシーンも作ってる場合は

aboutScene.title="about|テストサイト";

て感じでOK。

IndexSceneで子・孫シーンをonLoadで一気に追加しておけば、
こんな設定も超簡単にすむw

ひとこと

自分用のメモみたいな感じなんで、きれいにまとまってるわけじゃないけど、
同じことで躓いてる人がこのエントリで救われるといいなー

関連する投稿

[Adobe MAX Japan 2009]ROXIK城戸さんのアレとTweensyで観覧車やってみた

すでにたくさんのレポートが投稿されてるみたいですが、
私もAdobe MAX 2日目参加してきました!!

感想をまとめようかと思いましたが、
私と全く同じセッションを選択されているll_koba_llさんのこの記事に書いてあるまとめが、
本当に感じたこととか一緒でうまくまとめてくださってるので、

まとめるの割愛します(あんなにうまく文まとまりましぇんw)。

受けたセッションの中でも、
すぐやってみたいと思ったのが
ROXIK城戸さんが実際にコードを書いて
日本語変数でものすごくわかりやすかった
ムービークリップの座標を視点で制御するアレ。

そこで記憶とメモを基に、
サンプルを作ってみることにした。

まず準備

真ん中基準点のMC「box_mc」を作成。
セッションの時のを忠実に再現w
aの文字は動くとぶるぶるするので分解してシェイプに。
プロパティでクラスにbox_mcと設定。

サンプルたち

視点の横移動

view sample

Actionscript:
  1. var 視点={x:0,y:0,angle:0,zoom:0};</p>
  2. <p>var ボックスたち=[];<br />
  3. var ポイントたち=[];</p>
  4. <p>ボックス追加();</p>
  5. <p>function ボックス追加() {<br />
  6.     var ポイント;<br />
  7.     var ボックス;</p>
  8. <p> for (var i=0; i&lt;20; i++) {<br />
  9.         ポイント={x:Math.random()*700,y:Math.random()*400};<br />
  10.         ポイントたち[i]=ポイント;</p>
  11. <p>  ボックス=new box_mc();<br />
  12.         ボックスたち[i]=ボックス;<br />
  13.         addChild(ボックス);<br />
  14.     }<br />
  15. }</p>
  16. <p>function モーション(e:Event) {<br />
  17.     視点.x+=2;<br />
  18. }</p>
  19. <p>function レンダリング(e:Event) {<br />
  20.     for (var i=0; i<ボックスたち.length; i++) {<br />
  21.         var ポイント=ポイントたち[i];<br />
  22.         var ボックス=ボックスたち[i];</p>
  23. <p>  ボックス.x=ポイント.x-視点.x;<br />
  24.         ボックス.y=ポイント.y-視点.y;<br />
  25.     }<br />
  26. }<br />
  27. addEventListener(Event.ENTER_FRAME,モーション);<br />
  28. addEventListener(Event.ENTER_FRAME,レンダリング);

視点の回転

view sample

Actionscript:
  1. var 視点={x:0,y:0,angle:0,zoom:0};</p>
  2. <p>var ボックスたち=[];<br />
  3. var ポイントたち=[];</p>
  4. <p>ボックス追加();</p>
  5. <p>function ボックス追加() {<br />
  6.     var ポイント;<br />
  7.     var ボックス;</p>
  8. <p> for (var i=0; i&lt;20; i++) {<br />
  9.         ポイント={x:Math.random()*700,y:Math.random()*400};<br />
  10.         ポイントたち[i]=ポイント;</p>
  11. <p>  ボックス=new box_mc();<br />
  12.         ボックスたち[i]=ボックス;<br />
  13.         addChild(ボックス);<br />
  14.     }<br />
  15. }</p>
  16. <p>function モーション(e:Event) {<br />
  17.     //ポイント.x+=2;<br />
  18.     //視点.x+=2;<br />
  19.     視点.angle+=0.01;<br />
  20. }</p>
  21. <p>function レンダリング(e:Event) {<br />
  22.     var cos=Math.cos(視点.angle);<br />
  23.     var sin=Math.sin(視点.angle);</p>
  24. <p> for (var i=0; i<ボックスたち.length; i++) {<br />
  25.         var ポイント=ポイントたち[i];<br />
  26.         var ボックス=ボックスたち[i];</p>
  27. <p>  var 視点からの差x=ポイント.x-視点.x;<br />
  28.         var 視点からの差y=ポイント.y-視点.y;</p>
  29. <p>  ボックス.x=視点からの差x*cos-視点からの差y*sin+350;<br />
  30.         ボックス.y=視点からの差x*sin+視点からの差y*cos+200;<br />
  31.     }<br />
  32. }<br />
  33. addEventListener(Event.ENTER_FRAME,モーション);<br />
  34. addEventListener(Event.ENTER_FRAME,レンダリング);

視点のズーム&回転

view sample

Actionscript:
  1. var 視点={x:0,y:0,angle:0,zoom:0};</p>
  2. <p>var ボックスたち=[];<br />
  3. var ポイントたち=[];</p>
  4. <p>ボックス追加();</p>
  5. <p>function ボックス追加() {<br />
  6.     var ポイント;<br />
  7.     var ボックス;</p>
  8. <p> for (var i=0; i&lt;20; i++) {<br />
  9.         ポイント={x:Math.random()*700,y:Math.random()*400};<br />
  10.         ポイントたち[i]=ポイント;</p>
  11. <p>  ボックス=new box_mc();<br />
  12.         ボックスたち[i]=ボックス;<br />
  13.         addChild(ボックス);<br />
  14.     }<br />
  15. }</p>
  16. <p>function モーション(e:Event) {<br />
  17.     //ポイント.x+=2;<br />
  18.     視点.angle-=0.01;<br />
  19.     視点.zoom+=0.01;<br />
  20. }</p>
  21. <p>function レンダリング(e:Event) {<br />
  22.     var cos=Math.cos(-視点.angle);<br />
  23.     var sin=Math.sin(-視点.angle);</p>
  24. <p> for (var i=0; i<ボックスたち.length; i++) {<br />
  25.         var ポイント=ポイントたち[i];<br />
  26.         var ボックス=ボックスたち[i];</p>
  27. <p>  var 視点からの差x=(ポイント.x-視点.x)*視点.zoom;</p>
  28. <p>  var 視点からの差y=(ポイント.y-視点.y)*視点.zoom;</p>
  29. <p>  ボックス.scaleX=ボックス.scaleY=視点.zoom;<br />
  30.         ボックス.x=視点からの差x*cos-視点からの差y*sin+350;<br />
  31.         ボックス.y=視点からの差x*sin+視点からの差y*cos+200;<br />
  32.     }<br />
  33. }<br />
  34. addEventListener(Event.ENTER_FRAME,モーション);<br />
  35. addEventListener(Event.ENTER_FRAME,レンダリング);

 

感想

忘れないうちにってことでとりあえずアップしてみたけど、
かなりセッションでやってたやつに近いサンプルができたかな?

自分もこのソースみてまた勉強しようw

今回の城戸さんのスライド公開ならへんかなぁ(*´ω`*)

関連する投稿

[tweensy]いろいろ試してみる:TweensyGroupで特殊プロパティをトゥイーン

訳しときながらTweensyGroupって何なのかわからなかったけど、
今日asDoc読んでてわかったような気が…。

TweensyGroupには、tweenerでいう特殊プロパティ的なもののトゥイーンのショートカットがあって、
Tweensyでやるよりコードがすっきりして、簡単。

色、輝度、マトリックス、…などなどをバラバラに指定できて、まとめて管理できるから”Group”ってことなのかな??

それぞれの効果にTweensyTimelineを作ってグループ管理している模様。

時間、イージング、遅延とか各効果別に設定したいけど、制御系はグループ管理したいって時に使えるってことか。

とにかく今回は制御というよりかは特殊プロパティについて調べてみる。


TweensyGroupサンプル

透明度をあげつつ、ぼかしをとりつつ、ぼよんと拡大する。

view sample

Sample1.as

Actionscript:
  1. package
  2. {
  3.     import com.flashdynamix.motion.*;
  4.     import fl.motion.easing.*;
  5.     import flash.text.TextField;
  6.     import flash.display.MovieClip;
  7.     import flash.filters.BlurFilter;
  8.     import flash.geom.Matrix;
  9.  
  10.     /**
  11.     * ...
  12.     * @author DefaultUser (Tools -> Custom Arguments...)
  13.     */
  14.     public class  Sample1 extends MovieClip
  15.     {
  16.         private var tween:TweensyGroup;
  17.         private var tf:TextField;
  18.        
  19.         public function Sample1() {
  20.             tween = new TweensyGroup();
  21.             tween.onComplete = tweenComp;
  22.            
  23.             //透明度
  24.             this.alpha = 0;
  25.             tween.alphaTo(this, 1, 1,Quartic.easeOut,0.5);
  26.             //フィルター
  27.             var blur:BlurFilter = new BlurFilter(30,30,1);
  28.             tween.filterTo(this, blur, {blurX:0,blurY:0}, 1,Quartic.easeOut,0.5)
  29.             //拡大・縮小
  30.             tween.scaleTo(this, 2, 2, Elastic.easeOut, 1);
  31.            
  32.             //テキストフィールドを作成、追加
  33.             tf = new TextField();
  34.             tf.y = -(this.height/2)-20; //基準点が中央のため
  35.  
  36.             addChild(tf);
  37.            
  38.         }
  39.         public function tweenComp():void {
  40.             tf.text = "Complete!";
  41.         }
  42.        
  43.     }
  44.    
  45. }

ショートカットの詳細

alphaToメソッド -透明度の変更

public function alphaTo(instance:Object, alpha:Number, duration:Number = 0.5, ease:Function = null, delayStart:Number = 0): TweensyTimeline

//mcのアルファを3秒かけて0.5にする
tween.alphaTo(mc, 0, 5,3);

brightnessToメソッド -輝度の変更

public function brightnessTo(instance:Object, amount:Number, duration:Number = 0.5, ease:Function = null, delayStart:Number = 0): TweensyTimeline

//mcの輝度を3秒かけて0.5にする
tween.alphaTo(mc, 1, 5,3);

ColorToメソッド -色を変更

public function colorTo(instance:Object, color:uint, duration:Number = 0.5, ease:Function = null, delayStart:Number = 0): TweensyTimeline

//mcの色を3秒かけて0x000000(黒)にする
tween.colorTo(mc, 0x000000, 3);

ColorTransformToメソッド -ColorTranceformの適用

public function colorTransformTo(instance:Object, color:ColorTransform, duration:Number = 0.5, ease:Function = null, delayStart:Number = 0): TweensyTimeline

import flash.geom.ColorTransform;

//mcの色をColorTransform オブジェクトctに5秒かけて適用
var ct:ColorTransform=new ColorTransform(-1, -1, -1, 1, 255, 255, 255, 0)
tween.colorTransformTo(mc, ct, 5)

contrastToメソッド -コントラストの変更

public function contrastTo(instance:Object, amount:Number, duration:Number = 0.5, ease:Function = null, delayStart:Number = 0): TweensyTimeline

//mcのコントラストを3秒かけて1(最大)に変更
tween.contrastTo(mc 1,2);

filterToメソッド -フィルタ効果の適用

public function filterTo(instance:Object, filter:BitmapFilter, to:Object, duration:Number = 0.5, ease:Function = null, delayStart:Number = 0): TweensyTimeline

import flash.filters.BlurFilter;

//ぼかしフィルターのblurX、blurYを10に5秒かけて適用
var blur:BlurFilter = new BlurFilter(0,0,1);
tween.filterTo(this, blur, {blurX:10,blurY:10}, 5);

matrixToメソッド -マトリックス変形の適用

public function matrixTo(instance:Object, mtx:Matrix, duration:Number = 0.5, ease:Function = null, delayStart:Number = 0): TweensyTimeline

import flash.geom.Matrix;

//mcにMatrixオブジェクトmtxを3秒かけて適用
var mtx:Matrix = new Matrix(-1,2,1,2,1,2);
tween.matrixTo(this, mtx, 3);

rotateToメソッド -回転

public function rotateTo(instance:Object, rotation:Number, duration:Number = 0.5, ease:Function = null, delayStart:Number = 0): TweensyTimeline

//mcの角度を3秒かけて180度に変更
tween.rotateTo(mc, 180, 3);

scaleToメソッド -拡大・縮小

public function scaleTo(instance:Object, scale:Number, duration:Number = 0.5, ease:Function = null, delayStart:Number = 0): TweensyTimeline

//mcを1秒かけて50%に縮小
tween.scaleTo(mc,0.5,1);

soundTransformTo -SoundTransformの適用

public function soundTransformTo(instance:Object, trans:SoundTransform, duration:Number = 0.5, ease:Function = null, delayStart:Number = 0): TweensyTimeline

import flash.media.SoundTransform;

////mcにSoundTranceformオブジェクトstを3秒かけて適用
var st:SoundTransform = new SoundTransform(1, 0);
tween.soundTransformTo(this, st, 3);



関連する投稿

Home > Tags > flash

bookmark
nakanohito

あわせて読みたい
あわせて読みたいブログパーツ

Return to page top