<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Jinten Blog</title>
	<atom:link href="http://www.jinten.net/blog/feed" rel="self" type="application/rss+xml" />
	<link>http://www.jinten.net/blog</link>
	<description>Flex ActionScript 関連覚書などなど</description>
	<lastBuildDate>Fri, 27 Nov 2009 04:41:31 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.6</generator>
	<language>ja</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>[as3]メモリリークをデバッグ(2)</title>
		<link>http://www.jinten.net/blog/archives/48</link>
		<comments>http://www.jinten.net/blog/archives/48#comments</comments>
		<pubDate>Fri, 18 Apr 2008 15:30:57 +0000</pubDate>
		<dc:creator>ken</dc:creator>
				<category><![CDATA[ActionScript3.0]]></category>

		<guid isPermaLink="false">http://www.jinten.net/blog/archives/48</guid>
		<description><![CDATA[メモリリークをデバッグ(1)の続き。
実際にInstanceWatcherクラスを使ってみます。
ソースのオリジナルは、l4lさんの記事から。


package &#123;
	import flash.display [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.jinten.net/blog/?p=47">メモリリークをデバッグ(1)</a>の続き。</p>
<p>実際にInstanceWatcherクラスを使ってみます。<br />
ソースのオリジナルは、<a href="http://kozy.heteml.jp/l4l/2008/04/as3dictionary.html">l4lさんの記事</a>から。<br />
<span id="more-48"></span></p>

<div class="wp_syntax"><div class="code"><pre class="actionscript3" style="font-family:monospace;"><span style="color: #9900cc; font-weight: bold;">package</span> <span style="color: #000000;">&#123;</span>
	<span style="color: #0033ff; font-weight: bold;">import</span> <span style="color: #004993;">flash.display</span>.<span style="color: #004993;">Sprite</span>;
	<span style="color: #0033ff; font-weight: bold;">import</span> <span style="color: #004993;">flash.events</span>.<span style="color: #004993;">Event</span>;
	<span style="color: #0033ff; font-weight: bold;">import</span> <span style="color: #004993;">flash.events</span>.<span style="color: #004993;">MouseEvent</span>;
	<span style="color: #0033ff; font-weight: bold;">import</span> <span style="color: #004993;">flash.system</span>.<span style="color: #004993;">System</span>;
	<span style="color: #0033ff; font-weight: bold;">import</span> <span style="color: #004993;">flash.text</span>.<span style="color: #004993;">TextField</span>;
	<span style="color: #0033ff; font-weight: bold;">import</span> <span style="color: #004993;">flash.utils</span>.<span style="color: #004993;">Dictionary</span>;
&nbsp;
	<span style="color: #000000;">&#91;</span>SWF<span style="color: #000000;">&#40;</span><span style="color: #004993;">width</span>=<span style="color: #990000;">&quot;400&quot;</span>, <span style="color: #004993;">height</span>=<span style="color: #990000;">&quot;300&quot;</span><span style="color: #000000;">&#41;</span><span style="color: #000000;">&#93;</span>
	<span style="color: #0033ff; font-weight: bold;">public</span> <span style="color: #9900cc; font-weight: bold;">class</span> <span style="color: #004993;">test</span> extends <span style="color: #004993;">Sprite</span> <span style="color: #000000;">&#123;</span>
&nbsp;
		<span style="color: #0033ff; font-weight: bold;">private</span> <span style="color: #6699cc; font-weight: bold;">var</span> _tf<span style="color: #000000; font-weight: bold;">:</span><span style="color: #004993;">TextField</span> = <span style="color: #0033ff; font-weight: bold;">new</span> <span style="color: #004993;">TextField</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span>;
		<span style="color: #0033ff; font-weight: bold;">private</span> <span style="color: #6699cc; font-weight: bold;">var</span> iw<span style="color: #000000; font-weight: bold;">:</span>InstanceWatcher = InstanceWatcher.instance;
		<span style="color: #0033ff; font-weight: bold;">private</span> <span style="color: #6699cc; font-weight: bold;">var</span> dic<span style="color: #000000; font-weight: bold;">:</span><span style="color: #004993;">Dictionary</span>;
&nbsp;
		<span style="color: #0033ff; font-weight: bold;">public</span> <span style="color: #339966; font-weight: bold;">function</span> <span style="color: #004993;">test</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span> <span style="color: #000000;">&#123;</span>
			_tf.<span style="color: #004993;">width</span> = <span style="color: #000000; font-weight:bold;">400</span>;
			_tf.<span style="color: #004993;">height</span> = <span style="color: #000000; font-weight:bold;">300</span>;
			<span style="color: #004993;">addChild</span><span style="color: #000000;">&#40;</span>_tf<span style="color: #000000;">&#41;</span>;
			dic = <span style="color: #0033ff; font-weight: bold;">new</span> <span style="color: #004993;">Dictionary</span><span style="color: #000000;">&#40;</span><span style="color: #0033ff; font-weight: bold;">true</span><span style="color: #000000;">&#41;</span>;
			<span style="color: #004993;">stage</span>.<span style="color: #004993;">addEventListener</span><span style="color: #000000;">&#40;</span><span style="color: #004993;">MouseEvent</span>.<span style="color: #004993;">CLICK</span>, createObject<span style="color: #000000;">&#41;</span>;
			<span style="color: #004993;">stage</span>.<span style="color: #004993;">addEventListener</span><span style="color: #000000;">&#40;</span><span style="color: #004993;">Event</span>.<span style="color: #004993;">ENTER_FRAME</span>, watch<span style="color: #000000;">&#41;</span>;
		<span style="color: #000000;">&#125;</span>
&nbsp;
		<span style="color: #0033ff; font-weight: bold;">private</span> <span style="color: #339966; font-weight: bold;">function</span> createObject<span style="color: #000000;">&#40;</span>event<span style="color: #000000; font-weight: bold;">:</span><span style="color: #004993;">MouseEvent</span><span style="color: #000000;">&#41;</span><span style="color: #000000; font-weight: bold;">:</span><span style="color: #0033ff; font-weight: bold;">void</span> <span style="color: #000000;">&#123;</span>
			<span style="color: #0033ff; font-weight: bold;">for</span> <span style="color: #000000;">&#40;</span><span style="color: #6699cc; font-weight: bold;">var</span> i<span style="color: #000000; font-weight: bold;">:</span><span style="color: #004993;">int</span> = <span style="color: #000000; font-weight:bold;">0</span>; i <span style="color: #000000; font-weight: bold;">&lt;</span> <span style="color: #000000; font-weight:bold;">10</span>; i<span style="color: #000000; font-weight: bold;">++</span><span style="color: #000000;">&#41;</span> <span style="color: #000000;">&#123;</span>
				<span style="color: #6699cc; font-weight: bold;">var</span> sp<span style="color: #000000; font-weight: bold;">:</span><span style="color: #004993;">Sprite</span> = <span style="color: #0033ff; font-weight: bold;">new</span> ExtSprite<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span>; <span style="color: #009900;">// GCされない</span>
				<span style="color: #009900;">//dic[sp] = null;</span>
				dic<span style="color: #000000;">&#91;</span>sp.<span style="color: #004993;">name</span><span style="color: #000000;">&#93;</span> = sp;
				<span style="color: #0033ff; font-weight: bold;">new</span> ExtSprite<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span>; <span style="color: #009900;">// こっちはGCされる</span>
			<span style="color: #000000;">&#125;</span>
			<span style="color: #009900;">//System.gc();</span>
		<span style="color: #000000;">&#125;</span>
&nbsp;
		<span style="color: #0033ff; font-weight: bold;">private</span> <span style="color: #339966; font-weight: bold;">function</span> watchDictionary<span style="color: #000000;">&#40;</span>event<span style="color: #000000; font-weight: bold;">:</span><span style="color: #004993;">Event</span>=<span style="color: #0033ff; font-weight: bold;">null</span><span style="color: #000000;">&#41;</span><span style="color: #000000; font-weight: bold;">:</span><span style="color: #0033ff; font-weight: bold;">void</span> <span style="color: #000000;">&#123;</span>
			_tf.<span style="color: #004993;">text</span> = iw.getWatchString<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span>;
		<span style="color: #000000;">&#125;</span>
	<span style="color: #000000;">&#125;</span>
<span style="color: #000000;">&#125;</span>
<span style="color: #0033ff; font-weight: bold;">import</span> <span style="color: #004993;">flash.display</span>.<span style="color: #004993;">Sprite</span>;
<span style="color: #9900cc; font-weight: bold;">class</span> ExtSprite extends <span style="color: #004993;">Sprite</span> <span style="color: #000000;">&#123;</span><span style="color: #000000;">&#125;</span></pre></div></div>

<p>ちょこっと書き換えてますが、追加したのはほぼ2行です。<br />
private var iw:InstanceWatcher = InstanceWatcher.instance;<br />
まずここでシングルトンインスタンスを生成しておきます。<br />
インスタンスを生成しないとサンプリングが開始されないので、<br />
ルートのクラスで、コンストラクタ前に初期化してあります。<br />
で、iw.getWatchString();で解析結果をStringで受け取る、と。これだけ。</p>
<p>プログラム実行直後の表示は、<br />
&#8212;&#8212;&#8212;-<br />
[class Object]:8<br />
[class String]:1<br />
[class Function]:2<br />
[class Event]:1<br />
[class EventDispatcher]:1<br />
[class Dictionary]:1<br />
[class ApplicationDomain]:1<br />
[class Class]:4<br />
[class LoaderInfo]:1<br />
&#8212;&#8212;&#8212;-<br />
こんな感じ。</p>
<p>で、クリックするたびに[class ExtSprite]の数が増えていきます。<br />
10分くらい待つと･･･見事半分がガベージコレクションに持っていかれて、[class ExtSprite]の数が半分に。</p>
<p>ちなみに、半分残ってしまうのは、この部分。
</pre>

<div class="wp_syntax"><div class="code"><pre class="actionscript3" style="font-family:monospace;">dic<span style="color: #000000;">&#91;</span>sp.<span style="color: #004993;">name</span><span style="color: #000000;">&#93;</span> = sp;</pre></div></div>

<p><a href="http://livedocs.adobe.com/flex/3_jp/langref/flash/utils/Dictionary.html#Dictionary()">リファレンス</a>を読むと、<br />
> <strong>オブジェクトキーに</strong> "弱" 参照を使用するように、～～<br />
Dictinaryが弱参照をするのは、オブジェクトキー指定したオブジェクトに対してですね。<br />
ん～、ややこしいな！Dictinary！</p>

<div class="wp_syntax"><div class="code"><pre class="actionscript3" style="font-family:monospace;">dic<span style="color: #000000;">&#91;</span>sp<span style="color: #000000;">&#93;</span> = <span style="color: #0033ff; font-weight: bold;">null</span>;</pre></div></div>

<p>に書き換えてやれば[class ExtSprite]が全部ガベージコレクションされるようになります。</p>
<p>とりあえず、flash.sampler.*系のクラス&#038;メソッドは、<br />
<strong>Flash Player デバッガ版の Update 3 以降が必要</strong>という制約はあるものの、<br />
シングルトンインスタンスの生成と、出力の最低限2行を既存のプログラムに書き加えてやれば、<br />
プログラム全体のインスタンス存在状況を見れる(はず)ということで、どうでしょうか？</p>
<p>あとは、出力周りとか得られる情報の種類とかいろいろ直さないとかな･･･。<br />
こんくらいでもsparkプロジェクトとかに混ぜてもらえるかなぁ･･･。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.jinten.net/blog/archives/48/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>[as3]メモリリークをデバッグ(1)</title>
		<link>http://www.jinten.net/blog/archives/47</link>
		<comments>http://www.jinten.net/blog/archives/47#comments</comments>
		<pubDate>Fri, 18 Apr 2008 15:22:15 +0000</pubDate>
		<dc:creator>ken</dc:creator>
				<category><![CDATA[ActionScript3.0]]></category>

		<guid isPermaLink="false">http://www.jinten.net/blog/archives/47</guid>
		<description><![CDATA[あー、ずいぶん期間を空けてしまった。一度書くのをサボると、そのうち忘れていくんだよな~･･･。
l4lさんの記事などでも取り上げられてるんですが、
メモリやガベージコレクションの動きを監視したい！というような話です。
実 [...]]]></description>
			<content:encoded><![CDATA[<p>あー、ずいぶん期間を空けてしまった。一度書くのをサボると、そのうち忘れていくんだよな~･･･。</p>
<p><a href="http://kozy.heteml.jp/l4l/2008/04/as3dictionary.html">l4lさんの記事</a>などでも取り上げられてるんですが、<br />
メモリやガベージコレクションの動きを監視したい！というような話です。</p>
<p>実行中のある瞬間に、いったいいくつのインスタンスが存在しているのかを確認しながら、<br />
メモリリークを防ぎたい。と、多くの人が思っているはずです。多分。</p>
<p>で、上の<a href="http://kozy.heteml.jp/l4l/2008/04/as3dictionary.html">l4lさんの記事</a>やその大元の<a href="http://fladdict.net/blog/2008/04/as3_19.html">fladdictさんの記事</a>の考えを元に、<br />
こんなクラスを作って見ました。</p>
<p><span id="more-47"></span></p>

<div class="wp_syntax"><div class="code"><pre class="actionscript3" style="font-family:monospace;"><span style="color: #9900cc; font-weight: bold;">package</span>  <span style="color: #000000;">&#123;</span>
	<span style="color: #0033ff; font-weight: bold;">import</span> flash.sampler.NewObjectSample;
	<span style="color: #0033ff; font-weight: bold;">import</span> <span style="color: #004993;">flash.utils</span>.<span style="color: #004993;">Dictionary</span>;
&nbsp;
	<span style="color: #3f5fbf;">/**
	* @author ken - Jinten.net
	* @version 0.2
	*/</span>
	<span style="color: #0033ff; font-weight: bold;">public</span> <span style="color: #9900cc; font-weight: bold;">class</span> InstanceWatcher <span style="color: #000000;">&#123;</span>
&nbsp;
		<span style="color: #0033ff; font-weight: bold;">private</span> static <span style="color: #6699cc; font-weight: bold;">var</span> _instance<span style="color: #000000; font-weight: bold;">:</span>InstanceWatcher = <span style="color: #0033ff; font-weight: bold;">null</span>;
		<span style="color: #0033ff; font-weight: bold;">public</span> static <span style="color: #339966; font-weight: bold;">function</span> <span style="color: #0033ff; font-weight: bold;">get</span> instance<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span><span style="color: #000000; font-weight: bold;">:</span>InstanceWatcher <span style="color: #000000;">&#123;</span>
			<span style="color: #0033ff; font-weight: bold;">if</span> <span style="color: #000000;">&#40;</span>_instance == <span style="color: #0033ff; font-weight: bold;">null</span><span style="color: #000000;">&#41;</span> <span style="color: #000000;">&#123;</span>
				_instance = <span style="color: #0033ff; font-weight: bold;">new</span> InstanceWatcher<span style="color: #000000;">&#40;</span><span style="color: #0033ff; font-weight: bold;">new</span> SingletonEssence<span style="color: #000000;">&#41;</span>;
			<span style="color: #000000;">&#125;</span>
			<span style="color: #0033ff; font-weight: bold;">return</span> _instance;
		<span style="color: #000000;">&#125;</span>
&nbsp;
		<span style="color: #0033ff; font-weight: bold;">private</span> static <span style="color: #6699cc; font-weight: bold;">var</span> _dict<span style="color: #000000; font-weight: bold;">:</span><span style="color: #004993;">Dictionary</span> = <span style="color: #0033ff; font-weight: bold;">new</span> <span style="color: #004993;">Dictionary</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span>;
		<span style="color: #0033ff; font-weight: bold;">private</span> static <span style="color: #6699cc; font-weight: bold;">var</span> _instances<span style="color: #000000; font-weight: bold;">:</span><span style="color: #004993;">Object</span> = <span style="color: #0033ff; font-weight: bold;">new</span> <span style="color: #004993;">Object</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span>;
&nbsp;
		<span style="color: #0033ff; font-weight: bold;">public</span> <span style="color: #339966; font-weight: bold;">function</span> InstanceWatcher<span style="color: #000000;">&#40;</span>essense<span style="color: #000000; font-weight: bold;">:</span>SingletonEssence<span style="color: #000000;">&#41;</span> <span style="color: #000000;">&#123;</span>
			<span style="color: #0033ff; font-weight: bold;">if</span> <span style="color: #000000;">&#40;</span>essense == <span style="color: #0033ff; font-weight: bold;">null</span><span style="color: #000000;">&#41;</span> <span style="color: #000000;">&#123;</span>
				<span style="color: #0033ff; font-weight: bold;">throw</span> <span style="color: #004993;">Error</span><span style="color: #000000;">&#40;</span><span style="color: #990000;">'use InstanceWatcher.instance !!'</span><span style="color: #000000;">&#41;</span>;
			<span style="color: #000000;">&#125;</span>
			startSampling<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span>;
		<span style="color: #000000;">&#125;</span>
&nbsp;
		<span style="color: #0033ff; font-weight: bold;">public</span> static <span style="color: #339966; font-weight: bold;">function</span> startSampling<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span><span style="color: #000000; font-weight: bold;">:</span><span style="color: #0033ff; font-weight: bold;">void</span> <span style="color: #000000;">&#123;</span>
			flash.sampler.startSampling<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span>;
		<span style="color: #000000;">&#125;</span>
&nbsp;
		<span style="color: #0033ff; font-weight: bold;">public</span> static <span style="color: #339966; font-weight: bold;">function</span> pauseSampling<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span><span style="color: #000000; font-weight: bold;">:</span><span style="color: #0033ff; font-weight: bold;">void</span> <span style="color: #000000;">&#123;</span>
			flash.sampler.pauseSampling<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span>;
		<span style="color: #000000;">&#125;</span>
&nbsp;
		<span style="color: #0033ff; font-weight: bold;">public</span> static <span style="color: #339966; font-weight: bold;">function</span> stopSampling<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span><span style="color: #000000; font-weight: bold;">:</span><span style="color: #0033ff; font-weight: bold;">void</span> <span style="color: #000000;">&#123;</span>
			flash.sampler.stopSampling<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span>;
		<span style="color: #000000;">&#125;</span>
&nbsp;
		<span style="color: #0033ff; font-weight: bold;">public</span> <span style="color: #339966; font-weight: bold;">function</span> getWatchString<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span><span style="color: #000000; font-weight: bold;">:</span><span style="color: #004993;">String</span> <span style="color: #000000;">&#123;</span>
			watch<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span>;
&nbsp;
			<span style="color: #6699cc; font-weight: bold;">var</span> str<span style="color: #000000; font-weight: bold;">:</span><span style="color: #004993;">String</span> = <span style="color: #990000;">''</span>;
			<span style="color: #0033ff; font-weight: bold;">for</span> <span style="color: #000000;">&#40;</span><span style="color: #6699cc; font-weight: bold;">var</span> <span style="color: #004993;">type</span><span style="color: #000000; font-weight: bold;">:</span><span style="color: #004993;">String</span> <span style="color: #0033ff; font-weight: bold;">in</span> _dict<span style="color: #000000;">&#41;</span> <span style="color: #000000;">&#123;</span>
				<span style="color: #6699cc; font-weight: bold;">var</span> <span style="color: #004993;">d</span><span style="color: #000000; font-weight: bold;">:</span><span style="color: #004993;">Dictionary</span> = _dict<span style="color: #000000;">&#91;</span><span style="color: #004993;">type</span><span style="color: #000000;">&#93;</span> <span style="color: #0033ff; font-weight: bold;">as</span> <span style="color: #004993;">Dictionary</span>;
				<span style="color: #6699cc; font-weight: bold;">var</span> num<span style="color: #000000; font-weight: bold;">:</span><span style="color: #004993;">int</span> = <span style="color: #000000; font-weight:bold;">0</span>;
				<span style="color: #0033ff; font-weight: bold;">for</span> <span style="color: #000000;">&#40;</span><span style="color: #6699cc; font-weight: bold;">var</span> inst<span style="color: #000000; font-weight: bold;">:*</span> <span style="color: #0033ff; font-weight: bold;">in</span> <span style="color: #004993;">d</span><span style="color: #000000;">&#41;</span> <span style="color: #000000;">&#123;</span>
					num<span style="color: #000000; font-weight: bold;">++</span>;
				<span style="color: #000000;">&#125;</span>
				str <span style="color: #000000; font-weight: bold;">+</span>= <span style="color: #004993;">type</span> <span style="color: #000000; font-weight: bold;">+</span> <span style="color: #990000;">':'</span> <span style="color: #000000; font-weight: bold;">+</span> num <span style="color: #000000; font-weight: bold;">+</span> <span style="color: #990000;">'<span style="">\n</span>'</span>;
			<span style="color: #000000;">&#125;</span>
			<span style="color: #0033ff; font-weight: bold;">return</span> str;
		<span style="color: #000000;">&#125;</span>
&nbsp;
		<span style="color: #0033ff; font-weight: bold;">private</span> <span style="color: #339966; font-weight: bold;">function</span> watch<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span><span style="color: #000000; font-weight: bold;">:</span><span style="color: #0033ff; font-weight: bold;">void</span> <span style="color: #000000;">&#123;</span>
			pauseSampling<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span>;
			<span style="color: #6699cc; font-weight: bold;">var</span> samples<span style="color: #000000; font-weight: bold;">:</span><span style="color: #004993;">Object</span> = flash.sampler.getSamples<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span>;
&nbsp;
			<span style="color: #0033ff; font-weight: bold;">for</span> <span style="color: #0033ff; font-weight: bold;">each</span><span style="color: #000000;">&#40;</span><span style="color: #6699cc; font-weight: bold;">var</span> sample<span style="color: #000000; font-weight: bold;">:</span><span style="color: #004993;">Object</span> <span style="color: #0033ff; font-weight: bold;">in</span> samples<span style="color: #000000;">&#41;</span> <span style="color: #000000;">&#123;</span>
				<span style="color: #0033ff; font-weight: bold;">if</span> <span style="color: #000000;">&#40;</span>sample <span style="color: #0033ff; font-weight: bold;">is</span> NewObjectSample<span style="color: #000000;">&#41;</span> <span style="color: #000000;">&#123;</span>
					<span style="color: #6699cc; font-weight: bold;">var</span> nos<span style="color: #000000; font-weight: bold;">:</span>NewObjectSample = NewObjectSample<span style="color: #000000;">&#40;</span>sample<span style="color: #000000;">&#41;</span>;
					<span style="color: #6699cc; font-weight: bold;">var</span> <span style="color: #004993;">type</span><span style="color: #000000; font-weight: bold;">:</span><span style="color: #004993;">String</span> = <span style="color: #004993;">String</span><span style="color: #000000;">&#40;</span>nos.<span style="color: #004993;">type</span><span style="color: #000000;">&#41;</span>;
					<span style="color: #0033ff; font-weight: bold;">if</span> <span style="color: #000000;">&#40;</span>nos.object <span style="color: #000000; font-weight: bold;">!</span>= <span style="color: #0033ff; font-weight: bold;">undefined</span><span style="color: #000000;">&#41;</span> <span style="color: #000000;">&#123;</span>
						<span style="color: #0033ff; font-weight: bold;">if</span> <span style="color: #000000;">&#40;</span><span style="color: #000000; font-weight: bold;">!</span><span style="color: #000000;">&#40;</span>_dict<span style="color: #000000;">&#91;</span><span style="color: #004993;">type</span><span style="color: #000000;">&#93;</span> <span style="color: #0033ff; font-weight: bold;">is</span> <span style="color: #004993;">Dictionary</span><span style="color: #000000;">&#41;</span><span style="color: #000000;">&#41;</span> <span style="color: #000000;">&#123;</span>
							_dict<span style="color: #000000;">&#91;</span><span style="color: #004993;">type</span><span style="color: #000000;">&#93;</span> = <span style="color: #0033ff; font-weight: bold;">new</span> <span style="color: #004993;">Dictionary</span><span style="color: #000000;">&#40;</span><span style="color: #0033ff; font-weight: bold;">true</span><span style="color: #000000;">&#41;</span>;
						<span style="color: #000000;">&#125;</span>
						_dict<span style="color: #000000;">&#91;</span><span style="color: #004993;">type</span><span style="color: #000000;">&#93;</span><span style="color: #000000;">&#91;</span>nos.object<span style="color: #000000;">&#93;</span> = <span style="color: #0033ff; font-weight: bold;">null</span>;
					<span style="color: #000000;">&#125;</span>
				<span style="color: #000000;">&#125;</span>
			<span style="color: #000000;">&#125;</span>
			flash.sampler.clearSamples<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span>;
			startSampling<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span>;
		<span style="color: #000000;">&#125;</span>
	<span style="color: #000000;">&#125;</span>
<span style="color: #000000;">&#125;</span>
&nbsp;
<span style="color: #9900cc; font-weight: bold;">class</span> SingletonEssence <span style="color: #000000;">&#123;</span> <span style="color: #000000;">&#125;</span></pre></div></div>

<p>内部を軽く説明すると、</p>

<div class="wp_syntax"><div class="code"><pre class="actionscript3" style="font-family:monospace;">flash.sampler.startSampling<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span>;</pre></div></div>

<p>コンストラクタのこの行でサンプリングを開始しています。<br />
watch()メソッド内の</p>

<div class="wp_syntax"><div class="code"><pre class="actionscript3" style="font-family:monospace;">flash.sampler.getSamples<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span>;</pre></div></div>

<p>でサンプリングされたオブジェクトが返ってきます。<br />
この中にあるNewObjectSampleというオブジェクトが混ざっていますが、<br />
これは、サンプリング開始以後に(何らかの)オブジェクトが生成されたことを示すオブジェクトです。<br />
しかも、このNewObjectSampleのobjectプロパティには生成されたオブジェクトへの参照があり、<br />
すでにガベージコレクションされている場合には、undefinedとなっています。<br />
これを利用して、プログラム内のインスタンスの数を数えよう！という試みです。</p>
<p>長くなったので、<a href="http://www.jinten.net/blog/?p=48">メモリリークをデバッグ(2)</a>へ続く。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.jinten.net/blog/archives/47/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>[as3][言語解析]ActionScript3.0で形態素解析もどき(1)</title>
		<link>http://www.jinten.net/blog/archives/46</link>
		<comments>http://www.jinten.net/blog/archives/46#comments</comments>
		<pubDate>Mon, 18 Feb 2008 08:10:10 +0000</pubDate>
		<dc:creator>ken</dc:creator>
				<category><![CDATA[ActionScript3.0]]></category>
		<category><![CDATA[形態素解析]]></category>

		<guid isPermaLink="false">http://www.jinten.net/blog/archives/46</guid>
		<description><![CDATA[最近は3dとか物理エンジンとか、グラフィックっぽいことばかりだったので、
少し違うことを。
JavaScript で形態素解析もどき
このあたりを参考に形態素解析もどきで遊んでみます。

まずは、参考サイトのように、日本 [...]]]></description>
			<content:encoded><![CDATA[<p>最近は3dとか物理エンジンとか、グラフィックっぽいことばかりだったので、<br />
少し違うことを。</p>
<p><a href="http://ablog.seesaa.net/article/20969848.html">JavaScript で形態素解析もどき</a><br />
このあたりを参考に形態素解析もどきで遊んでみます。<br />
<span id="more-46"></span><br />
まずは、参考サイトのように、日本語の文章を、漢字やひらがな、カタカナで分割してみます。</p>
<p>と、言ってもほんの2行ですね。</p>

<div class="wp_syntax"><div class="code"><pre class="actionscript3" style="font-family:monospace;"><span style="color: #6699cc; font-weight: bold;">var</span> pattern<span style="color: #000000; font-weight: bold;">:</span><span style="color: #004993;">RegExp</span> = <span style="color: #000000; font-weight: bold;">/</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#91;</span>一<span style="color: #000000; font-weight: bold;">-</span>龠々〆ヵヶ<span style="color: #000000;">&#93;</span><span style="color: #000000; font-weight: bold;">+</span><span style="color: #000000;">&#41;</span><span style="color: #000000; font-weight: bold;">|</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#91;</span>ぁ<span style="color: #000000; font-weight: bold;">-</span>んー－―<span style="color: #000000;">&#93;</span><span style="color: #000000; font-weight: bold;">+</span><span style="color: #000000;">&#41;</span><span style="color: #000000; font-weight: bold;">|</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#91;</span>ァ<span style="color: #000000; font-weight: bold;">-</span>ヴー－―<span style="color: #000000;">&#93;</span><span style="color: #000000; font-weight: bold;">+</span><span style="color: #000000;">&#41;</span><span style="color: #000000; font-weight: bold;">|</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#91;</span>a<span style="color: #000000; font-weight: bold;">-</span>zA<span style="color: #000000; font-weight: bold;">-</span>ZａｚＡ<span style="color: #000000; font-weight: bold;">-</span>Ｚ<span style="color: #000000;">&#93;</span><span style="color: #000000; font-weight: bold;">+</span><span style="color: #000000;">&#41;</span><span style="color: #000000; font-weight: bold;">|</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#91;</span><span style="color: #000000; font-weight:bold;">0</span><span style="color: #000000; font-weight: bold;">-</span><span style="color: #000000; font-weight:bold;">9</span>０<span style="color: #000000; font-weight: bold;">-</span>９.<span style="color: #000000;">&#93;</span><span style="color: #000000; font-weight: bold;">+</span><span style="color: #000000;">&#41;</span><span style="color: #000000; font-weight: bold;">|</span><span style="color: #000000;">&#91;</span>、。！<span style="color: #000000; font-weight: bold;">!</span>？<span style="color: #000000; font-weight: bold;">?</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span>（）「」『』<span style="color: #000000; font-weight: bold;">-</span><span style="color: #000000;">&#93;</span><span style="color: #000000; font-weight: bold;">/</span>g;
output_text = input_text.<span style="color: #004993;">match</span><span style="color: #000000;">&#40;</span>pattern<span style="color: #000000;">&#41;</span>.<span style="color: #004993;">join</span><span style="color: #000000;">&#40;</span><span style="color: #990000;">&quot; | &quot;</span><span style="color: #000000;">&#41;</span>;</pre></div></div>

<p>正規表現で分割して、とりあえず今回は「|」で区切ってみました。<br />
ちなみに文章のサンプルは<a href="http://ja.wikipedia.org/wiki/ActionScript">WikipediaからActionscriptの項</a>です。<br />
「原文」のテキストエリアに文章を入れて、「解析」ボタンを押すと文章をパースします。</p>
<p><script type="text/javascript" src="http://www.jinten.net/samples/js/swfobject.js"></script></p>
<div id="flashcontent"></div>
<p><script type="text/javascript">
  // < ![CDATA[
    var so = new SWFObject("/samples/jparse_sample1.swf", "jparse_sample", "500", "400", "9", "#FFFFFF");
    so.write("flashcontent");
  // ]]&gt;
</script><br />
今日はここまで。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.jinten.net/blog/archives/46/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>[as3][FOAM]初めてのFOAM(2) 多角形の表示</title>
		<link>http://www.jinten.net/blog/archives/43</link>
		<comments>http://www.jinten.net/blog/archives/43#comments</comments>
		<pubDate>Tue, 12 Feb 2008 01:47:50 +0000</pubDate>
		<dc:creator>ken</dc:creator>
				<category><![CDATA[ASライブラリ]]></category>
		<category><![CDATA[ActionScript3.0]]></category>

		<guid isPermaLink="false">http://www.jinten.net/blog/archives/43</guid>
		<description><![CDATA[前回記事 初めてのFOAMの続きです。
今回は多角形の表示をします。
FOAMの基本的な使い方は前回の記事を参考にしてください。

var rigid:RigidBody = new RigidBody&#40;&#91 [...]]]></description>
			<content:encoded><![CDATA[<p>前回記事 <a href="http://www.jinten.net/blog/archives/41">初めてのFOAM</a>の続きです。</p>
<p>今回は多角形の表示をします。<br />
FOAMの基本的な使い方は前回の記事を参考にしてください。</p>

<div class="wp_syntax"><div class="code"><pre class="actionscript3" style="font-family:monospace;"><span style="color: #6699cc; font-weight: bold;">var</span> rigid<span style="color: #000000; font-weight: bold;">:</span>RigidBody = <span style="color: #0033ff; font-weight: bold;">new</span> RigidBody<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#91;</span>X位置<span style="color: #000000;">&#93;</span>, <span style="color: #000000;">&#91;</span>Y位置<span style="color: #000000;">&#93;</span>, <span style="color: #000000;">&#91;</span>サイズ<span style="color: #000000;">&#93;</span>, <span style="color: #000000;">&#91;</span>頂点の座標配列<span style="color: #000000;">&#93;</span><span style="color: #000000;">&#41;</span>;
foam.addElement<span style="color: #000000;">&#40;</span>rigid<span style="color: #000000;">&#41;</span>;</pre></div></div>

<p>これが多角形を表示するコードです。<br />
メソッドの引数はほかにもあるのでいろいろ調節はできるようですが、<br />
まだ調査不足のためそのあたりはいずれ･･･。</p>
<p>今回のサンプルでのコードとしてはこのように書いています。</p>

<div class="wp_syntax"><div class="code"><pre class="actionscript3" style="font-family:monospace;"><span style="color: #009900;">// 座標をランダムに決定。0-300で。(今回はswfのサイズが300×300なので)</span>
<span style="color: #6699cc; font-weight: bold;">var</span> rnd_x<span style="color: #000000; font-weight: bold;">:</span><span style="color: #004993;">Number</span> = <span style="color: #004993;">Math</span>.<span style="color: #004993;">random</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span> <span style="color: #000000; font-weight: bold;">*</span> <span style="color: #000000; font-weight:bold;">300</span>;
<span style="color: #6699cc; font-weight: bold;">var</span> rnd_y<span style="color: #000000; font-weight: bold;">:</span><span style="color: #004993;">Number</span> = <span style="color: #004993;">Math</span>.<span style="color: #004993;">random</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span> <span style="color: #000000; font-weight: bold;">*</span> <span style="color: #000000; font-weight:bold;">300</span>;
<span style="color: #009900;">// 多角形のサイズをランダムに決定。20-60。この数値は適当。</span>
<span style="color: #6699cc; font-weight: bold;">var</span> rnd_size<span style="color: #000000; font-weight: bold;">:</span><span style="color: #004993;">Number</span> = <span style="color: #000000; font-weight:bold;">20</span> <span style="color: #000000; font-weight: bold;">+</span> <span style="color: #004993;">Math</span>.<span style="color: #004993;">random</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span> <span style="color: #000000; font-weight: bold;">*</span> <span style="color: #000000; font-weight:bold;">40</span>;
<span style="color: #009900;">// 頂点数をランダムに決定。2-9。頂点数2なら直線、3なら三角形に。</span>
<span style="color: #6699cc; font-weight: bold;">var</span> rnd_num_vertices<span style="color: #000000; font-weight: bold;">:</span><span style="color: #004993;">Number</span> = <span style="color: #000000; font-weight:bold;">1</span> <span style="color: #000000; font-weight: bold;">+</span> <span style="color: #004993;">Math</span>.<span style="color: #004993;">ceil</span><span style="color: #000000;">&#40;</span><span style="color: #004993;">Math</span>.<span style="color: #004993;">random</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span> <span style="color: #000000; font-weight: bold;">*</span> <span style="color: #000000; font-weight:bold;">8</span><span style="color: #000000;">&#41;</span>;
<span style="color: #009900;">// createSymmetricPolygonメソッドで頂点座標の配列を返す。</span>
<span style="color: #6699cc; font-weight: bold;">var</span> rigid_arr<span style="color: #000000; font-weight: bold;">:</span><span style="color: #004993;">Array</span> = ShapeUtil.createSymmetricPolygon<span style="color: #000000;">&#40;</span>rnd_num_vertices, rnd_size<span style="color: #000000;">&#41;</span>;
&nbsp;
<span style="color: #009900;">// RigidBodyインスタンスを生成し、foamエンジンへ追加。</span>
<span style="color: #6699cc; font-weight: bold;">var</span> rigid<span style="color: #000000; font-weight: bold;">:</span>RigidBody = <span style="color: #0033ff; font-weight: bold;">new</span> RigidBody<span style="color: #000000;">&#40;</span>rnd_x, rnd_y, rnd_size, rigid_arr<span style="color: #000000;">&#41;</span>;
foam.addElement<span style="color: #000000;">&#40;</span>rigid<span style="color: #000000;">&#41;</span>;</pre></div></div>

<p>簡単ですね。<br />
ただ、ちょっと重いかな･･･。まだバージョン0.1.01だもんなぁ･･･。</p>
<p><a href="http://www.jinten.net/blog/?page_id=44">デモはこちら</a>。<br />
<img src='http://www.jinten.net/blog/wp-content/uploads/2008/02/foam_sample2.png' alt='screenshot' /></p>
<p>ソースコード全体は以下。<br />
<span id="more-43"></span></p>

<div class="wp_syntax"><div class="code"><pre class="actionscript3" style="font-family:monospace;"><span style="color: #9900cc; font-weight: bold;">package</span>  <span style="color: #000000;">&#123;</span>
	<span style="color: #0033ff; font-weight: bold;">import</span> <span style="color: #004993;">flash.display</span>.<span style="color: #000000; font-weight: bold;">*</span>;
	<span style="color: #0033ff; font-weight: bold;">import</span> <span style="color: #004993;">flash.events</span>.<span style="color: #004993;">MouseEvent</span>;
	<span style="color: #0033ff; font-weight: bold;">import</span> org.generalrelativity.foam.dynamics.element.body.<span style="color: #000000; font-weight: bold;">*</span>;
	<span style="color: #0033ff; font-weight: bold;">import</span> org.generalrelativity.foam.dynamics.enum.Simplification;
	<span style="color: #0033ff; font-weight: bold;">import</span> org.generalrelativity.foam.dynamics.force.Gravity;
	<span style="color: #0033ff; font-weight: bold;">import</span> org.generalrelativity.foam.Foam;
	<span style="color: #0033ff; font-weight: bold;">import</span> org.generalrelativity.foam.math.Vector;
	<span style="color: #0033ff; font-weight: bold;">import</span> org.generalrelativity.foam.util.ShapeUtil;
&nbsp;
	<span style="color: #000000;">&#91;</span>SWF<span style="color: #000000;">&#40;</span><span style="color: #004993;">width</span>=<span style="color: #990000;">&quot;300&quot;</span>, <span style="color: #004993;">height</span>=<span style="color: #990000;">&quot;300&quot;</span><span style="color: #000000;">&#41;</span><span style="color: #000000;">&#93;</span>
	<span style="color: #0033ff; font-weight: bold;">public</span> <span style="color: #9900cc; font-weight: bold;">class</span> FoamSample1 extends <span style="color: #004993;">Sprite</span> <span style="color: #000000;">&#123;</span>
&nbsp;
		<span style="color: #0033ff; font-weight: bold;">private</span> const W<span style="color: #000000; font-weight: bold;">:</span><span style="color: #004993;">Number</span> = <span style="color: #000000; font-weight:bold;">300</span>;
		<span style="color: #0033ff; font-weight: bold;">private</span> const H<span style="color: #000000; font-weight: bold;">:</span><span style="color: #004993;">Number</span> = <span style="color: #000000; font-weight:bold;">300</span>;
&nbsp;
		<span style="color: #0033ff; font-weight: bold;">private</span> <span style="color: #6699cc; font-weight: bold;">var</span> foam<span style="color: #000000; font-weight: bold;">:</span>Foam;
&nbsp;
		<span style="color: #0033ff; font-weight: bold;">public</span> <span style="color: #339966; font-weight: bold;">function</span> FoamSample1<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span> <span style="color: #000000;">&#123;</span>
			<span style="color: #004993;">stage</span>.<span style="color: #004993;">scaleMode</span> = <span style="color: #004993;">StageScaleMode</span>.<span style="color: #004993;">NO_SCALE</span>;
			<span style="color: #004993;">stage</span>.<span style="color: #004993;">align</span> = <span style="color: #004993;">StageAlign</span>.<span style="color: #004993;">BOTTOM</span>;
&nbsp;
			<span style="color: #009900;">//FOAMインスタンスの生成</span>
			foam = <span style="color: #0033ff; font-weight: bold;">new</span> Foam<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span>;
			<span style="color: #004993;">addChild</span><span style="color: #000000;">&#40;</span>foam<span style="color: #000000;">&#41;</span>;
&nbsp;
			<span style="color: #009900;">//オブジェクトのドラッグ有効化</span>
			foam.useMouseDragger<span style="color: #000000;">&#40;</span><span style="color: #0033ff; font-weight: bold;">true</span><span style="color: #000000;">&#41;</span>;
&nbsp;
			foam.addGlobalForceGenerator<span style="color: #000000;">&#40;</span><span style="color: #0033ff; font-weight: bold;">new</span> Gravity<span style="color: #000000;">&#40;</span><span style="color: #0033ff; font-weight: bold;">new</span> Vector<span style="color: #000000;">&#40;</span><span style="color: #000000; font-weight:bold;">0</span>, <span style="color: #000000; font-weight:bold;">0.3</span><span style="color: #000000;">&#41;</span><span style="color: #000000;">&#41;</span><span style="color: #000000;">&#41;</span>;
&nbsp;
			<span style="color: #6699cc; font-weight: bold;">var</span> wall_arr<span style="color: #000000; font-weight: bold;">:</span><span style="color: #004993;">Array</span>;
			<span style="color: #009900;">//ground</span>
			wall_arr = ShapeUtil.createRectangle<span style="color: #000000;">&#40;</span>W, <span style="color: #000000; font-weight:bold;">20</span><span style="color: #000000;">&#41;</span>;
			foam.addElement<span style="color: #000000;">&#40;</span><span style="color: #0033ff; font-weight: bold;">new</span> RigidBody<span style="color: #000000;">&#40;</span>W<span style="color: #000000; font-weight: bold;">/</span><span style="color: #000000; font-weight:bold;">2</span>, <span style="color: #000000; font-weight:bold;">0</span>, Simplification.INFINITE_MASS, wall_arr<span style="color: #000000;">&#41;</span><span style="color: #000000;">&#41;</span>;
			foam.addElement<span style="color: #000000;">&#40;</span><span style="color: #0033ff; font-weight: bold;">new</span> RigidBody<span style="color: #000000;">&#40;</span>W<span style="color: #000000; font-weight: bold;">/</span><span style="color: #000000; font-weight:bold;">2</span>, H, Simplification.INFINITE_MASS, wall_arr<span style="color: #000000;">&#41;</span><span style="color: #000000;">&#41;</span>;
			<span style="color: #009900;">//wall</span>
			wall_arr = ShapeUtil.createRectangle<span style="color: #000000;">&#40;</span><span style="color: #000000; font-weight:bold;">20</span>, H<span style="color: #000000;">&#41;</span>;
			foam.addElement<span style="color: #000000;">&#40;</span><span style="color: #0033ff; font-weight: bold;">new</span> RigidBody<span style="color: #000000;">&#40;</span><span style="color: #000000; font-weight:bold;">0</span>, H<span style="color: #000000; font-weight: bold;">/</span><span style="color: #000000; font-weight:bold;">2</span>, Simplification.INFINITE_MASS, wall_arr<span style="color: #000000;">&#41;</span><span style="color: #000000;">&#41;</span>;
			foam.addElement<span style="color: #000000;">&#40;</span><span style="color: #0033ff; font-weight: bold;">new</span> RigidBody<span style="color: #000000;">&#40;</span>W, H<span style="color: #000000; font-weight: bold;">/</span><span style="color: #000000; font-weight:bold;">2</span>, Simplification.INFINITE_MASS, wall_arr<span style="color: #000000;">&#41;</span><span style="color: #000000;">&#41;</span>;
&nbsp;
			<span style="color: #004993;">stage</span>.<span style="color: #004993;">addEventListener</span><span style="color: #000000;">&#40;</span><span style="color: #004993;">MouseEvent</span>.<span style="color: #004993;">CLICK</span>, clickHandler<span style="color: #000000;">&#41;</span>;
&nbsp;
			foam.addElement<span style="color: #000000;">&#40;</span><span style="color: #0033ff; font-weight: bold;">new</span> Circle<span style="color: #000000;">&#40;</span><span style="color: #000000; font-weight:bold;">150</span>, <span style="color: #000000; font-weight:bold;">100</span>, <span style="color: #000000; font-weight:bold;">20</span><span style="color: #000000;">&#41;</span><span style="color: #000000;">&#41;</span>;
			foam.simulate<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span>;
		<span style="color: #000000;">&#125;</span>
&nbsp;
		<span style="color: #0033ff; font-weight: bold;">private</span> <span style="color: #339966; font-weight: bold;">function</span> clickHandler<span style="color: #000000;">&#40;</span>e<span style="color: #000000; font-weight: bold;">:</span><span style="color: #004993;">MouseEvent</span><span style="color: #000000;">&#41;</span><span style="color: #000000; font-weight: bold;">:</span><span style="color: #0033ff; font-weight: bold;">void</span> <span style="color: #000000;">&#123;</span>
			<span style="color: #009900;">// add Rigid</span>
			<span style="color: #6699cc; font-weight: bold;">var</span> rnd_x<span style="color: #000000; font-weight: bold;">:</span><span style="color: #004993;">Number</span> = <span style="color: #004993;">Math</span>.<span style="color: #004993;">random</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span> <span style="color: #000000; font-weight: bold;">*</span> <span style="color: #000000; font-weight:bold;">300</span>;
			<span style="color: #6699cc; font-weight: bold;">var</span> rnd_y<span style="color: #000000; font-weight: bold;">:</span><span style="color: #004993;">Number</span> = <span style="color: #004993;">Math</span>.<span style="color: #004993;">random</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span> <span style="color: #000000; font-weight: bold;">*</span> <span style="color: #000000; font-weight:bold;">300</span>;
			<span style="color: #6699cc; font-weight: bold;">var</span> rnd_size<span style="color: #000000; font-weight: bold;">:</span><span style="color: #004993;">Number</span> = <span style="color: #000000; font-weight:bold;">20</span> <span style="color: #000000; font-weight: bold;">+</span> <span style="color: #004993;">Math</span>.<span style="color: #004993;">random</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span> <span style="color: #000000; font-weight: bold;">*</span> <span style="color: #000000; font-weight:bold;">40</span>;
			<span style="color: #6699cc; font-weight: bold;">var</span> rnd_num_vertices<span style="color: #000000; font-weight: bold;">:</span><span style="color: #004993;">Number</span> = <span style="color: #000000; font-weight:bold;">1</span> <span style="color: #000000; font-weight: bold;">+</span> <span style="color: #004993;">Math</span>.<span style="color: #004993;">ceil</span><span style="color: #000000;">&#40;</span><span style="color: #004993;">Math</span>.<span style="color: #004993;">random</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span> <span style="color: #000000; font-weight: bold;">*</span> <span style="color: #000000; font-weight:bold;">8</span><span style="color: #000000;">&#41;</span>;
			<span style="color: #6699cc; font-weight: bold;">var</span> rigid_arr<span style="color: #000000; font-weight: bold;">:</span><span style="color: #004993;">Array</span> = ShapeUtil.createSymmetricPolygon<span style="color: #000000;">&#40;</span>rnd_num_vertices, rnd_size<span style="color: #000000;">&#41;</span>;
&nbsp;
			<span style="color: #6699cc; font-weight: bold;">var</span> rigid<span style="color: #000000; font-weight: bold;">:</span>RigidBody = <span style="color: #0033ff; font-weight: bold;">new</span> RigidBody<span style="color: #000000;">&#40;</span>rnd_x, rnd_y, rnd_size, rigid_arr<span style="color: #000000;">&#41;</span>;
&nbsp;
			foam.addElement<span style="color: #000000;">&#40;</span>rigid<span style="color: #000000;">&#41;</span>;
		<span style="color: #000000;">&#125;</span>
	<span style="color: #000000;">&#125;</span>
<span style="color: #000000;">&#125;</span></pre></div></div>

]]></content:encoded>
			<wfw:commentRss>http://www.jinten.net/blog/archives/43/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>[as3][FOAM]初めてのFOAM</title>
		<link>http://www.jinten.net/blog/archives/41</link>
		<comments>http://www.jinten.net/blog/archives/41#comments</comments>
		<pubDate>Sun, 03 Feb 2008 19:07:21 +0000</pubDate>
		<dc:creator>ken</dc:creator>
				<category><![CDATA[ASライブラリ]]></category>
		<category><![CDATA[ActionScript3.0]]></category>

		<guid isPermaLink="false">http://www.jinten.net/blog/archives/41</guid>
		<description><![CDATA[最近はBox2DFlashAS3と言うのがはやっているようですね。今更いろいろやろうにも出遅れた感が否めないので、ここはあえて違う物理エンジンをいじってみようと思います。
今回触ってみたのは、FOAMという物理エンジンで [...]]]></description>
			<content:encoded><![CDATA[<p>最近は<a href="http://box2dflash.sourceforge.net/">Box2DFlashAS3</a>と言うのがはやっているようですね。今更いろいろやろうにも出遅れた感が否めないので、ここはあえて違う物理エンジンをいじってみようと思います。</p>
<p>今回触ってみたのは、<a href="http://blog.generalrelativity.org/?p=17">FOAM</a>という物理エンジンです。<br />
バージョンは0.1.01。まだまだ開発版ということですかね。</p>
<p>ではでは、初めてなので、まずは使い方から。</p>
<p>必要なものは、Foamクラスのインスタンスです。</p>

<div class="wp_syntax"><div class="code"><pre class="actionscript3" style="font-family:monospace;"><span style="color: #0033ff; font-weight: bold;">private</span> <span style="color: #6699cc; font-weight: bold;">var</span> foam<span style="color: #000000; font-weight: bold;">:</span>Foam = <span style="color: #0033ff; font-weight: bold;">new</span> Foam<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span>;
<span style="color: #004993;">addChild</span><span style="color: #000000;">&#40;</span>foam<span style="color: #000000;">&#41;</span>;</pre></div></div>

<p>しかも、FoamクラスはSpriteクラスを継承しているため、描画もしてくれます。<br />
なので、addChildしておきます。</p>

<div class="wp_syntax"><div class="code"><pre class="actionscript3" style="font-family:monospace;">foam.addGlobalForceGenerator<span style="color: #000000;">&#40;</span><span style="color: #0033ff; font-weight: bold;">new</span> Gravity<span style="color: #000000;">&#40;</span><span style="color: #0033ff; font-weight: bold;">new</span> Vector<span style="color: #000000;">&#40;</span><span style="color: #000000; font-weight:bold;">0</span>, <span style="color: #000000; font-weight:bold;">0.3</span><span style="color: #000000;">&#41;</span><span style="color: #000000;">&#41;</span><span style="color: #000000;">&#41;</span>;</pre></div></div>

<p>Gravityクラスが重力になるようです。(まだ調査しきれてません･･･)<br />
これを、先ほどのfoamインスタンスのメソッド、addGlobalForceGeneratorに渡します。<br />
これで、重力発生です。</p>
<p>続いて、オブジェクトを配置します。<br />
FormインスタンスのメソッドaddElementに、ISimulatableインターフェースなインスタンスを渡してやります。<br />
円形や多角形、ベジェ曲線などがISimulatableインターフェースをimplementsしたクラスとして提供されています。<br />
今回は円形と四角を使ったサンプルを作ってみました。</p>
<p>デモは<a href='http://www.jinten.net/samples/foam_sample1.html' title='screenshot'>こちら。<img src='http://www.jinten.net/blog/wp-content/uploads/2008/02/foam_sample1.png' alt='screenshot' /></a></p>
<p>ソースは以下。</p>

<div class="wp_syntax"><div class="code"><pre class="actionscript3" style="font-family:monospace;"><span style="color: #3f5fbf;">/**
* FOAM sample1
* @author jinten.net
*/</span>
<span style="color: #9900cc; font-weight: bold;">package</span>  <span style="color: #000000;">&#123;</span>
	<span style="color: #0033ff; font-weight: bold;">import</span> <span style="color: #004993;">flash.display</span>.<span style="color: #000000; font-weight: bold;">*</span>;
	<span style="color: #0033ff; font-weight: bold;">import</span> org.generalrelativity.foam.dynamics.element.body.<span style="color: #000000; font-weight: bold;">*</span>;
	<span style="color: #0033ff; font-weight: bold;">import</span> org.generalrelativity.foam.dynamics.enum.Simplification;
	<span style="color: #0033ff; font-weight: bold;">import</span> org.generalrelativity.foam.dynamics.force.Gravity;
	<span style="color: #0033ff; font-weight: bold;">import</span> org.generalrelativity.foam.Foam;
	<span style="color: #0033ff; font-weight: bold;">import</span> org.generalrelativity.foam.math.Vector;
	<span style="color: #0033ff; font-weight: bold;">import</span> org.generalrelativity.foam.util.ShapeUtil;
&nbsp;
	<span style="color: #000000;">&#91;</span>SWF<span style="color: #000000;">&#40;</span><span style="color: #004993;">width</span>=<span style="color: #990000;">&quot;300&quot;</span>, <span style="color: #004993;">height</span>=<span style="color: #990000;">&quot;300&quot;</span><span style="color: #000000;">&#41;</span><span style="color: #000000;">&#93;</span>
	<span style="color: #0033ff; font-weight: bold;">public</span> <span style="color: #9900cc; font-weight: bold;">class</span> FoamSample1 extends <span style="color: #004993;">Sprite</span> <span style="color: #000000;">&#123;</span>
&nbsp;
		<span style="color: #0033ff; font-weight: bold;">private</span> const W<span style="color: #000000; font-weight: bold;">:</span><span style="color: #004993;">Number</span> = <span style="color: #000000; font-weight:bold;">300</span>;
		<span style="color: #0033ff; font-weight: bold;">private</span> const H<span style="color: #000000; font-weight: bold;">:</span><span style="color: #004993;">Number</span> = <span style="color: #000000; font-weight:bold;">300</span>;
&nbsp;
		<span style="color: #0033ff; font-weight: bold;">private</span> <span style="color: #6699cc; font-weight: bold;">var</span> foam<span style="color: #000000; font-weight: bold;">:</span>Foam;
&nbsp;
		<span style="color: #0033ff; font-weight: bold;">public</span> <span style="color: #339966; font-weight: bold;">function</span> FoamSample1<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span> <span style="color: #000000;">&#123;</span>
			<span style="color: #004993;">stage</span>.<span style="color: #004993;">scaleMode</span> = <span style="color: #004993;">StageScaleMode</span>.<span style="color: #004993;">NO_SCALE</span>;
			<span style="color: #004993;">stage</span>.<span style="color: #004993;">align</span> = <span style="color: #004993;">StageAlign</span>.<span style="color: #004993;">BOTTOM</span>;
&nbsp;
			<span style="color: #009900;">//FOAMインスタンスの生成</span>
			foam = <span style="color: #0033ff; font-weight: bold;">new</span> Foam<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span>;
			<span style="color: #004993;">addChild</span><span style="color: #000000;">&#40;</span>foam<span style="color: #000000;">&#41;</span>;
&nbsp;
			<span style="color: #009900;">//オブジェクトのドラッグ有効化</span>
			foam.useMouseDragger<span style="color: #000000;">&#40;</span><span style="color: #0033ff; font-weight: bold;">true</span><span style="color: #000000;">&#41;</span>;
&nbsp;
			foam.addGlobalForceGenerator<span style="color: #000000;">&#40;</span><span style="color: #0033ff; font-weight: bold;">new</span> Gravity<span style="color: #000000;">&#40;</span><span style="color: #0033ff; font-weight: bold;">new</span> Vector<span style="color: #000000;">&#40;</span><span style="color: #000000; font-weight:bold;">0</span>, <span style="color: #000000; font-weight:bold;">0.3</span><span style="color: #000000;">&#41;</span><span style="color: #000000;">&#41;</span><span style="color: #000000;">&#41;</span>;
&nbsp;
			<span style="color: #009900;">//circle</span>
			foam.addElement<span style="color: #000000;">&#40;</span><span style="color: #0033ff; font-weight: bold;">new</span> Circle<span style="color: #000000;">&#40;</span><span style="color: #000000; font-weight:bold;">100</span>, <span style="color: #000000; font-weight:bold;">100</span>, <span style="color: #000000; font-weight:bold;">30</span><span style="color: #000000;">&#41;</span><span style="color: #000000;">&#41;</span>;
			foam.addElement<span style="color: #000000;">&#40;</span><span style="color: #0033ff; font-weight: bold;">new</span> Circle<span style="color: #000000;">&#40;</span><span style="color: #000000; font-weight:bold;">200</span>, <span style="color: #000000; font-weight:bold;">100</span>, <span style="color: #000000; font-weight:bold;">30</span><span style="color: #000000;">&#41;</span><span style="color: #000000;">&#41;</span>;
&nbsp;
			<span style="color: #6699cc; font-weight: bold;">var</span> wall_arr<span style="color: #000000; font-weight: bold;">:</span><span style="color: #004993;">Array</span>;
			<span style="color: #009900;">//ground</span>
			wall_arr = ShapeUtil.createRectangle<span style="color: #000000;">&#40;</span>W, <span style="color: #000000; font-weight:bold;">20</span><span style="color: #000000;">&#41;</span>;
			foam.addElement<span style="color: #000000;">&#40;</span><span style="color: #0033ff; font-weight: bold;">new</span> RigidBody<span style="color: #000000;">&#40;</span>W<span style="color: #000000; font-weight: bold;">/</span><span style="color: #000000; font-weight:bold;">2</span>, <span style="color: #000000; font-weight:bold;">0</span>, Simplification.INFINITE_MASS, wall_arr<span style="color: #000000;">&#41;</span><span style="color: #000000;">&#41;</span>;
			foam.addElement<span style="color: #000000;">&#40;</span><span style="color: #0033ff; font-weight: bold;">new</span> RigidBody<span style="color: #000000;">&#40;</span>W<span style="color: #000000; font-weight: bold;">/</span><span style="color: #000000; font-weight:bold;">2</span>, H, Simplification.INFINITE_MASS, wall_arr<span style="color: #000000;">&#41;</span><span style="color: #000000;">&#41;</span>;
			<span style="color: #009900;">//wall</span>
			wall_arr = ShapeUtil.createRectangle<span style="color: #000000;">&#40;</span><span style="color: #000000; font-weight:bold;">20</span>, H<span style="color: #000000;">&#41;</span>;
			foam.addElement<span style="color: #000000;">&#40;</span><span style="color: #0033ff; font-weight: bold;">new</span> RigidBody<span style="color: #000000;">&#40;</span><span style="color: #000000; font-weight:bold;">0</span>, H<span style="color: #000000; font-weight: bold;">/</span><span style="color: #000000; font-weight:bold;">2</span>, Simplification.INFINITE_MASS, wall_arr<span style="color: #000000;">&#41;</span><span style="color: #000000;">&#41;</span>;
			foam.addElement<span style="color: #000000;">&#40;</span><span style="color: #0033ff; font-weight: bold;">new</span> RigidBody<span style="color: #000000;">&#40;</span>W, H<span style="color: #000000; font-weight: bold;">/</span><span style="color: #000000; font-weight:bold;">2</span>, Simplification.INFINITE_MASS, wall_arr<span style="color: #000000;">&#41;</span><span style="color: #000000;">&#41;</span>;
&nbsp;
			foam.simulate<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span>;
		<span style="color: #000000;">&#125;</span>
	<span style="color: #000000;">&#125;</span>
<span style="color: #000000;">&#125;</span></pre></div></div>

]]></content:encoded>
			<wfw:commentRss>http://www.jinten.net/blog/archives/41/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>[AS3]値渡しと参照渡し</title>
		<link>http://www.jinten.net/blog/archives/40</link>
		<comments>http://www.jinten.net/blog/archives/40#comments</comments>
		<pubDate>Mon, 28 Jan 2008 00:40:43 +0000</pubDate>
		<dc:creator>ken</dc:creator>
				<category><![CDATA[ActionScript3.0]]></category>

		<guid isPermaLink="false">http://www.jinten.net/blog/archives/40</guid>
		<description><![CDATA[flashrodさんの記事から、メソッドへの引数の渡し方について。

public function swap&#40;a:Object, b:Object&#41;:void &#123;
    var tmp:Ob [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://d.hatena.ne.jp/flashrod/20080127#1201443331">flashrodさんの記事</a>から、メソッドへの引数の渡し方について。</p>

<div class="wp_syntax"><div class="code"><pre class="actionscript3" style="font-family:monospace;"><span style="color: #0033ff; font-weight: bold;">public</span> <span style="color: #339966; font-weight: bold;">function</span> swap<span style="color: #000000;">&#40;</span>a<span style="color: #000000; font-weight: bold;">:</span><span style="color: #004993;">Object</span>, <span style="color: #004993;">b</span><span style="color: #000000; font-weight: bold;">:</span><span style="color: #004993;">Object</span><span style="color: #000000;">&#41;</span><span style="color: #000000; font-weight: bold;">:</span><span style="color: #0033ff; font-weight: bold;">void</span> <span style="color: #000000;">&#123;</span>
    <span style="color: #6699cc; font-weight: bold;">var</span> tmp<span style="color: #000000; font-weight: bold;">:</span><span style="color: #004993;">Object</span> = a;
    a = <span style="color: #004993;">b</span>;
    <span style="color: #004993;">b</span> = tmp;
<span style="color: #000000;">&#125;</span></pre></div></div>

<p>こんなメソッドを定義して、</p>

<div class="wp_syntax"><div class="code"><pre class="actionscript3" style="font-family:monospace;"><span style="color: #6699cc; font-weight: bold;">var</span> a<span style="color: #000000; font-weight: bold;">:</span><span style="color: #004993;">Object</span> = <span style="color: #000000;">&#123;</span>
    <span style="color: #004993;">value</span><span style="color: #000000; font-weight: bold;">:</span> <span style="color: #990000;">&quot;abc&quot;</span>,
    <span style="color: #004993;">toString</span><span style="color: #000000; font-weight: bold;">:</span> <span style="color: #339966; font-weight: bold;">function</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span><span style="color: #000000; font-weight: bold;">:</span><span style="color: #004993;">String</span> <span style="color: #000000;">&#123;</span> <span style="color: #0033ff; font-weight: bold;">return</span> <span style="color: #0033ff; font-weight: bold;">this</span>.<span style="color: #004993;">value</span>; <span style="color: #000000;">&#125;</span>
<span style="color: #000000;">&#125;</span>;
<span style="color: #6699cc; font-weight: bold;">var</span> <span style="color: #004993;">b</span><span style="color: #000000; font-weight: bold;">:</span><span style="color: #004993;">Object</span> = <span style="color: #000000;">&#123;</span>
    <span style="color: #004993;">value</span><span style="color: #000000; font-weight: bold;">:</span> <span style="color: #990000;">&quot;xyz&quot;</span>,
    <span style="color: #004993;">toString</span><span style="color: #000000; font-weight: bold;">:</span> <span style="color: #339966; font-weight: bold;">function</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span><span style="color: #000000; font-weight: bold;">:</span><span style="color: #004993;">String</span> <span style="color: #000000;">&#123;</span> <span style="color: #0033ff; font-weight: bold;">return</span> <span style="color: #0033ff; font-weight: bold;">this</span>.<span style="color: #004993;">value</span>; <span style="color: #000000;">&#125;</span>
<span style="color: #000000;">&#125;</span>;
swap<span style="color: #000000;">&#40;</span>a, <span style="color: #004993;">b</span><span style="color: #000000;">&#41;</span>;
<span style="color: #004993;">trace</span><span style="color: #000000;">&#40;</span><span style="color: #990000;">&quot;a=&quot;</span>, a<span style="color: #000000;">&#41;</span>;
<span style="color: #004993;">trace</span><span style="color: #000000;">&#40;</span><span style="color: #990000;">&quot;b=&quot;</span>, <span style="color: #004993;">b</span><span style="color: #000000;">&#41;</span>;</pre></div></div>

<p>こんな感じで実行しても、</p>

<div class="wp_syntax"><div class="code"><pre class="actionscript3" style="font-family:monospace;">a= xyz
<span style="color: #004993;">b</span>= abc</pre></div></div>

<p>こうならない。というお話。</p>
<p>ならないだろうとわかってはいるんですが、<br />
言われてみれば参照渡しと言うならできるはず。<br />
こういうところで説明ができない時点で、<br />
なんとなく感覚でやってしまってるんだろうなぁ、と反省しなくては･･･。</p>
<p>結論としては、俗に言う「参照の値渡し」というやつなんですね。</p>
<p>C/C++で書くなら、</p>

<div class="wp_syntax"><div class="code"><pre class="c" style="font-family:monospace;"><span style="color: #339933;">#include &lt;stdio .h&gt;</span>
&nbsp;
<span style="color: #993333;">void</span> swap<span style="color: #009900;">&#40;</span><span style="color: #993333;">int</span><span style="color: #339933;">*</span> a<span style="color: #339933;">,</span> <span style="color: #993333;">int</span><span style="color: #339933;">*</span> b<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
	<span style="color: #993333;">int</span><span style="color: #339933;">*</span> tmp <span style="color: #339933;">=</span> a<span style="color: #339933;">;</span>
	a <span style="color: #339933;">=</span> b<span style="color: #339933;">;</span>
	b <span style="color: #339933;">=</span> a<span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #993333;">int</span> main<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
	<span style="color: #993333;">int</span> a <span style="color: #339933;">=</span> <span style="color: #0000dd;">1</span><span style="color: #339933;">;</span>
	<span style="color: #993333;">int</span> b <span style="color: #339933;">=</span> <span style="color: #0000dd;">2</span><span style="color: #339933;">;</span>
&nbsp;
	<span style="color: #000066;">printf</span><span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;a=%d b=%d<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #339933;">,</span> a<span style="color: #339933;">,</span> b<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	swap<span style="color: #009900;">&#40;</span><span style="color: #339933;">&amp;</span>a<span style="color: #339933;">,</span> <span style="color: #339933;">&amp;</span>b<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #000066;">printf</span><span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;a=%d b=%d<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #339933;">,</span> a<span style="color: #339933;">,</span> b<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
  <span style="color: #b1b100;">return</span> <span style="color: #0000dd;">0</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span><span style="color: #339933;">&lt;/</span>stdio<span style="color: #339933;">&gt;</span></pre></div></div>

<p>と、まぁ参照というより、ポインタ使ってるっぽい感じのイメージでいいんですかね。多分。<br />
とりあえず、自分的には理解できてすっきり。</p>
<p>細かい言葉のあやみたいなところではあるんですが、<br />
いつかこういったささいな部分ではまって、時間を無駄にするかもしれないし。<br />
勉強になりました。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.jinten.net/blog/archives/40/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>[AS3]3d物理エンジン</title>
		<link>http://www.jinten.net/blog/archives/38</link>
		<comments>http://www.jinten.net/blog/archives/38#comments</comments>
		<pubDate>Wed, 23 Jan 2008 12:23:51 +0000</pubDate>
		<dc:creator>ken</dc:creator>
				<category><![CDATA[ASライブラリ]]></category>
		<category><![CDATA[ActionScript3.0]]></category>

		<guid isPermaLink="false">http://www.jinten.net/blog/archives/38</guid>
		<description><![CDATA[ずいぶん前からその存在は知っていたんですが、
最近やっと出たみたいですね。
AS3 3D Physics Engine : WOW-Engine
ということで、早速触ってみたんですが･･･。
情報が少ない！わからないこと [...]]]></description>
			<content:encoded><![CDATA[<p>ずいぶん前からその存在は知っていたんですが、<br />
最近やっと出たみたいですね。</p>
<p><a href="http://seraf.mediabox.fr/wow-engine/as3-3d-physics-engine-wow-engine/">AS3 3D Physics Engine : WOW-Engine</a></p>
<p>ということで、早速触ってみたんですが･･･。<br />
情報が少ない！わからないことばかり。</p>
<p>とりあえず今日は習作ということで。</p>
<p><a href="http://www.jinten.net/samples/wow_sample1.html" title='スクリーンショット'><img src='http://www.jinten.net/blog/wp-content/uploads/2008/01/screenshot.png' alt='スクリーンショット' />デモ</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.jinten.net/blog/archives/38/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>[pv3d]初めてのPaperVision3D(2)</title>
		<link>http://www.jinten.net/blog/archives/35</link>
		<comments>http://www.jinten.net/blog/archives/35#comments</comments>
		<pubDate>Tue, 22 Jan 2008 07:37:32 +0000</pubDate>
		<dc:creator>ken</dc:creator>
				<category><![CDATA[ASライブラリ]]></category>
		<category><![CDATA[ActionScript3.0]]></category>
		<category><![CDATA[papervision]]></category>

		<guid isPermaLink="false">http://www.jinten.net/blog/archives/35</guid>
		<description><![CDATA[今回も引き続き
pv3d 2.0 tutorial list[pv3d.org]から。
前回でPaperVision3Dで3D描画を行うための世界は整っているので、
今回はその世界に3Dオブジェクトを追加して表示してみま [...]]]></description>
			<content:encoded><![CDATA[<p>今回も引き続き<br />
<a href="http://pv3d.org/pv3d-20-tutorial-list/">pv3d 2.0 tutorial list[pv3d.org]</a>から。</p>
<p>前回でPaperVision3Dで3D描画を行うための世界は整っているので、<br />
今回はその世界に3Dオブジェクトを追加して表示してみます。<br />
と、いってもチュートリアルの通りに進めたところ、すごく簡単でした。</p>

<div class="wp_syntax"><div class="code"><pre class="actionscript3" style="font-family:monospace;"><span style="color: #6699cc; font-weight: bold;">var</span> material<span style="color: #000000; font-weight: bold;">:</span>ColorMaterial = <span style="color: #0033ff; font-weight: bold;">new</span> ColorMaterial<span style="color: #000000;">&#40;</span>col, <span style="color: #000000; font-weight:bold;">0.9</span><span style="color: #000000;">&#41;</span>;
material.doubleSided = <span style="color: #0033ff; font-weight: bold;">true</span>;
&nbsp;
<span style="color: #6699cc; font-weight: bold;">var</span> plane<span style="color: #000000; font-weight: bold;">:</span>Plane = <span style="color: #0033ff; font-weight: bold;">new</span> Plane<span style="color: #000000;">&#40;</span>material<span style="color: #000000;">&#41;</span>;
scene.<span style="color: #004993;">addChild</span><span style="color: #000000;">&#40;</span>plane<span style="color: #000000;">&#41;</span>;</pre></div></div>

<p>こんな感じで、<br />
ColorMaterialのインスタンスを生成します。<br />
これが、「面」になるようで、ColorMaterialは、色の付いた面になるようです。</p>

<div class="wp_syntax"><div class="code"><pre class="actionscript3" style="font-family:monospace;">material.doubleSided = <span style="color: #0033ff; font-weight: bold;">true</span>;</pre></div></div>

<p>この部分では、面の裏側も色を塗ることを指定しています。<br />
この指定をしないと片面しか色を塗ってくれないようです。</p>
<p>Planeクラスは「平面」です。<br />
Planeクラスに先ほどの「面」を引数にして生成した後、シーンにaddChildします。</p>
<p>これで、3D空間へ平面を置くことができました。</p>
<p>Planeクラスのyawメソッドなどを呼ぶと平面を回転してくれます。<br />
どのメソッドでどのように回転するかなどは、チュートリアルのサイトの、<br />
<a href="http://pv3d.org/2007/12/21/basic-movement-explorer/">3d Object Movement Explorer</a>のページが参考になります。</p>
<p>平面の回転や移動等をしつつ、<br />
<a href="http://www.jinten.net/blog/archives/34">前回のソースコードサンプル</a>のようにEnterFrameイベントのリスナーで、<br />
renderer.renderSceneメソッドを呼べば、<br />
3Dの表示&#038;ちょっとしたアニメーションまで完成です。</p>
<p><a href='http://www.jinten.net/samples/pv3d_sample.html' title='demo'><br />
<img src="http://www.jinten.net/blog/wp-content/uploads/2008/01/pv3d_sample1.png" alt="スクリーンショット" /><br />
<br clear="left"/>デモ<br />
</a></p>
<p>ちなみに、全然関係ないんですが、今回参考にしたサイトの、<br />
<a href="http://pv3d.org/2008/01/06/7-basic-interactivity/">7. Basic Interactivity</a>で、</p>
<blockquote><p>When starting out with pv3d, many as3 <strong>ninjas</strong> don’t realize you need to enable interactivity in the viewport and the material before being able to listen to the various click events. </p></blockquote>
<p>ninjasって･･･忍者？忍者ってこんな自然に文章に混ざっても、英語圏で通じるレベルなのかぁ。ちょっと感動です。</p>
<p>とりあえず、チュートリアルそのままではアレなので少しだけ変えて、<br />
今回のソースコードも公開。</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
</pre></td><td class="code"><pre class="actionscript" style="font-family:monospace;"><span style="color: #808080; font-style: italic;">/**
* PaperVision3D sample
* @author jinten.net
*/</span>
package <span style="color: #66cc66;">&#123;</span>
	<span style="color: #0066CC;">import</span> flash.<span style="color: #006600;">display</span>.<span style="color: #006600;">Sprite</span>;
	<span style="color: #0066CC;">import</span> flash.<span style="color: #006600;">events</span>.<span style="color: #006600;">Event</span>;
	<span style="color: #0066CC;">import</span> org.<span style="color: #006600;">papervision3d</span>.<span style="color: #006600;">cameras</span>.<span style="color: #006600;">Camera3D</span>;
	<span style="color: #0066CC;">import</span> org.<span style="color: #006600;">papervision3d</span>.<span style="color: #006600;">cameras</span>.<span style="color: #006600;">FreeCamera3D</span>;
	<span style="color: #0066CC;">import</span> org.<span style="color: #006600;">papervision3d</span>.<span style="color: #006600;">materials</span>.<span style="color: #006600;">ColorMaterial</span>;
	<span style="color: #0066CC;">import</span> org.<span style="color: #006600;">papervision3d</span>.<span style="color: #006600;">objects</span>.<span style="color: #006600;">primitives</span>.<span style="color: #006600;">Plane</span>;
	<span style="color: #0066CC;">import</span> org.<span style="color: #006600;">papervision3d</span>.<span style="color: #006600;">render</span>.<span style="color: #006600;">BasicRenderEngine</span>;
	<span style="color: #0066CC;">import</span> org.<span style="color: #006600;">papervision3d</span>.<span style="color: #006600;">scenes</span>.<span style="color: #006600;">Scene3D</span>;
	<span style="color: #0066CC;">import</span> org.<span style="color: #006600;">papervision3d</span>.<span style="color: #006600;">view</span>.<span style="color: #006600;">Viewport3D</span>;
&nbsp;
	<span style="color: #66cc66;">&#91;</span>SWF<span style="color: #66cc66;">&#40;</span><span style="color: #0066CC;">backgroundColor</span> = <span style="color: #ff0000;">&quot;#FFFFFF&quot;</span>, <span style="color: #0066CC;">width</span>=<span style="color: #ff0000;">&quot;400&quot;</span>, <span style="color: #0066CC;">height</span>=<span style="color: #ff0000;">&quot;300&quot;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#93;</span>
&nbsp;
	<span style="color: #0066CC;">public</span> <span style="color: #000000; font-weight: bold;">class</span> pv3d_sample1 <span style="color: #0066CC;">extends</span> Sprite <span style="color: #66cc66;">&#123;</span>
&nbsp;
		<span style="color: #0066CC;">private</span> <span style="color: #000000; font-weight: bold;">var</span> scene:Scene3D;
&nbsp;
		<span style="color: #0066CC;">private</span> <span style="color: #000000; font-weight: bold;">var</span> viewport:Viewport3D;
		<span style="color: #0066CC;">private</span> <span style="color: #000000; font-weight: bold;">var</span> <span style="color: #0066CC;">camera</span>:Camera3D;
&nbsp;
		<span style="color: #0066CC;">private</span> <span style="color: #000000; font-weight: bold;">var</span> renderer:BasicRenderEngine;
&nbsp;
		<span style="color: #0066CC;">private</span> <span style="color: #000000; font-weight: bold;">var</span> planes:<span style="color: #0066CC;">Array</span> = <span style="color: #000000; font-weight: bold;">new</span> <span style="color: #0066CC;">Array</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;
&nbsp;
		<span style="color: #0066CC;">public</span> <span style="color: #000000; font-weight: bold;">function</span> pv3d_sample1<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span>
			init<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;
		<span style="color: #66cc66;">&#125;</span>
&nbsp;
		<span style="color: #0066CC;">private</span> <span style="color: #000000; font-weight: bold;">function</span> init<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">void</span> <span style="color: #66cc66;">&#123;</span>
			scene = <span style="color: #000000; font-weight: bold;">new</span> Scene3D<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;
&nbsp;
			initObjects<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;
&nbsp;
			viewport = <span style="color: #000000; font-weight: bold;">new</span> Viewport3D<span style="color: #66cc66;">&#40;</span><span style="color: #cc66cc;">400</span>, <span style="color: #cc66cc;">300</span><span style="color: #66cc66;">&#41;</span>;
&nbsp;
			<span style="color: #0066CC;">camera</span> = <span style="color: #000000; font-weight: bold;">new</span> Camera3D<span style="color: #66cc66;">&#40;</span>planes<span style="color: #66cc66;">&#91;</span><span style="color: #cc66cc;">0</span><span style="color: #66cc66;">&#93;</span><span style="color: #66cc66;">&#41;</span>;
&nbsp;
			renderer = <span style="color: #000000; font-weight: bold;">new</span> BasicRenderEngine<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;
&nbsp;
			addChild<span style="color: #66cc66;">&#40;</span>viewport<span style="color: #66cc66;">&#41;</span>;
&nbsp;
			addEventListener<span style="color: #66cc66;">&#40;</span>Event.<span style="color: #006600;">ENTER_FRAME</span>, enterFrameHandler<span style="color: #66cc66;">&#41;</span>;
		<span style="color: #66cc66;">&#125;</span>
&nbsp;
		<span style="color: #0066CC;">private</span> <span style="color: #000000; font-weight: bold;">function</span> enterFrameHandler<span style="color: #66cc66;">&#40;</span><span style="color: #0066CC;">e</span>:Event<span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">void</span> <span style="color: #66cc66;">&#123;</span>
			<span style="color: #b1b100;">for</span> <span style="color: #66cc66;">&#40;</span><span style="color: #000000; font-weight: bold;">var</span> i:<span style="color: #0066CC;">int</span> = <span style="color: #cc66cc;">0</span>; i <span style="color: #66cc66;">&lt;</span> planes.<span style="color: #0066CC;">length</span>; i++<span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span>
				planes<span style="color: #66cc66;">&#91;</span>i<span style="color: #66cc66;">&#93;</span>.<span style="color: #006600;">yaw</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#40;</span>i<span style="color: #66cc66;">%</span>2==<span style="color: #cc66cc;">0</span>?<span style="color: #cc66cc;">2</span>:-<span style="color: #cc66cc;">2</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>;
			<span style="color: #66cc66;">&#125;</span>
			<span style="color: #0066CC;">camera</span>.<span style="color: #006600;">x</span> = mouseX;
			<span style="color: #0066CC;">camera</span>.<span style="color: #006600;">y</span> = mouseY;
&nbsp;
			renderer.<span style="color: #006600;">renderScene</span><span style="color: #66cc66;">&#40;</span>scene, <span style="color: #0066CC;">camera</span>, viewport<span style="color: #66cc66;">&#41;</span>;
		<span style="color: #66cc66;">&#125;</span>
&nbsp;
		<span style="color: #0066CC;">private</span> <span style="color: #000000; font-weight: bold;">function</span> initObjects<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">void</span> <span style="color: #66cc66;">&#123;</span>
			planes.<span style="color: #0066CC;">push</span><span style="color: #66cc66;">&#40;</span>makePlane<span style="color: #66cc66;">&#40;</span>0xFF6666, <span style="color: #cc66cc;">0</span>, <span style="color: #cc66cc;">0</span>, <span style="color: #cc66cc;">0</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>;
			planes.<span style="color: #0066CC;">push</span><span style="color: #66cc66;">&#40;</span>makePlane<span style="color: #66cc66;">&#40;</span>0x66FF66, <span style="color: #cc66cc;">400</span>, <span style="color: #cc66cc;">0</span>, <span style="color: #cc66cc;">0</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>;
			planes.<span style="color: #0066CC;">push</span><span style="color: #66cc66;">&#40;</span>makePlane<span style="color: #66cc66;">&#40;</span>0x6666FF, -<span style="color: #cc66cc;">400</span>, <span style="color: #cc66cc;">0</span>, <span style="color: #cc66cc;">0</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>;
			planes.<span style="color: #0066CC;">push</span><span style="color: #66cc66;">&#40;</span>makePlane<span style="color: #66cc66;">&#40;</span>0xFFFF66, <span style="color: #cc66cc;">0</span>, <span style="color: #cc66cc;">400</span>, <span style="color: #cc66cc;">0</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>;
			planes.<span style="color: #0066CC;">push</span><span style="color: #66cc66;">&#40;</span>makePlane<span style="color: #66cc66;">&#40;</span>0x66FFFF, <span style="color: #cc66cc;">0</span>, -<span style="color: #cc66cc;">400</span>, <span style="color: #cc66cc;">0</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>;
			planes.<span style="color: #0066CC;">push</span><span style="color: #66cc66;">&#40;</span>makePlane<span style="color: #66cc66;">&#40;</span>0xFF66FF, <span style="color: #cc66cc;">0</span>, <span style="color: #cc66cc;">0</span>, <span style="color: #cc66cc;">400</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>;
			planes.<span style="color: #0066CC;">push</span><span style="color: #66cc66;">&#40;</span>makePlane<span style="color: #66cc66;">&#40;</span>0x666666, <span style="color: #cc66cc;">0</span>, <span style="color: #cc66cc;">0</span>, -<span style="color: #cc66cc;">400</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>;
		<span style="color: #66cc66;">&#125;</span>
&nbsp;
		<span style="color: #0066CC;">private</span> <span style="color: #000000; font-weight: bold;">function</span> makePlane<span style="color: #66cc66;">&#40;</span>col:uint, x:<span style="color: #0066CC;">Number</span>, y:<span style="color: #0066CC;">Number</span>, z:<span style="color: #0066CC;">Number</span><span style="color: #66cc66;">&#41;</span>:Plane <span style="color: #66cc66;">&#123;</span>
			<span style="color: #000000; font-weight: bold;">var</span> material:ColorMaterial = <span style="color: #000000; font-weight: bold;">new</span> ColorMaterial<span style="color: #66cc66;">&#40;</span>col, <span style="color: #cc66cc;">0.9</span><span style="color: #66cc66;">&#41;</span>;
			material.<span style="color: #006600;">doubleSided</span> = <span style="color: #000000; font-weight: bold;">true</span>;
&nbsp;
			<span style="color: #000000; font-weight: bold;">var</span> plane:Plane = <span style="color: #000000; font-weight: bold;">new</span> Plane<span style="color: #66cc66;">&#40;</span>material, <span style="color: #cc66cc;">300</span>, <span style="color: #cc66cc;">300</span><span style="color: #66cc66;">&#41;</span>;
			plane.<span style="color: #006600;">x</span> = x;
			plane.<span style="color: #006600;">y</span> = y;
			plane.<span style="color: #006600;">z</span> = z;
			scene.<span style="color: #006600;">addChild</span><span style="color: #66cc66;">&#40;</span>plane<span style="color: #66cc66;">&#41;</span>;
			<span style="color: #b1b100;">return</span> plane;
		<span style="color: #66cc66;">&#125;</span>
	<span style="color: #66cc66;">&#125;</span>
<span style="color: #66cc66;">&#125;</span></pre></td></tr></table></div>

</pre>
]]></content:encoded>
			<wfw:commentRss>http://www.jinten.net/blog/archives/35/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>[Flex]コンポーネントのサイズがゼロになる？</title>
		<link>http://www.jinten.net/blog/archives/36</link>
		<comments>http://www.jinten.net/blog/archives/36#comments</comments>
		<pubDate>Sat, 19 Jan 2008 10:59:04 +0000</pubDate>
		<dc:creator>ken</dc:creator>
				<category><![CDATA[ActionScript3.0]]></category>
		<category><![CDATA[Flex]]></category>

		<guid isPermaLink="false">http://www.jinten.net/blog/archives/36</guid>
		<description><![CDATA[Frog on AIRさんのサイトで、こんな記事がありました。
オブジェクトのサイズを取得できない(AIR β2/β3)
記事の内容は、mx.controls.Butttonのインスタンスを生成した直後に、widthとh [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://homepage.mac.com/daoki2/index.html">Frog on AIR</a>さんのサイトで、こんな記事がありました。</p>
<blockquote><p><a href="http://homepage.mac.com/daoki2/tips/tips100.html">オブジェクトのサイズを取得できない(AIR β2/β3)</a></p></blockquote>
<p>記事の内容は、mx.controls.Butttonのインスタンスを生成した直後に、widthとheightの値を確認すると0になってしまう。というようなものです。</p>
<p>実際僕も何か作っているとき、同じような状況を何度も経験しました。<br />
ホント大ハマリして、何時間も費やしたり･･･。<br />
自分の備忘録も兼ねて、少しこのあたりを書き残しておきます。</p>
<p><strong>クラスの種類</strong><br />
<a href="http://livedocs.adobe.com/flex/201_jp/langref/">Flex2のリファレンス</a>で説明されているクラスの中には、<br />
純粋なActionScript3.0のクラスとFlex2のクラスの2種類があります。</p>
<p>純粋なActionScript3.0のクラスとは、<br />
Array、Number、SpriteやTextFieldなどのクラスで、<br />
importするときのクラスパスが、flash.~のものです。</p>
<p>対して、Flex2のクラスとは、<br />
UIComponent、Button、Alert、PopUpManagerなどなど、<br />
importするときのクラスパスが、mx.~のものです。</p>
<p>純粋なActionScript3.0のクラスというのは、<br />
ActionScript3.0という言語でプログラミングをする場合には基本的に使えるクラスで、<br />
FlexBuilder2でもFlashCS3でも使えるはずです。<br />
一方Flex2のクラスというのは、<br />
上記純粋なActionScript3.0のクラスを拡張(継承)したクラスで、<br />
Flex2SDKのコンパイラでは一緒に提供されているだけです。<br />
Flex2のクラスというのは、つまり、ActionScript3.0でプログラムする場合に、<br />
使用できるオプション的なクラス郡になります。</p>
<p>例えばButtonクラスならSpriteを継承したクラスFlexSprite、<br />
をさらに継承したUIComponentクラス、<br />
をさらに継承したものがButtonクラスです。</p>
<p><strong>Flex2のクラス</strong><br />
Flex2のクラスはFlexフレームワーク上で動作することを前提に作成されています。<br />
つまりいくつかのフレームワークのルールに従う必要があるということです。</p>
<p>このルールのひとつとしてFlex2フレームワークを用いる場合には、<br />
多くの便利なビジュアルコンポーネントを利用できるようになる代わりに、<br />
独自のDisplayObjectを表示させたい場合には、<br />
UIComponentクラスを継承しなければならないというルールがあります。<br />
(IUIComponentインターフェースでもいいのかな･･・？)</p>
<p>UIComponentクラスでは、<br />
コンストラクタでは最低限のプロパティとイベントリスナの初期化しか行いません。<br />
(このため、インスタンス生成直後にはwidthなどは0になります。)<br />
コンポーネントがDisplayObjectのツリー上にaddChildされるたあと<br />
initialize()メソッドが呼ばれ、描画に必要なプロパティの一部がセットされます。<br />
その後、実際に描画されるタイミングでupdateDisplayListというメソッドで、<br />
レイアウトやサイズ等の値が計算され(ここでwidth等の値が確定します)、描画されます。<br />
もちろんaddChildメソッドもoverrideして、子DisplayObjectを自身に追加する際には、<br />
子DisplayObjectのinitializeメソッドを呼び出すようにしてあります。</p>
<p>と、いうことで一番初めのButtonクラス生成直後にwidth、heightの値が0となる件にやっと繋がりました。Flex2のDisplayObject系のクラスでは、処理の無駄を省くため、プロパティ実際のビジュアル部分のレイアウトやサイズ等の計算は次の描画タイミング時まで保留されます。そのため、すぐにwidthやheightの値を取得することができません。</p>
<p>以下、対応策の案としては、</p>
<p><strong>1.Flex2のクラスを使わない</strong><br />
元も子もないですが、使わないというのも一手ですよね。<br />
全部flashパッケージ内から賄い、足りない部分は自分で作る、と。<br />
ボタンくらいだったら、SimpleButtonクラスでも十分なことも多いです。</p>
<p><strong>2.callLaterメソッド</strong><br />
UIComponentクラスで定義されているcallLaterメソッドを使います。<br />
(参考：<a href="http://livedocs.adobe.com/flex/2_jp/docs/wwhelp/wwhimpl/common/html/wwhelp.htm?context=LiveDocs_Parts&#038;file=00001438.html">callLaterメソッドの使用</a>)</p>
<blockquote><p>callLater() メソッドは、現在の更新ではなく、次の画面更新で実行する処理をキューに格納します。</p></blockquote>
<p>つまりcallLater(hogeMethod)を用いることで、<br />
コンポーネントが描画される(描画用のレイアウト・サイズ計算処理などが終了した)ときに<br />
hogeMethodが呼ばれるので、widthなどの値を取得することができます。</p>
<p>今回のように初期化時だけであれば、<br />
creationCompleteイベントをハンドルしても良いかもしれませんね。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.jinten.net/blog/archives/36/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>[pv3d]初めてのPaperVision3D(1)</title>
		<link>http://www.jinten.net/blog/archives/34</link>
		<comments>http://www.jinten.net/blog/archives/34#comments</comments>
		<pubDate>Thu, 10 Jan 2008 05:47:11 +0000</pubDate>
		<dc:creator>ken</dc:creator>
				<category><![CDATA[ASライブラリ]]></category>
		<category><![CDATA[ActionScript3.0]]></category>
		<category><![CDATA[papervision]]></category>

		<guid isPermaLink="false">http://www.jinten.net/blog/archives/34</guid>
		<description><![CDATA[少し時間もあったので、最近流行のPaperVision3Dに手を出してみました。
で、3Dとかさっぱりわからないのですが、とにかく触ってれば、
必要に迫られて色々知識も増えていくだろうということでひとまず参考にしたサイト [...]]]></description>
			<content:encoded><![CDATA[<p>少し時間もあったので、最近流行のPaperVision3Dに手を出してみました。</p>
<p>で、3Dとかさっぱりわからないのですが、とにかく触ってれば、<br />
必要に迫られて色々知識も増えていくだろうということでひとまず参考にしたサイトはこちら。<br />
<a href="http://pv3d.org/pv3d-20-tutorial-list/">pv3d 2.0 tutorial list[pv3d.org]</a></p>
<p>まだ途中みたいですが、チュートリアルになってます。<br />
順に進めていくと、PaperVision3Dでの基本部分のコードの書き方がわかります。</p>
<p>まずは、3Dな世界の構築部分です。<br />
最低限必要なインスタンスは4種類。まずは、インスタンスを生成します。</p>

<div class="wp_syntax"><div class="code"><pre class="actionscript" style="font-family:monospace;">viewport = <span style="color: #000000; font-weight: bold;">new</span> Viewport3D<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;
scene = <span style="color: #000000; font-weight: bold;">new</span> Scene3D<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;
<span style="color: #0066CC;">camera</span> = <span style="color: #000000; font-weight: bold;">new</span> FreeCamera3D<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;
renderer = <span style="color: #000000; font-weight: bold;">new</span> BasicRenderEngine<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;</pre></div></div>

<p>ちなみにScene3DクラスはSceneObject3Dのサブクラス、<br />
FreeCamera3DはCameraObject3Dのサブクラスです。<br />
シーンやカメラには他にも種類があるようですが、<br />
今回は参考にしたサイトで使っていたクラスをそのままです。</p>
<p>続いてViewport3DのインスタンスをaddChildに渡します。</p>

<div class="wp_syntax"><div class="code"><pre class="actionscript" style="font-family:monospace;">addChild<span style="color: #66cc66;">&#40;</span>viewport<span style="color: #66cc66;">&#41;</span>;</pre></div></div>

<p>これで、描画ツリーに3D世界を追加完了。</p>
<p>最後にBasicRenderEngine.rendererメソッドを呼べば描画されます。</p>

<div class="wp_syntax"><div class="code"><pre class="actionscript" style="font-family:monospace;">renderer.<span style="color: #006600;">renderScene</span><span style="color: #66cc66;">&#40;</span>scene, <span style="color: #0066CC;">camera</span>, viewport<span style="color: #66cc66;">&#41;</span>;</pre></div></div>

<p>このとき、scene、camera、viewportの各インスタンスを渡してあげます。</p>
<p>これだけ。</p>
<p>簡単ですね。</p>
<p>まだ3Dオブジェクトを何も置いていないので、何も表示されませんが、<br />
とりあえず今回はテンプレート的にソースコードを出しつつ今日はココまで。</p>
<p>コード全体は以下。</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
</pre></td><td class="code"><pre class="actionscript" style="font-family:monospace;"><span style="color: #808080; font-style: italic;">/**
* PaperVision3D sample
* @author jinten.net
*/</span>
package <span style="color: #66cc66;">&#123;</span>
	<span style="color: #0066CC;">import</span> flash.<span style="color: #006600;">display</span>.<span style="color: #006600;">Sprite</span>;
	<span style="color: #0066CC;">import</span> flash.<span style="color: #006600;">events</span>.<span style="color: #006600;">Event</span>;
	<span style="color: #0066CC;">import</span> org.<span style="color: #006600;">papervision3d</span>.<span style="color: #006600;">cameras</span>.<span style="color: #006600;">FreeCamera3D</span>;
	<span style="color: #0066CC;">import</span> org.<span style="color: #006600;">papervision3d</span>.<span style="color: #006600;">render</span>.<span style="color: #006600;">BasicRenderEngine</span>;
	<span style="color: #0066CC;">import</span> org.<span style="color: #006600;">papervision3d</span>.<span style="color: #006600;">scenes</span>.<span style="color: #006600;">Scene3D</span>;
	<span style="color: #0066CC;">import</span> org.<span style="color: #006600;">papervision3d</span>.<span style="color: #006600;">view</span>.<span style="color: #006600;">Viewport3D</span>;
&nbsp;
	<span style="color: #66cc66;">&#91;</span>SWF<span style="color: #66cc66;">&#40;</span><span style="color: #0066CC;">backgroundColor</span> = <span style="color: #ff0000;">&quot;#FFFFFF&quot;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#93;</span>
&nbsp;
	<span style="color: #0066CC;">public</span> <span style="color: #000000; font-weight: bold;">class</span> pv3d_sample1 <span style="color: #0066CC;">extends</span> Sprite <span style="color: #66cc66;">&#123;</span>
&nbsp;
		<span style="color: #0066CC;">private</span> <span style="color: #000000; font-weight: bold;">var</span> viewport:Viewport3D;
		<span style="color: #0066CC;">private</span> <span style="color: #000000; font-weight: bold;">var</span> scene:Scene3D;
		<span style="color: #0066CC;">private</span> <span style="color: #000000; font-weight: bold;">var</span> <span style="color: #0066CC;">camera</span>:FreeCamera3D;
		<span style="color: #0066CC;">private</span> <span style="color: #000000; font-weight: bold;">var</span> renderer:BasicRenderEngine;
&nbsp;
		<span style="color: #0066CC;">public</span> <span style="color: #000000; font-weight: bold;">function</span> pv3d_sample1<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span>
			init<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;
		<span style="color: #66cc66;">&#125;</span>
&nbsp;
		<span style="color: #0066CC;">private</span> <span style="color: #000000; font-weight: bold;">function</span> init<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">void</span> <span style="color: #66cc66;">&#123;</span>
			viewport = <span style="color: #000000; font-weight: bold;">new</span> Viewport3D<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;
			scene = <span style="color: #000000; font-weight: bold;">new</span> Scene3D<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;
			<span style="color: #0066CC;">camera</span> = <span style="color: #000000; font-weight: bold;">new</span> FreeCamera3D<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;
			renderer = <span style="color: #000000; font-weight: bold;">new</span> BasicRenderEngine<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;
&nbsp;
			addChild<span style="color: #66cc66;">&#40;</span>viewport<span style="color: #66cc66;">&#41;</span>;
			addEventListener<span style="color: #66cc66;">&#40;</span>Event.<span style="color: #006600;">ENTER_FRAME</span>, enterFrameHandler<span style="color: #66cc66;">&#41;</span>;
		<span style="color: #66cc66;">&#125;</span>
&nbsp;
		<span style="color: #0066CC;">private</span> <span style="color: #000000; font-weight: bold;">function</span> enterFrameHandler<span style="color: #66cc66;">&#40;</span><span style="color: #0066CC;">e</span>:Event<span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">void</span> <span style="color: #66cc66;">&#123;</span>
			renderer.<span style="color: #006600;">renderScene</span><span style="color: #66cc66;">&#40;</span>scene, <span style="color: #0066CC;">camera</span>, viewport<span style="color: #66cc66;">&#41;</span>;
		<span style="color: #66cc66;">&#125;</span>
	<span style="color: #66cc66;">&#125;</span>
<span style="color: #66cc66;">&#125;</span></pre></td></tr></table></div>

]]></content:encoded>
			<wfw:commentRss>http://www.jinten.net/blog/archives/34/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
