dev |
FlashDevelopとFlash CS3の連携
なかなか快適。
windowsでgit使えない!fuck!とかいっていたら、「それVMWare+Linux+Samba」という神の啓示が。
あーーーーー、長い事windowsの使い方を間違っていた事に気づいた今日。そうですよ、Sambaがありましたよ。gitはDebian上から叩けばいいんじゃないか...
dev |
以下の場所。ここにテンプレート置けばいい。
C:\Documents and Settings\<user>\Local Settings\Application Data\FlashDevelop\Templates\ProjectTemplates\MyTemplate
あぁ、バージョン管理用のプラグインはないのかぁ。IDEで完結できないのは少しだるいなぁ。IDEで開発。コマンドプロンプトからsvnコマンド叩く?って形にするのかなぁ。
windowsだとコマンドプロンプト使わなきゃいけないのがあれだなぁ...
pv3dで少し動かしていると強烈に重くなる。なんかメモリリークいかにもしてそうだが...
メモリリークチェック用のプロファイラはあんのか調べないとなぁ。どのオブジェクトがどれくらい生成されて、メモリどれくらい使ってるかとかわかるようなプロファイラ。AVMがあるんだから、外部ツールがあってよさそうな気はする。
後で、ざっとみる。
フレームアクションでimportして、そこで実行するってのもあるのか。いずれにしても、フレームアクションにベタにロジック書くのはまずそう。asに独立させて、そこのロジック呼ぶ形にする。
なんか、まだすっきりしてない。後で再考。フレームアクションがいまいちわかっていないのかもしれない。クラスのコンストラクタでイベントリスナ登録しておけば、クリック時にインスタンスを動作させたりとかは簡単な気がするのだけど。
フレームアクションは、特定のフレームでだけある動作をさせたりとかいう場合に使うもんなのかな。ここらがすっきりしない。
dev |
プロジェクトの中のメソッドのjumpがほしいな。EclipseのCtrl-oみたいなやつ。
クラスのjumpもほしい。Ctrl-tとか。
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を書き加える
Tools->Program Settings->FlashDevelop
[その他]の[Default CodePage]を[UTF8]
Tools->Program Settings->AS3Context
Flex SDK Location
太郎2009/12/25 17:36FDを使った際のコンパイルエラーが急に英語になったのでこの記事はとても助かりました。
はIDEっぽくて使いやすい。
Eclipseほど機能は充実してないけれど、それでもvimよりは書きやすいな。静的型付けのある言語では賢いIDEがあれば、それ使った方が数倍速く書ける気がする。
不満は以下の2点くらい。
上2つくらいが追加されれば十分実用でいけそう。無くてもvimより早くかけそうな気はするけど。
vimで書くのは限界があることに気づいた。import文書くのも、ライブラリのドキュメントみるのも大変。とりあえず、FlashDevelopから試してみる。ドキュメントはctagsで何とかカバーできるんだけど。
やっぱり、メソッドのCompletionがあるかないかは初期の学習コストに差がですぎてしまう。特にPapervision3Dのように巨大なフレームワークを使う場合には。IDE使ったほうが数倍速く開発できそう。
ただ、Macで使えないのが... VMWare FusionにWindowsいれて使うのもなぁ...
BasicViewからThreadに処理を委譲。ThreadにModelをDIContainerでインジェクション。Serviceを単体テスト。
こんな形になるんじゃないかと思ってる。少しずつ発展させていく。
Cameraの位置とかを誰が管理すべきなのかとか、まだ3D系のクラス設計の勘が働かない。有名どころのソースがあれば読んでみたい。
また、Model?というか物体の移動とか、あーいう表示系のロジックは何をテストすればいいのかわからなくなってくる。ここは3D系のメインになるロジックのはずで、どうテストするのかを少し考えていきたい。
Flickrからなんかとってくるとか、そういうものをテストするのはそれでいいんだけど、相手側サービスのセキュリティレベルの変更によってクライアントが影響を受けるような設計は、極力避けたほうがいいような気がしていて、基本的にそういう処理はRemotingでBackendeに回るように書くのがいいんじゃないかと思った。仮にクライアントだけでできても。
幾つかみた感じでは、そーめんが良さそう。例外処理まで考えられているという点で。
event listner地獄から回避するためには、まずこういうライブラリを使うようにしないとダメ。
book |
http://www.amazon.com/Foundation-ActionScript-Animation-Making-Things/dp/1590595181/
lyokatoさん曰く、これがおすすめとのこと。
tool |
githubにcommitした。
asstarter.pl HogeProjectで色々生成される。templateは、.asstarter/templates/default配下をいじればいい。
build.xmlでasdoc, compile, testが実行できるようになってます。
# lyokatoさんに聞いたところだと、airakeがいいらしい。これは今度試してみる。air用としてじゃなくても使えそうとのこと。
Scene用意したり、Camera用意したりっていうのが全部抽象化されている。
手順覚える必要がないので、後はstageもしくは、stageの中にDisplayObject3Dつっこんで、そこに表示したい物を追加していけばよいだけ。これは前のバージョンと比べると大分楽になってますね。Main部分のコードだけ書けばいいので、かなり楽になってます。
cooooooooooooooooooooooooooooooooool
複数の球を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" } ); } } } }
Papervision3Dが大分重い感じですね。置く物体の量によって動作速度が極端にかわるようなので、どれくらいで現実的に動くのか調べたいと思ってます。
3Dオブジェクトを扱うための基礎知識が欠落しているということがすぐにわかった。これを事前に勉強しとかないとそもそもあまり触る意味がなさそう。
以下の本は結構いいらしい。原著だと大分安い。
JS系だとDeferred。ASでみた感じだと、幾つかみた感じだとThreadは良さそうだ。
エラー処理のことも考えられているようにみえるし、プロジェクトとして成り立っていそうだということ。