金曜日, 3月 20, 2009

as3corelibのJSONクラスを使ってNew York TimesのAPIからデータを取得する2

JSONというのが何なのかというのが今回の話題。

詳しくは公式ドキュメントなりwikipediaなりを読むとして、とりあえずはXMLなどのようなデータフォーマットの一種であると。JavaScript Object Notationが正式名称だけど、JavaScriptのオブジェクトの表記をベースにしているというだけで、JavaScript以外でも使える。
"キー":値というシンプルな形。入れ子にもできる。
例:

{
"name":"hayashi",
"age":26,
"occupation":[
{"main":"designer"},
{"sub":"programmer"}
]
}


前回のプログラムで、loaderから読み取ったデータをそのまま出力してみる(loader.dataをtraceする)と、このような形式の文字列が出力されているはず。

で、あとはXMLと同じようにドットとキーで欲しい値にアクセスする。
前回のソースの27行目を下のように一旦オブジェクト型の変数に格納する形にして、
var o:Object = JSON.decode(loader.data);

o.tokensで何てキーワードで検索したかとか、o.totalで何件ひっかかったとかが取得できる。

o.resultsはリクエストに合致した記事のデータがそれぞれ配列になっていて、o.results[0].titleで1件目の記事のタイトルを取得したり、o.results[2].bylineで3件目の記事の筆者を取得したりできる。o.results.lengthで結果の総数を得てfor文と一緒に使うケースが多いと思う。

この辺のキーの与え方に関しては返ってきたデータ(loader.dataでtraceした結果)を見ながらの作業になる。

視覚化の方法についてはまた次回。

actionscript2とpapervision3D

papervisionXがどうとか騒がれている2009年の3月ですが、Flash Player8(もしかすると7)で3Dっぽいものを動作させなければならないのでpapervisionについて調べてる。
が、古い情報はなかなか見つからない。検索結果と見られるページ全部をある時期に戻せたらいいのに。メディアアートに文化財保存修復学科的なものがあればいいのに。

svnからpapervision3Dを全部check outすると、一応as2のsrcもあるのだけど、as3用のpritivesのようなSphereやCylinderがない。wikiにあるとの情報だったが、wikiもう見られない。

3Dに関しては全然知識がなく、ここ数日でわかったことは、立体を作るためには三角形をひたすら組み合わせるということ。

自分で書くのは大変そうなのでinternet archiveで探してサルベージ。

objectフォルダに入れておく。とりあえずSphereは動いた。
ファミコンで鉄拳2とか観て自分を奮い立てる。

import org.papervision3d.cameras.Camera3D;
import org.papervision3d.materials.WireframeMaterial;
import org.papervision3d.scenes.Scene3D;

import org.papervision3d.objects.Sphere;

var container:MovieClip;
var scene:Scene3D;
var camera:Camera3D;
var sphere:Sphere;

init3D();
this.onEnterFrame = loop3D;

function init3D():Void {
container = this.createEmptyMovieClip("container", this.getNextHighestDepth());
container._x = 275;
container._y = 200;

scene = new Scene3D(container);

camera = new Camera3D();
camera.z = -2000;
camera.zoom = 1;
camera.focus = 500;

var material:WireframeMaterial = new WireframeMaterial(0xffffff);

sphere = new Sphere(material, 400, 10, 10);

scene.push(sphere);
}

function loop3D():Void {
sphere.rotationY = container._xmouse / 2;
sphere.rotationX = container._ymouse / 2;

scene.renderCamera(camera);
}

土曜日, 3月 07, 2009

steering behaviorのメモ

seekがターゲットに向かう動き、fleeがターゲットから遠ざかる動き。まずこれを押さえる。
ここからflockするために、cohesion、separation、alignmentを加えるんだけど、

cohesionは仲間の平均の位置をseekすることで、separationは近づき過ぎた仲間からfleeすること、alignmentは仲間の平均の速度に合わせること。

基本はAdvanced ActionScript 3.0 Animationで勉強した。
最近また新しいサンプルが増えたnature of codeもよくわかる。
どちらも大元にあるのはcraig reynolds。
Steering Behaviors For Autonomous Characters

nature of codeは夏に本が出るらしい。
Nature of Code Book at daniel shiffman

早速メーリングリスト登録した。