Hatena::Groupactionscript

dann@actionscript

2008-08-28

FlashDevelopとFlash CS3の連携

| 23:31

FlashDevelopとFlash CS3の連携

  • FlashCS3でパブリッシュ用のflaファイルを作成
  • FlashCS3でflaファイルのドキュメントクラスにMainクラスを設定
  • FlashDevelopでflaファイルにインクルードされるasファイルを編集
  • FlashDevelopでF6を押して、FlashCS3でパブリッシュ

なかなか快適。

pv3d

| 21:02

こないだ作ったpv3dのサンプル. クリックでカメラ位置をランダムに変えるようにしている。しかし、重過ぎる... 何か描けるオブジェクト数に上限があるなぁ...

http://mashup4u.net/flash/cube_pv3d.swf

RuiRui2013/03/16 00:14I was struck by the hontesy of your posting

qkbwklqkbwkl2013/03/17 03:05uwrQnc <a href="http://fvdluvvqgrav.com/">fvdluvvqgrav</a>

ovekvkovekvk2013/03/20 12:091xub1K , [url=http://gserhzrlxbvy.com/]gserhzrlxbvy[/url], [link=http://flrxidkvmsii.com/]flrxidkvmsii[/link], http://iedcajlzlkgd.com/

lgwxrvfxibklgwxrvfxibk2013/03/20 12:09hujuwa , [url=http://rcrudiusvbgh.com/]rcrudiusvbgh[/url], [link=http://nqwbsobtuzwn.com/]nqwbsobtuzwn[/link], http://azxrelqfbncj.com/

2008-08-25

VMWare+Linux+Samba

00:23

windowsでgit使えない!fuck!とかいっていたら、「それVMWareLinuxSamba」という神の啓示が。

あーーーーー、長い事windowsの使い方を間違っていた事に気づいた今日。そうですよ、Sambaがありましたよ。gitはDebian上から叩けばいいんじゃないか...

FlashDevelopのプロジェクトテンプレートのおき場所

| 00:01

以下の場所。ここにテンプレート置けばいい。

C:\Documents and Settings\<user>\Local Settings\Application Data\FlashDevelop\Templates\ProjectTemplates\MyTemplate

FlashDevelopでバージョン管理?

21:24

あぁ、バージョン管理用のプラグインはないのかぁ。IDEで完結できないのは少しだるいなぁ。IDEで開発。コマンドプロンプトからsvnコマンド叩く?って形にするのかなぁ。

windowsだとコマンドプロンプト使わなきゃいけないのがあれだなぁ...

AS3のコードカバレッジ

21:13

flexcover

http://code.google.com/p/flexcover/

これを使うらしい。

Flashでのメモリリークチェック方法?

| 20:58

pv3dで少し動かしていると強烈に重くなる。なんかメモリリークいかにもしてそうだが...

メモリリークチェック用のプロファイラはあんのか調べないとなぁ。どのオブジェクトがどれくらい生成されて、メモリどれくらい使ってるかとかわかるようなプロファイラ。AVMがあるんだから、外部ツールがあってよさそうな気はする。

後で、ざっとみる。

FlashDevelop用のプロジェクトテンプレート

20:41

これを作っておいたほうがよさそう。後で作る。Templatesの下にあるっぽい。

ASとFlashの関連づけ

20:39

  • ステージの背景クリック
  • プロパティインスペクタでドキュメントクラスをHogeに設定
    • HogeクラスとMovieが関連づけられる
    • HogeはMovieClipをextends。

フレームアクションでimportして、そこで実行するってのもあるのか。いずれにしても、フレームアクションにベタにロジック書くのはまずそう。asに独立させて、そこのロジック呼ぶ形にする。

なんか、まだすっきりしてない。後で再考。フレームアクションがいまいちわかっていないのかもしれない。クラスのコンストラクタでイベントリスナ登録しておけば、クリック時にインスタンスを動作させたりとかは簡単な気がするのだけど。

フレームアクションは、特定のフレームでだけある動作をさせたりとかいう場合に使うもんなのかな。ここらがすっきりしない。

シンボル

20:39

FlashDevelopでライブラリから補完

| 20:17

  • プロジェクトのプロパティ選択
  • Compiler Options -> SWC Include Librariesでパス設定

これでFlashDevelop上で補完が可能。

使えるFlashDevelpのショートカット

| 20:10

プロジェクトの中のメソッドのjumpがほしいな。EclipseのCtrl-oみたいなやつ。

クラスのjumpもほしい。Ctrl-tとか。

FlashDevelopインストール

19:58

jvm設定

vim C:\flex3sdk\bin\jvm.config

java.args=-Xmx384m -Dsun.io.useCanonCaches=false -Duser.language=

en -Duser.region=JP

最後に-Duser.language=en -Duser.region=JPを書き加える

FlashDevelop設定

Tools->Program Settings->FlashDevelop

[その他]の[Default CodePage]を[UTF8]

Tools->Program Settings->AS3Context

Flex SDK Location

太郎太郎2009/12/25 17:36FDを使った際のコンパイルエラーが急に英語になったのでこの記事はとても助かりました。

SujanSujan2013/03/17 19:36If you're liookng to buy these articles make it way easier.

2008-08-24

red5

23:09

Springを使ったDIの仕組みで実装を差し替えられるようになってる。いかにもJavaっぽい感じの構成。

FlashDevelop

02:13

  • completion+自動import
  • コード補完時のAPI document参照

IDEっぽくて使いやすい。

Eclipseほど機能は充実してないけれど、それでもvimよりは書きやすいな。静的型付けのある言語では賢いIDEがあれば、それ使った方が数倍速く書ける気がする。

不満は以下の2点くらい。

  • キーボードショートカットが全体的に不足している。
    • メソッドのリスト出してJump、クラスリスト出してJump位はほしいなぁ。それがあれば、マウス使わずにコード書けるんだけど。
  • コードの整形がない
  • Refactoringの機能がない

上2つくらいが追加されれば十分実用でいけそう。無くてもvimより早くかけそうな気はするけど。

AndreaAndrea2013/03/16 07:44So excited I found this article as it made thgins much quicker!

rocaobrocaob2013/03/20 12:37EJUdBK , [url=http://knsreiuyvjff.com/]knsreiuyvjff[/url], [link=http://wdxzdczaqtrg.com/]wdxzdczaqtrg[/link], http://godhwhqjlaik.com/

2008-08-23

非同期処理まとめ

01:53

以下のまとめが良くまとまっている。

http://www.metaphor.co.jp/masuda/blog/?p=24

FlashDevelopを試す

00:39

vimで書くのは限界があることに気づいた。import文書くのも、ライブラリのドキュメントみるのも大変。とりあえず、FlashDevelopから試してみる。ドキュメントはctagsで何とかカバーできるんだけど。

やっぱり、メソッドのCompletionがあるかないかは初期の学習コストに差がですぎてしまう。特にPapervision3Dのように巨大なフレームワークを使う場合には。IDE使ったほうが数倍速く開発できそう。

ただ、Macで使えないのが... VMWare FusionWindowsいれて使うのもなぁ...

Papervision3Dでの設計

00:29

BasicViewからThreadに処理を委譲。ThreadにModelをDIContainerでインジェクション。Serviceを単体テスト

こんな形になるんじゃないかと思ってる。少しずつ発展させていく。

Cameraの位置とかを誰が管理すべきなのかとか、まだ3D系のクラス設計の勘が働かない。有名どころのソースがあれば読んでみたい。

また、Model?というか物体の移動とか、あーいう表示系のロジックは何をテストすればいいのかわからなくなってくる。ここは3D系のメインになるロジックのはずで、どうテストするのかを少し考えていきたい。

Remotingでビジネスロジック実装

00:29

Flickrからなんかとってくるとか、そういうものをテストするのはそれでいいんだけど、相手側サービスのセキュリティレベルの変更によってクライアントが影響を受けるような設計は、極力避けたほうがいいような気がしていて、基本的にそういう処理はRemotingでBackendeに回るように書くのがいいんじゃないかと思った。仮にクライアントだけでできても。

非同期処理のシーケンスを綺麗に

00:21

幾つかみた感じでは、そーめんが良さそう。例外処理まで考えられているという点で。

event listner地獄から回避するためには、まずこういうライブラリを使うようにしないとダメ。

3Dの物体の座標変換

00:15

行列計算が必ず必要になるのだけれど、papervision3dではMatrix3Dという座標変換用のライブラリが用意されている模様。なるほど。

http://d.hatena.ne.jp/lyokato/20070315/1173930715

AS3用のstarter

| 00:13

githubにcommitした。

asstarter.pl HogeProjectで色々生成される。templateは、.asstarter/templates/default配下をいじればいい。

build.xmlでasdoc, compile, testが実行できるようになってます。

# lyokatoさんに聞いたところだと、airakeがいいらしい。これは今度試してみる。air用としてじゃなくても使えそうとのこと。

AS3のライブラリ

| 00:07

beinteractiveさんの記事がまとまりすぎている。

http://www.be-interactive.org/index.php?itemid=404

Flashのsecurity model

00:06

Essential ActionScriptの19章.

Papervision3D 2.0 GreateWhiteのBasicViewが楽な件

23:55

Scene用意したり、Camera用意したりっていうのが全部抽象化されている。

手順覚える必要がないので、後はstageもしくは、stageの中にDisplayObject3Dつっこんで、そこに表示したい物を追加していけばよいだけ。これは前のバージョンと比べると大分楽になってますね。Main部分のコードだけ書けばいいので、かなり楽になってます。

cooooooooooooooooooooooooooooooooool

Papervision3D + Tweenerで球場の物体を動かす

23:42

複数の球をCubeの頂点にTweenerで移動させるとサンプルを作ってみました。

Papervision3D Greate Whiteを使っています。

package net.mashup4u {
    import flash.display.*;
    import flash.events.*;
    import net.mashup4u.SphereFactory;
    import org.papervision3d.core.proto.*;
    import org.papervision3d.scenes.*;
    import org.papervision3d.objects.*;
    import org.papervision3d.cameras.*;
    import org.papervision3d.materials.*;
    import org.papervision3d.view.BasicView;
    import org.papervision3d.objects.primitives.*;
    import caurina.transitions.Tweener;
    import net.mashup4u.*;
    import org.osflash.thunderbolt.Logger;

    public class Main extends BasicView {
        private var _rootDisplay: DisplayObject3D;

        public function Flickr3D():void {
            this.setup();
            this.createSpheres();
            this.alignAllSpheresAsCube();
            startRendering();
        }

        private function setup(): void {
            this.setupStage();
            this.setupRootDisplay();
            this.setupListeners();
        }

        private function setupStage(): void {
            stage.quality = "MEDIUM";
        }

        private function setupRootDisplay(): void {
            this._rootDisplay = new DisplayObject3D();  
            scene.addChild(this._rootDisplay);  
        }

        // Refactor: move to a class
        private function createSpheres():void {
            for(var i:int = 0; i < 640; i++ ){
                var sphere:Sphere = SphereFactory.create(i);
                this._rootDisplay.addChild(sphere);
            }
        }

        private function alignAllSpheresAsCube(): void {
            SphereManager.alignAllSpheresAsCube(this._rootDisplay);
        }

        // Refactor: Who is responsible for this method?
        private function moveCameraAtRandom(e:Event): void {
            Tweener.addTween(camera,
                {
                    x:Math.random()*2000,
                    y:Math.random()*2000,
                    z:Math.random()*2000,
                    time:1,
                    transition:"easeOutExpo"
                }
            );
        }

        private function setupListeners():void {
            stage.addEventListener(MouseEvent.CLICK, moveCameraAtRandom);
        }

    }

}
package net.mashup4u {
    import flash.filters.GlowFilter;
    import org.papervision3d.objects.primitives.*;
    import org.papervision3d.cameras.*;
    import org.papervision3d.materials.*;
    import org.papervision3d.core.proto.*;

    public class SphereFactory {
        public static function create(i:int): Sphere {
            var mm: MaterialObject3D = new ColorMaterial(0xff0000, 0.5);
            var item:Sphere = new Sphere( mm, 7, 4, 4);
            item.name = 'item'+i;
            mm.oneSide = false;
            item.useOwnContainer = true;
            item.filters = [
                new GlowFilter(0xFFFF00, 1, 16, 16, 2, 1, false, false),
            ]; 
            item.alpha = Math.random() + 0.1;
            item.x = Math.random()*3000-1500;
            item.y = Math.random()*3000-1500;
            item.z = Math.random()*3000-1500;
            return item;
        }
    }
}
package net.mashup4u {
    import org.papervision3d.objects.*;
    import caurina.transitions.Tweener;
    import org.papervision3d.materials.*;
    import org.papervision3d.materials.utils.*;
    import org.papervision3d.objects.primitives.*;

    public class SphereManager {

        public static function alignAllSpheresAsCube(rootDisplay:DisplayObject3D): void {
            var cube:Cube = new Cube(
                new MaterialsList({all:new ColorMaterial(0xFF0000,100)}),
                800,800,800,10,10,10
            );
            var i:int = 0;
            while(i++ < cube.geometry.vertices.length) {
                var item:Object = rootDisplay.getChildByName('sphere'+i);
                Tweener.addTween(
                    item, {
                        x:cube.geometry.vertices[i-1].x,
                        y:cube.geometry.vertices[i-1].y,
                        z:cube.geometry.vertices[i-1].z,
                        time:4,
                        transition:"easeInOutExpo"
                    }
                );
            }
        }
    }

}

TODO

Papervision3Dが大分重い感じですね。置く物体の量によって動作速度が極端にかわるようなので、どれくらいで現実的に動くのか調べたいと思ってます。

2008-08-19

Papervision3D系について

00:42

3Dオブジェクトを扱うための基礎知識が欠落しているということがすぐにわかった。これを事前に勉強しとかないとそもそもあまり触る意味がなさそう。

以下の本は結構いいらしい。原著だと大分安い。

http://www.amazon.co.jp/ActionScript-3-0-%E3%82%A2%E3%83%8B%E3%83%A1%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3-Keith-Peters/dp/4862460496/

非同期処理のシーケンスを綺麗に書くためのライブラリ

00:40

JS系だとDeferred。ASでみた感じだと、幾つかみた感じだとThreadは良さそうだ。

エラー処理のことも考えられているようにみえるし、プロジェクトとして成り立っていそうだということ。