以前こちらでも書きましたが、FlashLite1.1ではMathクラスの使用が推奨されていません。
Math.cosやMath.sinといったメソッドが使えなくて困ることは色々ありますが、例えば周期的な動きをASでどうやって表現すればいいのか?ということ。
そこで、今回はFlashLite1.1で円運動をどう実現するかについて考えてみました。
まず考えたのが、三角関数を数式で計算すること。
cosやsinはテイラー展開を使って数式だけで近似値を求める事ができるのですが、いざ試してみるとかなり次数を上げないと精度が出ない上に、ムリヤリMathクラスを使ったほうが軽くなりそうなくらいの計算量になってしまったのでボツに。
仕方ないのでwonderflをあさってみると、
弊社taro氏のど真ん中なポストがあるではないですか!
なんとシンプルかつスマートな実装でしょう!これをFlashLiteのシンタックスに書き換えると、開始フレームで定数と中心座標を設定し
K = 0.02; cx = 120; cy = 160;
オブジェクトを移動させるループ処理を設定。これだけです。
tellTarget( "/" ) { mc._x -= ( mc._y - cy ) * K; mc._y += ( mc._x - cx ) * K; }
一応サンプルファイルはこちら(Flash CS3)。
注意点としては、携帯Flashの場合フレームレートが制限されること。サンプルでは同じくtaro氏の助言により、callを複数回実行する事でスピードと滑らかさを確保しています。計算量が少ないので実機でも問題なく動作しました。
さて、ひとまずMathクラスなしでもFlashLite1.1で円運動を作ることが可能という事がわかりましたが、肝心なのはロジックです。 「向心力」とあるように、円運動するMCの接線方向に働く作用を計算しているのは分かるのですが、処理が最適化され過ぎているため「どうしてそうなったのか?」がサッパリわかりません。
本人によれば「円運動や単振動の微分方程式と隣接3項間の漸化式が同じ線形問題であることを利用した最適化です」との事です。...えー、すみません。サッパリわかりません泣
ということで、突っ込んだ解説は本人に譲ることにします。何かと制限の多いFlashLiteですが、Mathクラスが使えないといっても内部的に演算していることには変わりないので、色々な方向からアプローチを試してみることが肝要なのでは、というお話でした。
_トラックバック(0)
TrackbackURL : http://level0.kayac.com/cgi-bin/mt/mt-tb.cgi/936
- AfterEffects
- AIR
- android
- Arduino
- AS2
- AS3
- as3
- BitmapData
- CHECKMATE
- crossdomain
- CS4
- Date
- DisplacementMapFilter
- Event
- event
- ExternalInterface
- FileReference
- FireBug
- FireFox
- Flash Lite
- FlashDevelop
- FlashPlayer10
- flash時計
- Flex
- Font
- GoogleMapsAPI
- INFINITY TANK BATTLE
- JSFL
- JSON
- Mobile
- mxp
- PaperVision3D
- Particle
- Progression
- Sound
- TextField
- Tips
- tool
- trace
- wonderfl
- Wonderfl
- xml
- アニメーション
- サンプルコード
- タイムライン
- デバッガ
- バグ
- フレーム
- ブログパーツ
- 爆速

(0)






_コメントする