DisplayObject3Dクラスのscreenプロパティから正常な値を取得するには、autoCalcScreenCoordsプロパティを有効にする必要がある。
var do3d:DisplayObject3D = new DisplayObject3D();
do3d.autoCalcScreenCoords = true;
「Flash / ActionScript3.0」カテゴリーアーカイブ
ProgressionでFlexのコンポーネントを使う
前のエントリーでメモを書いたのだが、忘れないうちにTips化。
Progressionのtaka:niumさんに、twitterで教えてもらったのだが、CastObjectを委譲することで、Flexのコンポーネント(つまり、UIComponentのサブクラス)も、Castクラスとして扱えるそうだ。具体的な方法は、実はここにありました。
これを参考に、実験を。上のサンプルで肝となるのは、この部分。
var com:Panel = new Panel();
com.width = 200;
com.height = 200;
com.alpha = 0;
var cast:CastObject = new CastObject( com );
CastObjectのインスタンスを生成するときに、Cast化したいコンポーネントのインスタンスを渡してあげる。
Cast化したインスタンスのプロパティを変えたいときは、CastObject型のインスタンスのプロパティを変えず、元のインスタンスのプロパティを変えるところも重要。
ここで気になるのが、addChildを実行されるインスタンスは、どこに配置されているか、ということになるのだが、Application.applicationと、いわゆるroot(SystemManger直下)に配置されることになるようだ。では、各シーンにおいては、どのように配置するかと言うとこ、こんな感じ。
protected override function _onLoad():void {
var button:Button = new Button();
_button = new CastObject( button );
button.label = “OK”;
button.setActualSize( 100, 32 );
var app:Application = Application( Application.application );
addCommand(
new AddChild( app, _button ),
);
}
と、まで書いたが、Application.application以下のコンポーネントにaddChildする場合も考えられるので、それもまた検証すべきかも。
MXMLベースWebを制作する際に、Progressionを使えるのは便利。
PV3DのX座標系が逆転
いつからなのかわからないが、PV3DのX座標系の正負が逆転している。数ヶ月前に作った作品を新しいクラスでパブリッシュしたら挙動がおかしいので、確認したら、真逆だった。
Progression で UIComponentを使う
寝不足で文章が旨く書けそうにないので、メモですが、ProgressionでFlexのコンポーネントをCastとして使う実験に成功。開発者のtaka:niumさんに、アドバイスをもらって解決へ。
Alchemy
akihiro kamijo: Adobe MAX 2008 US での発表つづき
Alchemy のプレビューリリース公開 (C や C++ で記述されたコードを AVM2 上で実行するためのコンパイラ、C/C++ のコードを SWF や SWC にコンパイルできる、パフォーマンスは AS3 よりは早いが C/C++ ネイティブよりは遅いとのこと)
OSS系のライブラリが速くなることに期待したい。特に、画像処理や3D系。
それにしても、C/C++からAS3に映ってきた開発者にとっては、嬉しい限りですね。AS3しかできない自分にとっては、コーダーとしての恩恵は無いが…。
Smart Phone向けのFlash Player10
akihiro kamijo: Adobe MAX2008 US での発表こうもく
Open Screen Project の最新成果として、スマートフォン用の Flash Player 10 のプレビュー、ARM プラットフォーム上で Flash Player 及び AIR の最適化を行う旨の発表、それから Flash を使って Qualcomm の Brew MP プラットフォーム上のアプリケーションを開発できる新しい SDK についてのアナウンス
Smart Phone向けのFlash Player 10というのが気になる。期待としては、組み込み系のFlash PlayerのAS3対応とか無いのかなと思いつつ、ARMプラットフォームへの最適化というのが、そういうことを期待させてくれる。
Flash Lite 1.1の再生品質設定
Flash Lite 1.1での再生品質を設定する方法。
fscommand2(“SetQuality”, “high”);
Arrayが持つ要素の型を指定
まだ、試していないが、as3でArrayが持つ要素の型を指定する方法。
ArrayElementType メタデータタグ — Flex 2.01
ArrayElementType メタデータタグ
ActionScript で Array 変数を定義するときは、変数のデータ型として Array を指定します。ただし、Array の要素のデータ型は指定できません。
Flex MXML コンパイラが Array 要素の型チェックを実行できるようにするためには、次の例に示すように、[ArrayElementType] メタデータタグを使用して Array 要素の許容されるデータ型を指定できます。
public class MyTypedArrayComponent extends VBox {
[ArrayElementType(“String”)]
public var newStringProperty:Array;
[ArrayElementType(“Number”)]
public var newNumberProperty:Array;
…
}
コンパイルでエラーが起きるということは、Flexでも教えてくれるのだろうか。
イベント取得待ちのコマンド
任意のクラスのイベントを受け取ってから動作するコマンドの書き方。
addCommand(
new Func(_model.load, null, _model, Event.COMPLETE ), // イベント取得の設定
new Func( trace, [“complete”] ), //完了したよ
new Func( model_completeHandler ) //完了後の処理へ
);
例えば、_modelというインスタンスがある処理(例えば、データロードなど)を終えた後に、model_completeHandlerというメソッドを実行する場合は、以上の様な書き方になる。こう書かないと、データ受信が終わっていないときに、シーンが遷移してしまう危険性があるので、待ち行列をつくった方が良い。もしくは、Threads(そうめん)でスレッドを立てても良いかもしれない。
ブラウザ経由のSceneIdを取得する方法
Progressionで、ブラウザ経由のSceneIdを取得する場合、SceneObjectのサブクラス内でprogression.destinedSceneId
を参照すると、取得できる。
例えば、”/index”から、自動的に”/index/a”に遷移させるときなどの判定に使える。ちなみに、判定はこんな感じで。
if( this.sceneId.equals( progression.destinedSceneId ) )