<?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>nouv.labo &#187; ActionScript3</title>
	<atom:link href="http://nouv.biz/wp/category/actionscript3-0/feed/" rel="self" type="application/rss+xml" />
	<link>http://nouv.biz/wp</link>
	<description>nouv.biz 代表の戯言</description>
	<lastBuildDate>Sat, 05 Nov 2022 10:11:22 +0000</lastBuildDate>
	<language>ja</language>
		<sy:updatePeriod>hourly</sy:updatePeriod>
		<sy:updateFrequency>1</sy:updateFrequency>
	<generator>https://wordpress.org/?v=3.9.40</generator>
	<item>
		<title>フレームレートとパフォーマンスモニタについて</title>
		<link>http://nouv.biz/wp/2012/10/06/%e3%83%95%e3%83%ac%e3%83%bc%e3%83%a0%e3%83%ac%e3%83%bc%e3%83%88%e3%81%a8%e3%83%91%e3%83%95%e3%82%a9%e3%83%bc%e3%83%9e%e3%83%b3%e3%82%b9%e3%83%a2%e3%83%8b%e3%82%bf%e3%81%ab%e3%81%a4%e3%81%84%e3%81%a6/</link>
		<comments>http://nouv.biz/wp/2012/10/06/%e3%83%95%e3%83%ac%e3%83%bc%e3%83%a0%e3%83%ac%e3%83%bc%e3%83%88%e3%81%a8%e3%83%91%e3%83%95%e3%82%a9%e3%83%bc%e3%83%9e%e3%83%b3%e3%82%b9%e3%83%a2%e3%83%8b%e3%82%bf%e3%81%ab%e3%81%a4%e3%81%84%e3%81%a6/#comments</comments>
		<pubDate>Sat, 06 Oct 2012 10:25:52 +0000</pubDate>
		<dc:creator><![CDATA[nouv]]></dc:creator>
				<category><![CDATA[ActionScript3]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Flash Hacks]]></category>
		<category><![CDATA[JavaScriptグラフィックス]]></category>

		<guid isPermaLink="false">http://nouv.biz/wp/?p=169</guid>
		
        

        <description><![CDATA[<p>フレームレートとは元々は映像で用いられる言葉である。<br />
アニメーションなどで1秒間に何コマ絵を動かしますか、という意味だ。1秒間に24コマの場合は24FPS（フレームパーセコンド）などと表される。FlashやJavaScriptなどで動作させるアニメーションでも用いられることが多い。</p>
<p>このフレームレート、Flashの場合直接フレームレートの指定が可能（デフォルトは12）だが、Javascriptの場合はtimer(setTimeoutなど）で逆算して指定することになる。<br />
timerはブラウザにより大きく性能が異なるため、ゲーム等を制作する場合大きな障害となる。例えばキャラクタが画面を移動するとき、あるブラウザでは0.5秒かかり、別のブラウザでは2秒かかるなど、差異が大きすぎるとゲームとして成立しない。</p>
<p>この問題はオライリー・ジャパンの<a href="http://www.amazon.co.jp/gp/product/4873115280/ref=as_li_tf_tl?ie=UTF8&amp;camp=247&amp;creative=1211&amp;creativeASIN=4873115280&amp;linkCode=as2&amp;tag=nouvlog-22" target="_blank">「JavaScriptグラフィックス」</a><img style="border: none !important; margin: 0px !important;" src="http://www.assoc-amazon.jp/e/ir?t=nouvlog-22&amp;l=as2&amp;o=9&amp;a=4873115280" alt="" width="1" height="1" border="0" />では以下の方法で対処している。</p>
<ol>
<li>どの程度のフレームレートが実現しているか調べる</li>
<li>実現したい速度と実際の速度の比率（＝係数）を調べる</li>
<li>1フレームあたりのキャラクターの移動距離を標準の距離×係数で再設定する</li>
<li>フレーム毎にキャラクターを再設定した距離移動させる</li>
</ol>
<p>一方Flashサイトの場合、ゲーム用途よりバナーやトップページフラッシュなど演出目的のものが多いため、滑らかな動作が重要視される。滑らかに動かした方がより高級感を醸し出せるからだ。<br />
滑らかに動かすためには、アニメーションは1秒のコマ数を増やせばよい。そこで多くの製作者は極力高いフレームレートを設定することになる。</p>
<p>ところが高くすればするほどパソコンに負荷がかかり、スペックの低いパソコンでは設定したフレームレートの半分も出せないことがある。結果カクカクした動きになっしまう。</p>
<p>その対策については、こちらもオライリー・ジャパンの<a href="http://www.amazon.co.jp/gp/product/4873112354/ref=as_li_tf_tl?ie=UTF8&amp;camp=247&amp;creative=1211&amp;creativeASIN=4873112354&amp;linkCode=as2&amp;tag=nouvlog-22" target="_blank">「Flash Hacks」</a><img style="border: none !important; margin: 0px !important;" src="http://www.assoc-amazon.jp/e/ir?t=nouvlog-22&amp;l=as2&amp;o=9&amp;a=4873112354" alt="" width="1" height="1" border="0" />にわかりやすく記載されている。<br />
まず上記１同様、「どの程度のフレームレートが実現しているか」を調べ、オブジェクトが多数動くことが負担になっている場合は、動作しているオブジェクト（キャラクターや粒子など）の数を減らしている。<br />
上記書籍は2005年発売でActionScript1.0又は2.0で記述されているので、今回はActionScript3.0に置き換えつつ、より実践的にしたPerformanceMonitorクラスを作成した。<br />
<a title="performance monitor sample" href="http://nouv.biz/labo/20121004_performance_montor/" target="_blank">以下</a>がそのサンプルとなる(<a href="http://nouv.biz/labo/20121004_performance_montor/">http://nouv.biz/labo/20121004_performance_montor/</a>)。<br />
大量のパーティクル（粒子）を生成し、ランダムにY回転させている(重いので他作業中の方は注意）。<br />
<a href="http://nouv.biz/labo/20121004_performance_montor/" target="_blank"><img class="aligncenter size-full wp-image-182" title="particle100000" src="http://nouv.biz/wp/wp-content/uploads/2012/10/particle100000.jpg" alt="" width="500" height="327" /></a></p>
<p>右下に、実現しているフレームレートと、パーティクルの数を表示している。<br />
フレームレートは24FPS、パーティクルの初期生成数は10万個を初期値にしているが、フレームレートが24フレームに達しないと、序々にパーティクルの個数を減らし調整する。</p>
<p>フレームレートが目標に達しているか調査する部分のスクリプトを以下に記載。</p>
<pre>  private function onEnterframe(event:Event):void {
   var nowTime:Number = new Date().getTime();
   var pastTime = nowTime-oldTime ; 
   var fps:Number = 1000 / pastTime;

   if (interCount &gt; 100) {
    //過去の累積が悪影響をおよぼすので、ある程度の回数でクリアする
     totalFPS = 0;
     interCount = 0;
   }
   totalFPS += fps;
   interCount++;
   oldTime = nowTime;
  }

  /*
   * 
   */
  public function get _averageFps():int {
   var averageFPS:Number = Math.floor(totalFPS / interCount );
   return averageFPS;
  }

  /**
   *達成したいフレームレートを指定する
   * 達成できているかどうかを返す
   */
  public function fpsBool(targetFPS:int):Boolean {
   var bool:Boolean;
   if (_averageFps &gt;= targetFPS) {
    bool = true;
   }else {
    bool = false;
   }
   return bool;
  }</pre>
<p>現時刻から前に通過した時刻を引き、そこからフレームレートを求めその値を返す。<br />
一方、パーティクルはその結果を受けて個数調整を行なっている。<br />
numBallsは生成するパーティクルの個数。上限下限を設けている。</p>
<pre>	
performanceBool = performanceMonitor.fpsBool(24);
if (!performanceBool) {
	numBalls = (numBalls - 100) &gt; 0? numBalls - 100 : numBalls;
}else {
	numBalls = (numBalls + 100) &lt;= makeNum ? numBalls + 100 : makeNum;
}</pre>
<p>&nbsp;</p>
<p><iframe style="width: 120px; height: 240px;" src="http://rcm-jp.amazon.co.jp/e/cm?t=nouvlog-22&amp;o=9&amp;p=8&amp;l=as1&amp;asins=4873112354&amp;ref=tf_til&amp;fc1=000000&amp;IS2=1&amp;lt1=_blank&amp;m=amazon&amp;lc1=0000FF&amp;bc1=000000&amp;bg1=FFFFFF&amp;f=ifr" frameborder="0" marginwidth="0" marginheight="0" scrolling="no" width="320" height="240"></iframe></p>
<p><iframe style="width: 120px; height: 240px;" src="http://rcm-jp.amazon.co.jp/e/cm?t=nouvlog-22&amp;o=9&amp;p=8&amp;l=as1&amp;asins=4873115280&amp;ref=tf_til&amp;fc1=000000&amp;IS2=1&amp;lt1=_blank&amp;m=amazon&amp;lc1=0000FF&amp;bc1=000000&amp;bg1=FFFFFF&amp;f=ifr" frameborder="0" marginwidth="0" marginheight="0" scrolling="no" width="320" height="240"></iframe></p>
]]></description>        
        
        
				<content:encoded><![CDATA[<p>フレームレートとは元々は映像で用いられる言葉である。<br />
アニメーションなどで1秒間に何コマ絵を動かしますか、という意味だ。1秒間に24コマの場合は24FPS（フレームパーセコンド）などと表される。FlashやJavaScriptなどで動作させるアニメーションでも用いられることが多い。</p>
<p>このフレームレート、Flashの場合直接フレームレートの指定が可能（デフォルトは12）だが、Javascriptの場合はtimer(setTimeoutなど）で逆算して指定することになる。<br />
timerはブラウザにより大きく性能が異なるため、ゲーム等を制作する場合大きな障害となる。例えばキャラクタが画面を移動するとき、あるブラウザでは0.5秒かかり、別のブラウザでは2秒かかるなど、差異が大きすぎるとゲームとして成立しない。</p>
<p>この問題はオライリー・ジャパンの<a href="http://www.amazon.co.jp/gp/product/4873115280/ref=as_li_tf_tl?ie=UTF8&amp;camp=247&amp;creative=1211&amp;creativeASIN=4873115280&amp;linkCode=as2&amp;tag=nouvlog-22" target="_blank">「JavaScriptグラフィックス」</a><img style="border: none !important; margin: 0px !important;" src="http://www.assoc-amazon.jp/e/ir?t=nouvlog-22&amp;l=as2&amp;o=9&amp;a=4873115280" alt="" width="1" height="1" border="0" />では以下の方法で対処している。</p>
<ol>
<li>どの程度のフレームレートが実現しているか調べる</li>
<li>実現したい速度と実際の速度の比率（＝係数）を調べる</li>
<li>1フレームあたりのキャラクターの移動距離を標準の距離×係数で再設定する</li>
<li>フレーム毎にキャラクターを再設定した距離移動させる</li>
</ol>
<p>一方Flashサイトの場合、ゲーム用途よりバナーやトップページフラッシュなど演出目的のものが多いため、滑らかな動作が重要視される。滑らかに動かした方がより高級感を醸し出せるからだ。<br />
滑らかに動かすためには、アニメーションは1秒のコマ数を増やせばよい。そこで多くの製作者は極力高いフレームレートを設定することになる。</p>
<p>ところが高くすればするほどパソコンに負荷がかかり、スペックの低いパソコンでは設定したフレームレートの半分も出せないことがある。結果カクカクした動きになっしまう。</p>
<p>その対策については、こちらもオライリー・ジャパンの<a href="http://www.amazon.co.jp/gp/product/4873112354/ref=as_li_tf_tl?ie=UTF8&amp;camp=247&amp;creative=1211&amp;creativeASIN=4873112354&amp;linkCode=as2&amp;tag=nouvlog-22" target="_blank">「Flash Hacks」</a><img style="border: none !important; margin: 0px !important;" src="http://www.assoc-amazon.jp/e/ir?t=nouvlog-22&amp;l=as2&amp;o=9&amp;a=4873112354" alt="" width="1" height="1" border="0" />にわかりやすく記載されている。<br />
まず上記１同様、「どの程度のフレームレートが実現しているか」を調べ、オブジェクトが多数動くことが負担になっている場合は、動作しているオブジェクト（キャラクターや粒子など）の数を減らしている。<br />
上記書籍は2005年発売でActionScript1.0又は2.0で記述されているので、今回はActionScript3.0に置き換えつつ、より実践的にしたPerformanceMonitorクラスを作成した。<br />
<a title="performance monitor sample" href="http://nouv.biz/labo/20121004_performance_montor/" target="_blank">以下</a>がそのサンプルとなる(<a href="http://nouv.biz/labo/20121004_performance_montor/">http://nouv.biz/labo/20121004_performance_montor/</a>)。<br />
大量のパーティクル（粒子）を生成し、ランダムにY回転させている(重いので他作業中の方は注意）。<br />
<a href="http://nouv.biz/labo/20121004_performance_montor/" target="_blank"><img class="aligncenter size-full wp-image-182" title="particle100000" src="http://nouv.biz/wp/wp-content/uploads/2012/10/particle100000.jpg" alt="" width="500" height="327" /></a></p>
<p>右下に、実現しているフレームレートと、パーティクルの数を表示している。<br />
フレームレートは24FPS、パーティクルの初期生成数は10万個を初期値にしているが、フレームレートが24フレームに達しないと、序々にパーティクルの個数を減らし調整する。</p>
<p>フレームレートが目標に達しているか調査する部分のスクリプトを以下に記載。</p>
<pre>  private function onEnterframe(event:Event):void {
   var nowTime:Number = new Date().getTime();
   var pastTime = nowTime-oldTime ; 
   var fps:Number = 1000 / pastTime;

   if (interCount &gt; 100) {
    //過去の累積が悪影響をおよぼすので、ある程度の回数でクリアする
     totalFPS = 0;
     interCount = 0;
   }
   totalFPS += fps;
   interCount++;
   oldTime = nowTime;
  }

  /*
   * 
   */
  public function get _averageFps():int {
   var averageFPS:Number = Math.floor(totalFPS / interCount );
   return averageFPS;
  }

  /**
   *達成したいフレームレートを指定する
   * 達成できているかどうかを返す
   */
  public function fpsBool(targetFPS:int):Boolean {
   var bool:Boolean;
   if (_averageFps &gt;= targetFPS) {
    bool = true;
   }else {
    bool = false;
   }
   return bool;
  }</pre>
<p>現時刻から前に通過した時刻を引き、そこからフレームレートを求めその値を返す。<br />
一方、パーティクルはその結果を受けて個数調整を行なっている。<br />
numBallsは生成するパーティクルの個数。上限下限を設けている。</p>
<pre>	
performanceBool = performanceMonitor.fpsBool(24);
if (!performanceBool) {
	numBalls = (numBalls - 100) &gt; 0? numBalls - 100 : numBalls;
}else {
	numBalls = (numBalls + 100) &lt;= makeNum ? numBalls + 100 : makeNum;
}</pre>
<p>&nbsp;</p>
<p><iframe style="width: 120px; height: 240px;" src="http://rcm-jp.amazon.co.jp/e/cm?t=nouvlog-22&amp;o=9&amp;p=8&amp;l=as1&amp;asins=4873112354&amp;ref=tf_til&amp;fc1=000000&amp;IS2=1&amp;lt1=_blank&amp;m=amazon&amp;lc1=0000FF&amp;bc1=000000&amp;bg1=FFFFFF&amp;f=ifr" frameborder="0" marginwidth="0" marginheight="0" scrolling="no" width="320" height="240"></iframe></p>
<p><iframe style="width: 120px; height: 240px;" src="http://rcm-jp.amazon.co.jp/e/cm?t=nouvlog-22&amp;o=9&amp;p=8&amp;l=as1&amp;asins=4873115280&amp;ref=tf_til&amp;fc1=000000&amp;IS2=1&amp;lt1=_blank&amp;m=amazon&amp;lc1=0000FF&amp;bc1=000000&amp;bg1=FFFFFF&amp;f=ifr" frameborder="0" marginwidth="0" marginheight="0" scrolling="no" width="320" height="240"></iframe></p>
]]></content:encoded>
			<wfw:commentRss>http://nouv.biz/wp/2012/10/06/%e3%83%95%e3%83%ac%e3%83%bc%e3%83%a0%e3%83%ac%e3%83%bc%e3%83%88%e3%81%a8%e3%83%91%e3%83%95%e3%82%a9%e3%83%bc%e3%83%9e%e3%83%b3%e3%82%b9%e3%83%a2%e3%83%8b%e3%82%bf%e3%81%ab%e3%81%a4%e3%81%84%e3%81%a6/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>「ActionScript3.0アニメーション」をcanvasで置き換える　引き合うパーティクル 応用（メタボール）</title>
		<link>http://nouv.biz/wp/2012/09/03/%e3%80%8cactionscript3-0%e3%82%a2%e3%83%8b%e3%83%a1%e3%83%bc%e3%82%b7%e3%83%a7%e3%83%b3%e3%80%8d%e3%82%92canvas%e3%81%a7%e7%bd%ae%e3%81%8d%e6%8f%9b%e3%81%88%e3%82%8b%e3%80%80%e5%bc%95%e3%81%8d-2/</link>
		<comments>http://nouv.biz/wp/2012/09/03/%e3%80%8cactionscript3-0%e3%82%a2%e3%83%8b%e3%83%a1%e3%83%bc%e3%82%b7%e3%83%a7%e3%83%b3%e3%80%8d%e3%82%92canvas%e3%81%a7%e7%bd%ae%e3%81%8d%e6%8f%9b%e3%81%88%e3%82%8b%e3%80%80%e5%bc%95%e3%81%8d-2/#comments</comments>
		<pubDate>Mon, 03 Sep 2012 09:10:32 +0000</pubDate>
		<dc:creator><![CDATA[nouv]]></dc:creator>
				<category><![CDATA[ActionScript3]]></category>
		<category><![CDATA[技術]]></category>

		<guid isPermaLink="false">http://nouv.biz/wp/?p=103</guid>
		
        

        <description><![CDATA[<p>先日作った「引きあうパーティクル」のFlash側を少し応用し、メタボール表示してみる。<br />
メタボールとは何か？見てもらったほうが早い。<br />
<a href="http://nouv.biz/labo/20120902_nodeGardenMetaBall/NodeGardenMetaballTest.html" target="_blank">http://nouv.biz/labo/20120902_nodeGardenMetaBall/NodeGardenMetaballTest.html</a><br />
<a href="http://nouv.biz/labo/20120902_nodeGardenMetaBall/NodeGardenMetaballTest.html" target="_blank"><img class="aligncenter size-full wp-image-105" title="metaball２" src="http://nouv.biz/wp/wp-content/uploads/2012/09/metaball1.jpg" alt="" width="498" height="498" /></a></p>
<p>1.中央から周辺へ、非透明→透明のグラデーションのボールを描画<br />
2.パレットマップ用の配列を作成(透明度200以下は全て透明それ以上は全て非透明の配列を作成)<br />
var separateNum:int = 200 //どこでグラデーションの切れ目とするか=metaのレベルとともにballの大きさにも影響する<br />
alphas = new Array();<br />
//200まではすべて透明<br />
for (i = 0 ; i &lt; separateNum ; i++) {<br />
alphas.push(0);<br />
}<br />
//200以上は全てffになる。単独では200以下で透明でも、ふたつのグラデーションが重なって200以上になると非透明に→メタボール状態になる<br />
for (i = separateNum ; i &lt; 256 ; i++) {<br />
alphas.push(0xFF000000);<br />
}<br />
このalphasをパレットマップに適用する。<br />
bmd.paletteMap(bmd , bmd.rect , bmd.rect.topLeft , null , null , null , alphas);</p>
<p>外周付近が半透明な円が２つ以上重なり透明度が200を超えた場合、真っ黒に色が変換される。結果円が繋がったように見える。<br />
メタボールについては webDesigning 2006年12月号に掲載されたFlashPlayer8向けの記事を参考にさせていただいた。6年近く前の記事なのにいまだ色褪せない。<br />
梅津岳城氏に感謝。</p>
]]></description>        
        
        
				<content:encoded><![CDATA[<p>先日作った「引きあうパーティクル」のFlash側を少し応用し、メタボール表示してみる。<br />
メタボールとは何か？見てもらったほうが早い。<br />
<a href="http://nouv.biz/labo/20120902_nodeGardenMetaBall/NodeGardenMetaballTest.html" target="_blank">http://nouv.biz/labo/20120902_nodeGardenMetaBall/NodeGardenMetaballTest.html</a><br />
<a href="http://nouv.biz/labo/20120902_nodeGardenMetaBall/NodeGardenMetaballTest.html" target="_blank"><img class="aligncenter size-full wp-image-105" title="metaball２" src="http://nouv.biz/wp/wp-content/uploads/2012/09/metaball1.jpg" alt="" width="498" height="498" /></a></p>
<p>1.中央から周辺へ、非透明→透明のグラデーションのボールを描画<br />
2.パレットマップ用の配列を作成(透明度200以下は全て透明それ以上は全て非透明の配列を作成)<br />
var separateNum:int = 200 //どこでグラデーションの切れ目とするか=metaのレベルとともにballの大きさにも影響する<br />
alphas = new Array();<br />
//200まではすべて透明<br />
for (i = 0 ; i &lt; separateNum ; i++) {<br />
alphas.push(0);<br />
}<br />
//200以上は全てffになる。単独では200以下で透明でも、ふたつのグラデーションが重なって200以上になると非透明に→メタボール状態になる<br />
for (i = separateNum ; i &lt; 256 ; i++) {<br />
alphas.push(0xFF000000);<br />
}<br />
このalphasをパレットマップに適用する。<br />
bmd.paletteMap(bmd , bmd.rect , bmd.rect.topLeft , null , null , null , alphas);</p>
<p>外周付近が半透明な円が２つ以上重なり透明度が200を超えた場合、真っ黒に色が変換される。結果円が繋がったように見える。<br />
メタボールについては webDesigning 2006年12月号に掲載されたFlashPlayer8向けの記事を参考にさせていただいた。6年近く前の記事なのにいまだ色褪せない。<br />
梅津岳城氏に感謝。</p>
]]></content:encoded>
			<wfw:commentRss>http://nouv.biz/wp/2012/09/03/%e3%80%8cactionscript3-0%e3%82%a2%e3%83%8b%e3%83%a1%e3%83%bc%e3%82%b7%e3%83%a7%e3%83%b3%e3%80%8d%e3%82%92canvas%e3%81%a7%e7%bd%ae%e3%81%8d%e6%8f%9b%e3%81%88%e3%82%8b%e3%80%80%e5%bc%95%e3%81%8d-2/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>「ActionScript3.0アニメーション」をcanvasで置き換える　引き合うパーティクル</title>
		<link>http://nouv.biz/wp/2012/09/02/%e3%80%8cactionscript3-0%e3%82%a2%e3%83%8b%e3%83%a1%e3%83%bc%e3%82%b7%e3%83%a7%e3%83%b3%e3%80%8d%e3%82%92canvas%e3%81%a7%e7%bd%ae%e3%81%8d%e6%8f%9b%e3%81%88%e3%82%8b%e3%80%80%e5%bc%95%e3%81%8d/</link>
		<comments>http://nouv.biz/wp/2012/09/02/%e3%80%8cactionscript3-0%e3%82%a2%e3%83%8b%e3%83%a1%e3%83%bc%e3%82%b7%e3%83%a7%e3%83%b3%e3%80%8d%e3%82%92canvas%e3%81%a7%e7%bd%ae%e3%81%8d%e6%8f%9b%e3%81%88%e3%82%8b%e3%80%80%e5%bc%95%e3%81%8d/#comments</comments>
		<pubDate>Sun, 02 Sep 2012 08:30:47 +0000</pubDate>
		<dc:creator><![CDATA[nouv]]></dc:creator>
				<category><![CDATA[ActionScript3]]></category>
		<category><![CDATA[JavaScript]]></category>

		<guid isPermaLink="false">http://nouv.biz/wp/?p=96</guid>
		
        

        <description><![CDATA[<p>今回はChapter12のノードガーデンを作成する。<br />
パーティクルをランダムに移動させ、それぞれの距離が200ピクセルより近ければ、近いパーティクル方向へより加速させる。<br />
[Flash]<br />
<a href="http://nouv.biz/labo/20120902_nodeGarden/flash/NodeGardenTest.html" target="_blank">http://nouv.biz/labo/20120902_nodeGarden/flash/NodeGardenTest.html<br />
</a><a href="http://nouv.biz/labo/20120902_nodeGarden/flash/NodeGardenTest.html" target="_blank"><img class="aligncenter size-full wp-image-98" title="flash" src="http://nouv.biz/wp/wp-content/uploads/2012/09/flash1.jpg" alt="" width="500" height="500" /></a>[ javascript]<br />
<a href="http://nouv.biz/labo/20120902_nodeGarden/javascript/nodeGarden.html">http://nouv.biz/labo/20120902_nodeGarden/javascript/nodeGarden.html<br />
</a><a href="http://nouv.biz/labo/20120902_nodeGarden/javascript/nodeGarden.html" target="_blank"><img class="aligncenter size-full wp-image-100" title="javascript" src="http://nouv.biz/wp/wp-content/uploads/2012/09/javascript1.jpg" alt="" width="500" height="500" /></a></p>
<p>線を描画するときの透明度指定が少々ぎこちない。javascriptではこんな風なのだろうか。<br />
var alpha=1-dist/minDist;//距離が遠いほど小さい→遠いほど透明になる<br />
var rgba=&#8217;rgba(255, 255, 255,&#8217; + alpha + &#8216;)&#8217;;<br />
context.strokeStyle=rgba;</p>
]]></description>        
        
        
				<content:encoded><![CDATA[<p>今回はChapter12のノードガーデンを作成する。<br />
パーティクルをランダムに移動させ、それぞれの距離が200ピクセルより近ければ、近いパーティクル方向へより加速させる。<br />
[Flash]<br />
<a href="http://nouv.biz/labo/20120902_nodeGarden/flash/NodeGardenTest.html" target="_blank">http://nouv.biz/labo/20120902_nodeGarden/flash/NodeGardenTest.html<br />
</a><a href="http://nouv.biz/labo/20120902_nodeGarden/flash/NodeGardenTest.html" target="_blank"><img class="aligncenter size-full wp-image-98" title="flash" src="http://nouv.biz/wp/wp-content/uploads/2012/09/flash1.jpg" alt="" width="500" height="500" /></a>[ javascript]<br />
<a href="http://nouv.biz/labo/20120902_nodeGarden/javascript/nodeGarden.html">http://nouv.biz/labo/20120902_nodeGarden/javascript/nodeGarden.html<br />
</a><a href="http://nouv.biz/labo/20120902_nodeGarden/javascript/nodeGarden.html" target="_blank"><img class="aligncenter size-full wp-image-100" title="javascript" src="http://nouv.biz/wp/wp-content/uploads/2012/09/javascript1.jpg" alt="" width="500" height="500" /></a></p>
<p>線を描画するときの透明度指定が少々ぎこちない。javascriptではこんな風なのだろうか。<br />
var alpha=1-dist/minDist;//距離が遠いほど小さい→遠いほど透明になる<br />
var rgba=&#8217;rgba(255, 255, 255,&#8217; + alpha + &#8216;)&#8217;;<br />
context.strokeStyle=rgba;</p>
]]></content:encoded>
			<wfw:commentRss>http://nouv.biz/wp/2012/09/02/%e3%80%8cactionscript3-0%e3%82%a2%e3%83%8b%e3%83%a1%e3%83%bc%e3%82%b7%e3%83%a7%e3%83%b3%e3%80%8d%e3%82%92canvas%e3%81%a7%e7%bd%ae%e3%81%8d%e6%8f%9b%e3%81%88%e3%82%8b%e3%80%80%e5%bc%95%e3%81%8d/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>「ActionScript3.0アニメーション」をcanvasで置き換える　3D回転（及びJavascriptにおける継承)</title>
		<link>http://nouv.biz/wp/2012/09/01/%e3%80%8cactionscript3-0%e3%82%a2%e3%83%8b%e3%83%a1%e3%83%bc%e3%82%b7%e3%83%a7%e3%83%b3%e3%80%8d%e3%82%92canvas%e3%81%a7%e7%bd%ae%e3%81%8d%e6%8f%9b%e3%81%88%e3%82%8b%e3%80%803d%e5%9b%9e%e8%bb%a2/</link>
		<comments>http://nouv.biz/wp/2012/09/01/%e3%80%8cactionscript3-0%e3%82%a2%e3%83%8b%e3%83%a1%e3%83%bc%e3%82%b7%e3%83%a7%e3%83%b3%e3%80%8d%e3%82%92canvas%e3%81%a7%e7%bd%ae%e3%81%8d%e6%8f%9b%e3%81%88%e3%82%8b%e3%80%803d%e5%9b%9e%e8%bb%a2/#comments</comments>
		<pubDate>Sat, 01 Sep 2012 08:04:40 +0000</pubDate>
		<dc:creator><![CDATA[nouv]]></dc:creator>
				<category><![CDATA[ActionScript3]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[技術]]></category>

		<guid isPermaLink="false">http://nouv.biz/wp/?p=74</guid>
		
        

        <description><![CDATA[<p>Flashがz軸に対応した今となってはもはや古典か？「ActionScript3.0アニメーション」。<br />
とはいえ内容は多いに役立つので一読をおすすめする。</p>
<p>今回はchapter15 3Dの基本の最後、3D回転。<br />
[Flash]<br />
回転公式忘れ。<br />
＋－入れ替えてzが後ろに来る、と。<br />
var nx:Number = cos * ball.xpos &#8211; sin * ball.zpos;<br />
var nz:Number = cos * ball.zpos + sin * ball.xpos;<br />
それ以外は特に問題なし</p>
<p><a href="http://nouv.biz/labo/20120901_rotate/flash/RotateXYZ.html" target="_blank">http://nouv.biz/labo/20120901_rotate/flash/RotateXYZ.html<br />
</a><a href="http://nouv.biz/labo/20120901_rotate/flash/RotateXYZ.html" target="_blank"><img class="aligncenter size-full wp-image-76" title="flash" src="http://nouv.biz/wp/wp-content/uploads/2012/09/flash.jpg" alt="" width="500" height="500" /></a><a href="http://nouv.biz/labo/20120901_rotate/flash/RotateXYZ.html" target="_blank"><br />
</a><br />
[Javascript]<br />
先日作ったPoint3Dクラスを継承した、Point3DExtendSampleを作る。</p>
<p>Point3D.js：自身の座標保持。3D座標を2D座標に変換<br />
Point3DExtendSample.js：上記クラスを継承し、drawメソッドをオーバーライドする。</p>
<p>作るにあたり、Javascriptの継承の方法を調べたらいくつかあることがわかった。今回はもっともオーソドック（教科書的）とオライリーに記載されてた方法を用いる。<br />
即ち</p>
<p>function Point3DExtendSample(radius , xpos , ypos , zpos , fl){<br />
this.radius=radius;<br />
Point3D.call(this , xpos , ypos , zpos , fl);//親のオブジェクトのコンストラクタを呼び出す<br />
}</p>
<p>//Point3Dの継承を実現する<br />
Point3DExtendSample.prototype=new Point3D();</p>
<p>//Point3Dのメソッドをoverrideする<br />
Point3DExtendSample.prototype.draw=function(myCanvas){<br />
with(this){<br />
var context=myCanvas.getContext(&#8220;2d&#8221;);<br />
context.setTransform(getScale() , 0 , 0 , getScale() , x , y);<br />
context.strokeStyle=&#8221;#cccccc&#8221;;<br />
context.fillStyle=&#8221;#ff0000&#8243;;</p>
<p>context.beginPath();<br />
context.arc(0 , 0 , radius , 0 , Math.PI*2 , true);<br />
context.fill();<br />
context.stroke();<br />
context.setTransform(1 , 0 , 0 , 1 , 0 , 0);<br />
}<br />
}<br />
の手法を用いる。<br />
callってのがよくわからないうえcallした後にprototypeに引数無しの<br />
new Point3D()がきてるのもよくわからん。後ほど調べる<br />
(<a href="http://taiju.hatenablog.com/entry/20100515/1273903873" target="_blank">http://taiju.hatenablog.com/entry/20100515/1273903873</a> 後で読ませて頂く）。</p>
<pre> 2012年9月21日 以下自分なりの解釈を追記。

//とりあえず関数を作る
function Point3DExtendSample(radius , xpos , ypos , zpos , fl){
...
}

//その関数にPoint3D（インスタンス？機能）を埋め込む。
Point3DExtendSample.prototype=new Point3D();

//prototypeにオブジェクト（Point3Dのインスタンス）が設定される
//new Point3D()でのreturnは
//オブジェクト＝Point3Dのインスタンス。
//これはPoint3DExtendSampleにPoint3Dインスタンスを生成(Point3Dをコピー）
//している、とも言える
//そのコピーしたPoint3Dに拡張したいメソッドなどを追記していく
//関数が起動するまえ即ちｈｔｍｌに 
//&lt;script type="text/javascript" 
//src="nouvdotbiz/Point3DExtendSample.js"&gt;&lt;/script&gt;
//と記載された時点で以下は実行される。
//その時点でxpos,yposなどのインスタンス変数が生成される。
//しかし上記では引数が設定されていないため、undefinedが代入されると思われる。
//スーパークラス（この場合Point3D）のコンストラクタ状態によってはエラーが発生する。
//その後、継承クラスのインスタンスが生成された時点で引数に代入されるのは通常通り。</pre>
<p>初回時ボールが2重に描画されてしまった。 これはFlashの元ロジックをそのまま踏襲したことが仇になったようだ。x軸回転とy軸回転をそれぞれ別の関数にて起動しており、その関数内で Point3DExtendSampleのdrawメソッドを呼び出していたことが原因。x軸回転とy軸回転のわずかな時間差で描画されるため、2重になっていた。この処理をenterFrame内に統合し解決。<br />
<a href="http://nouv.biz/labo/20120901_rotate/javascript/RotateXYZ.html" target="_blank"></p>
<p>http://nouv.biz/labo/20120901_rotate/javascript/RotateXYZ.html</a></p>
<p><a href="http://nouv.biz/labo/20120901_rotate/javascript/RotateXYZ.html" target="_blank"><img class="aligncenter size-full wp-image-77" title="javascript" src="http://nouv.biz/wp/wp-content/uploads/2012/09/javascript.jpg" alt="" width="500" height="500" /></a></p>
]]></description>        
        
        
				<content:encoded><![CDATA[<p>Flashがz軸に対応した今となってはもはや古典か？「ActionScript3.0アニメーション」。<br />
とはいえ内容は多いに役立つので一読をおすすめする。</p>
<p>今回はchapter15 3Dの基本の最後、3D回転。<br />
[Flash]<br />
回転公式忘れ。<br />
＋－入れ替えてzが後ろに来る、と。<br />
var nx:Number = cos * ball.xpos &#8211; sin * ball.zpos;<br />
var nz:Number = cos * ball.zpos + sin * ball.xpos;<br />
それ以外は特に問題なし</p>
<p><a href="http://nouv.biz/labo/20120901_rotate/flash/RotateXYZ.html" target="_blank">http://nouv.biz/labo/20120901_rotate/flash/RotateXYZ.html<br />
</a><a href="http://nouv.biz/labo/20120901_rotate/flash/RotateXYZ.html" target="_blank"><img class="aligncenter size-full wp-image-76" title="flash" src="http://nouv.biz/wp/wp-content/uploads/2012/09/flash.jpg" alt="" width="500" height="500" /></a><a href="http://nouv.biz/labo/20120901_rotate/flash/RotateXYZ.html" target="_blank"><br />
</a><br />
[Javascript]<br />
先日作ったPoint3Dクラスを継承した、Point3DExtendSampleを作る。</p>
<p>Point3D.js：自身の座標保持。3D座標を2D座標に変換<br />
Point3DExtendSample.js：上記クラスを継承し、drawメソッドをオーバーライドする。</p>
<p>作るにあたり、Javascriptの継承の方法を調べたらいくつかあることがわかった。今回はもっともオーソドック（教科書的）とオライリーに記載されてた方法を用いる。<br />
即ち</p>
<p>function Point3DExtendSample(radius , xpos , ypos , zpos , fl){<br />
this.radius=radius;<br />
Point3D.call(this , xpos , ypos , zpos , fl);//親のオブジェクトのコンストラクタを呼び出す<br />
}</p>
<p>//Point3Dの継承を実現する<br />
Point3DExtendSample.prototype=new Point3D();</p>
<p>//Point3Dのメソッドをoverrideする<br />
Point3DExtendSample.prototype.draw=function(myCanvas){<br />
with(this){<br />
var context=myCanvas.getContext(&#8220;2d&#8221;);<br />
context.setTransform(getScale() , 0 , 0 , getScale() , x , y);<br />
context.strokeStyle=&#8221;#cccccc&#8221;;<br />
context.fillStyle=&#8221;#ff0000&#8243;;</p>
<p>context.beginPath();<br />
context.arc(0 , 0 , radius , 0 , Math.PI*2 , true);<br />
context.fill();<br />
context.stroke();<br />
context.setTransform(1 , 0 , 0 , 1 , 0 , 0);<br />
}<br />
}<br />
の手法を用いる。<br />
callってのがよくわからないうえcallした後にprototypeに引数無しの<br />
new Point3D()がきてるのもよくわからん。後ほど調べる<br />
(<a href="http://taiju.hatenablog.com/entry/20100515/1273903873" target="_blank">http://taiju.hatenablog.com/entry/20100515/1273903873</a> 後で読ませて頂く）。</p>
<pre> 2012年9月21日 以下自分なりの解釈を追記。

//とりあえず関数を作る
function Point3DExtendSample(radius , xpos , ypos , zpos , fl){
...
}

//その関数にPoint3D（インスタンス？機能）を埋め込む。
Point3DExtendSample.prototype=new Point3D();

//prototypeにオブジェクト（Point3Dのインスタンス）が設定される
//new Point3D()でのreturnは
//オブジェクト＝Point3Dのインスタンス。
//これはPoint3DExtendSampleにPoint3Dインスタンスを生成(Point3Dをコピー）
//している、とも言える
//そのコピーしたPoint3Dに拡張したいメソッドなどを追記していく
//関数が起動するまえ即ちｈｔｍｌに 
//&lt;script type="text/javascript" 
//src="nouvdotbiz/Point3DExtendSample.js"&gt;&lt;/script&gt;
//と記載された時点で以下は実行される。
//その時点でxpos,yposなどのインスタンス変数が生成される。
//しかし上記では引数が設定されていないため、undefinedが代入されると思われる。
//スーパークラス（この場合Point3D）のコンストラクタ状態によってはエラーが発生する。
//その後、継承クラスのインスタンスが生成された時点で引数に代入されるのは通常通り。</pre>
<p>初回時ボールが2重に描画されてしまった。 これはFlashの元ロジックをそのまま踏襲したことが仇になったようだ。x軸回転とy軸回転をそれぞれ別の関数にて起動しており、その関数内で Point3DExtendSampleのdrawメソッドを呼び出していたことが原因。x軸回転とy軸回転のわずかな時間差で描画されるため、2重になっていた。この処理をenterFrame内に統合し解決。<br />
<a href="http://nouv.biz/labo/20120901_rotate/javascript/RotateXYZ.html" target="_blank"></p>
<p>http://nouv.biz/labo/20120901_rotate/javascript/RotateXYZ.html</a></p>
<p><a href="http://nouv.biz/labo/20120901_rotate/javascript/RotateXYZ.html" target="_blank"><img class="aligncenter size-full wp-image-77" title="javascript" src="http://nouv.biz/wp/wp-content/uploads/2012/09/javascript.jpg" alt="" width="500" height="500" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://nouv.biz/wp/2012/09/01/%e3%80%8cactionscript3-0%e3%82%a2%e3%83%8b%e3%83%a1%e3%83%bc%e3%82%b7%e3%83%a7%e3%83%b3%e3%80%8d%e3%82%92canvas%e3%81%a7%e7%bd%ae%e3%81%8d%e6%8f%9b%e3%81%88%e3%82%8b%e3%80%803d%e5%9b%9e%e8%bb%a2/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>「ActionScript3.0アニメーション」をcanvasで置き換える　3Dラッピング応用</title>
		<link>http://nouv.biz/wp/2012/08/25/%e3%80%8cactionscript3-0%e3%82%a2%e3%83%8b%e3%83%a1%e3%83%bc%e3%82%b7%e3%83%a7%e3%83%b3%e3%80%8d%e3%82%92canvas%e3%81%a7%e7%bd%ae%e3%81%8d%e6%8f%9b%e3%81%88%e3%82%8b%e3%80%803d%e3%83%a9%e3%83%83-2/</link>
		<comments>http://nouv.biz/wp/2012/08/25/%e3%80%8cactionscript3-0%e3%82%a2%e3%83%8b%e3%83%a1%e3%83%bc%e3%82%b7%e3%83%a7%e3%83%b3%e3%80%8d%e3%82%92canvas%e3%81%a7%e7%bd%ae%e3%81%8d%e6%8f%9b%e3%81%88%e3%82%8b%e3%80%803d%e3%83%a9%e3%83%83-2/#comments</comments>
		<pubDate>Fri, 24 Aug 2012 22:35:12 +0000</pubDate>
		<dc:creator><![CDATA[nouv]]></dc:creator>
				<category><![CDATA[ActionScript3]]></category>
		<category><![CDATA[JavaScript]]></category>

		<guid isPermaLink="false">http://nouv.biz/wp/?p=61</guid>
		
        

        <description><![CDATA[<p>chapter15 3dの基本　ラッピングの応用。Tree部にImageを用いる。<br />
オリジナルクラスImageLoadAndDraw.jsで画像を読込み描画させる手もあったが、ひとつだけなので今回は使用しない。<br />
結果以下のクラスを用いる。<br />
Point3D.js　：<br />
自身の座標保持。3D座標を2D座標に変換<br />
applyImage3DMoving.js ：<br />
画像の読込<br />
Point3Dの生成<br />
Point3Dの変換2D座標へのImage描画</p>
<p>今回は1枚しか画像を使わないが、複数枚使う場合は上記<br />
１．ImageLoadAndDraw.jsにて読込<br />
２．すべての画像の読込判定<br />
３．Point3D生成<br />
４．画像配列（ imageLoadAndDraws）と3D座標配列(point3ds)の対応付け（ソートがあるので少々面倒か？）が必要となる。</p>
<p>操作は前回同様↑キーで直進↓キーで後退。→キー←キーでそれぞれの方向に移動。spaceキーで上昇。</p>
<p><a href="http://nouv.biz/labo/20120816_tree/javascript/applyImage3DMoving.html" target="_blank"><img class="aligncenter size-full wp-image-62" title="javascript_ouyou" src="http://nouv.biz/wp/wp-content/uploads/2012/08/javascript_ouyou.jpg" alt="" width="978" height="484" /></a><a href="http://nouv.biz/labo/20120816_tree/javascript/applyImage3DMoving.html">http://nouv.biz/labo/20120816_tree/javascript/applyImage3DMoving.html</a></p>
<p>発展系としてスプライトシートを作って走るアニメを用いるのが考えられる。またいずれ。<br />
それにしてもFlashを使わないってのはスマホ・タブレット対策。にも関わらず操作に矢印キーだのスペースキーだの用いるって時点でもう…。この対策もまたいずれ。</p>
]]></description>        
        
        
				<content:encoded><![CDATA[<p>chapter15 3dの基本　ラッピングの応用。Tree部にImageを用いる。<br />
オリジナルクラスImageLoadAndDraw.jsで画像を読込み描画させる手もあったが、ひとつだけなので今回は使用しない。<br />
結果以下のクラスを用いる。<br />
Point3D.js　：<br />
自身の座標保持。3D座標を2D座標に変換<br />
applyImage3DMoving.js ：<br />
画像の読込<br />
Point3Dの生成<br />
Point3Dの変換2D座標へのImage描画</p>
<p>今回は1枚しか画像を使わないが、複数枚使う場合は上記<br />
１．ImageLoadAndDraw.jsにて読込<br />
２．すべての画像の読込判定<br />
３．Point3D生成<br />
４．画像配列（ imageLoadAndDraws）と3D座標配列(point3ds)の対応付け（ソートがあるので少々面倒か？）が必要となる。</p>
<p>操作は前回同様↑キーで直進↓キーで後退。→キー←キーでそれぞれの方向に移動。spaceキーで上昇。</p>
<p><a href="http://nouv.biz/labo/20120816_tree/javascript/applyImage3DMoving.html" target="_blank"><img class="aligncenter size-full wp-image-62" title="javascript_ouyou" src="http://nouv.biz/wp/wp-content/uploads/2012/08/javascript_ouyou.jpg" alt="" width="978" height="484" /></a><a href="http://nouv.biz/labo/20120816_tree/javascript/applyImage3DMoving.html">http://nouv.biz/labo/20120816_tree/javascript/applyImage3DMoving.html</a></p>
<p>発展系としてスプライトシートを作って走るアニメを用いるのが考えられる。またいずれ。<br />
それにしてもFlashを使わないってのはスマホ・タブレット対策。にも関わらず操作に矢印キーだのスペースキーだの用いるって時点でもう…。この対策もまたいずれ。</p>
]]></content:encoded>
			<wfw:commentRss>http://nouv.biz/wp/2012/08/25/%e3%80%8cactionscript3-0%e3%82%a2%e3%83%8b%e3%83%a1%e3%83%bc%e3%82%b7%e3%83%a7%e3%83%b3%e3%80%8d%e3%82%92canvas%e3%81%a7%e7%bd%ae%e3%81%8d%e6%8f%9b%e3%81%88%e3%82%8b%e3%80%803d%e3%83%a9%e3%83%83-2/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>「ActionScript3.0アニメーション」をcanvasで置き換える　3Dラッピング</title>
		<link>http://nouv.biz/wp/2012/08/24/%e3%80%8cactionscript3-0%e3%82%a2%e3%83%8b%e3%83%a1%e3%83%bc%e3%82%b7%e3%83%a7%e3%83%b3%e3%80%8d%e3%82%92canvas%e3%81%a7%e7%bd%ae%e3%81%8d%e6%8f%9b%e3%81%88%e3%82%8b%e3%80%803d%e3%83%a9%e3%83%83/</link>
		<comments>http://nouv.biz/wp/2012/08/24/%e3%80%8cactionscript3-0%e3%82%a2%e3%83%8b%e3%83%a1%e3%83%bc%e3%82%b7%e3%83%a7%e3%83%b3%e3%80%8d%e3%82%92canvas%e3%81%a7%e7%bd%ae%e3%81%8d%e6%8f%9b%e3%81%88%e3%82%8b%e3%80%803d%e3%83%a9%e3%83%83/#comments</comments>
		<pubDate>Fri, 24 Aug 2012 12:58:30 +0000</pubDate>
		<dc:creator><![CDATA[nouv]]></dc:creator>
				<category><![CDATA[ActionScript3]]></category>
		<category><![CDATA[JavaScript]]></category>

		<guid isPermaLink="false">http://nouv.biz/wp/?p=45</guid>
		
        

        <description><![CDATA[<p>chapter15 3dの基本　ラッピング部をcanvasに置き換え。<br />
まずはFlashのおさらい。<br />
[Flash]<br />
操作は↑キーで直進↓キーで後退。→キー←キーでそれぞれの方向に移動。spaceキーで上昇。なぜかchromeでspaceキーが効かず上昇できない。後で調査。</p>
<p>flashの場合は以下2つのクラスを用いている<br />
Treeクラス：sprite継承指定。幹枝をそれぞれランダムな長さ・角度にて生成。<br />
Treesクラス：Treeを指定個数分（今回は100個）生成。加速計算・treeの3D座標計算、2D座標への変換計算など全てここで行い、描画する。<br />
treeはspriteの描画機能のみを用い大半の処理はTreesクラスに依存している。</p>
<p><a href="http://nouv.biz/labo/20120816_tree/flash/trees2Test.html" target="_blank"><img class="aligncenter size-full wp-image-46" title="flashにて行ったラッピング" src="http://nouv.biz/wp/wp-content/uploads/2012/08/flash.jpg" alt="" width="989" height="491" /></a><a href="http://nouv.biz/labo/20120816_tree/flash/trees2Test.html">http://nouv.biz/labo/20120816_tree/flash/trees2Test.html</a></p>
<p>[javascript]<br />
一方javascript側はspriteのようなものがないため、少々treeの機能が重くなる。FlashでのBitmapDataへの描画に近い手法を用いるため、以下のクラス構成となる。<br />
Tree.js:<br />
幹と枝の描画<br />
canvasと焦点距離を引数で受ける<br />
拡大率・奥行きの透明度を計算<br />
焦点距離と3D座標から2D座標変換を計算<br />
上記計算結果を用いcanvasに描画する</p>
<p>Trees.js:<br />
treeの生成と制御<br />
enterFrame処理（timer処理）<br />
キー操作制御<br />
のみとなり、treeに描画・2D変換を依存する分、こちらの処理が軽くなっている。<br />
<a href="http://nouv.biz/labo/20120816_tree/javascript/trees.html" target="_blank"><img class="aligncenter size-full wp-image-48" title="javascript" src="http://nouv.biz/wp/wp-content/uploads/2012/08/javascript.jpg" alt="" width="989" height="491" /></a><a href="http://nouv.biz/labo/20120816_tree/javascript/trees.html">http://nouv.biz/labo/20120816_tree/javascript/trees.html</a><a href="http://nouv.biz/labo/20120816_tree/javascript/trees.html" target="_blank"></p>
<p></a>context描画時にmatrixを用いているが、描画サイズの半分マイナス移動処理（中心移動）を入れ忘れ。若干右にずれてしまっているがまぁご愛嬌。<br />
操作はFlashと同様。<br />
flashはline描画なので奥行きに関わらず幹の太さは一定（1ピクセル。細く見えるのは透明度の効果）。一方こちらは都度描画かつmatrixを用いているため、幹がscaleを反映し前に来ると太くなる。こっちの方がまぁリアルではあるが、奥にある木は細すぎて描画できない。<br />
そこでscaleに下限 (0.5)を設けている。</p>
]]></description>        
        
        
				<content:encoded><![CDATA[<p>chapter15 3dの基本　ラッピング部をcanvasに置き換え。<br />
まずはFlashのおさらい。<br />
[Flash]<br />
操作は↑キーで直進↓キーで後退。→キー←キーでそれぞれの方向に移動。spaceキーで上昇。なぜかchromeでspaceキーが効かず上昇できない。後で調査。</p>
<p>flashの場合は以下2つのクラスを用いている<br />
Treeクラス：sprite継承指定。幹枝をそれぞれランダムな長さ・角度にて生成。<br />
Treesクラス：Treeを指定個数分（今回は100個）生成。加速計算・treeの3D座標計算、2D座標への変換計算など全てここで行い、描画する。<br />
treeはspriteの描画機能のみを用い大半の処理はTreesクラスに依存している。</p>
<p><a href="http://nouv.biz/labo/20120816_tree/flash/trees2Test.html" target="_blank"><img class="aligncenter size-full wp-image-46" title="flashにて行ったラッピング" src="http://nouv.biz/wp/wp-content/uploads/2012/08/flash.jpg" alt="" width="989" height="491" /></a><a href="http://nouv.biz/labo/20120816_tree/flash/trees2Test.html">http://nouv.biz/labo/20120816_tree/flash/trees2Test.html</a></p>
<p>[javascript]<br />
一方javascript側はspriteのようなものがないため、少々treeの機能が重くなる。FlashでのBitmapDataへの描画に近い手法を用いるため、以下のクラス構成となる。<br />
Tree.js:<br />
幹と枝の描画<br />
canvasと焦点距離を引数で受ける<br />
拡大率・奥行きの透明度を計算<br />
焦点距離と3D座標から2D座標変換を計算<br />
上記計算結果を用いcanvasに描画する</p>
<p>Trees.js:<br />
treeの生成と制御<br />
enterFrame処理（timer処理）<br />
キー操作制御<br />
のみとなり、treeに描画・2D変換を依存する分、こちらの処理が軽くなっている。<br />
<a href="http://nouv.biz/labo/20120816_tree/javascript/trees.html" target="_blank"><img class="aligncenter size-full wp-image-48" title="javascript" src="http://nouv.biz/wp/wp-content/uploads/2012/08/javascript.jpg" alt="" width="989" height="491" /></a><a href="http://nouv.biz/labo/20120816_tree/javascript/trees.html">http://nouv.biz/labo/20120816_tree/javascript/trees.html</a><a href="http://nouv.biz/labo/20120816_tree/javascript/trees.html" target="_blank"></p>
<p></a>context描画時にmatrixを用いているが、描画サイズの半分マイナス移動処理（中心移動）を入れ忘れ。若干右にずれてしまっているがまぁご愛嬌。<br />
操作はFlashと同様。<br />
flashはline描画なので奥行きに関わらず幹の太さは一定（1ピクセル。細く見えるのは透明度の効果）。一方こちらは都度描画かつmatrixを用いているため、幹がscaleを反映し前に来ると太くなる。こっちの方がまぁリアルではあるが、奥にある木は細すぎて描画できない。<br />
そこでscaleに下限 (0.5)を設けている。</p>
]]></content:encoded>
			<wfw:commentRss>http://nouv.biz/wp/2012/08/24/%e3%80%8cactionscript3-0%e3%82%a2%e3%83%8b%e3%83%a1%e3%83%bc%e3%82%b7%e3%83%a7%e3%83%b3%e3%80%8d%e3%82%92canvas%e3%81%a7%e7%bd%ae%e3%81%8d%e6%8f%9b%e3%81%88%e3%82%8b%e3%80%803d%e3%83%a9%e3%83%83/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>「ActionScript3.0アニメーション」をcanvasで置き換える　1.ビリヤードボールの物理</title>
		<link>http://nouv.biz/wp/2012/07/13/%e3%80%8cactionscript3-0%e3%82%a2%e3%83%8b%e3%83%a1%e3%83%bc%e3%82%b7%e3%83%a7%e3%83%b3%e3%80%8d%e3%82%92canvas%e3%81%a7%e7%bd%ae%e3%81%8d%e6%8f%9b%e3%81%88%e3%82%8b%e3%80%801-%e3%83%93%e3%83%aa/</link>
		<comments>http://nouv.biz/wp/2012/07/13/%e3%80%8cactionscript3-0%e3%82%a2%e3%83%8b%e3%83%a1%e3%83%bc%e3%82%b7%e3%83%a7%e3%83%b3%e3%80%8d%e3%82%92canvas%e3%81%a7%e7%bd%ae%e3%81%8d%e6%8f%9b%e3%81%88%e3%82%8b%e3%80%801-%e3%83%93%e3%83%aa/#comments</comments>
		<pubDate>Fri, 13 Jul 2012 09:26:42 +0000</pubDate>
		<dc:creator><![CDATA[nouv]]></dc:creator>
				<category><![CDATA[ActionScript3]]></category>
		<category><![CDATA[JavaScript]]></category>

		<guid isPermaLink="false">http://nouv.biz/wp/?p=27</guid>
		
        

        <description><![CDATA[<p>書籍ActionScript3.0アニメーションをcanvasでどこまで描画できるか試してみる。<br />
chapter11_ビリヤードボールの物理。<br />
[flash]<br />
<a href="http://nouv.biz/labo/20120713_billiard/flash/" target="_blank"><img class="aligncenter size-full wp-image-32" title="20120713_billiard_flash" src="http://nouv.biz/wp/wp-content/uploads/2012/07/20120713_billiard_flash.jpg" alt="" width="500" height="500" /></a><a href="http://nouv.biz/labo/20120713_billiard/flash/">http://nouv.biz/labo/20120713_billiard/flash/</a><a href="http://nouv.biz/wp/2012/07/13/%e3%80%8cactionscript3-0%e3%82%a2%e3%83%8b%e3%83%a1%e3%83%bc%e3%82%b7%e3%83%a7%e3%83%b3%e3%80%8d%e3%82%92canvas%e3%81%a7%e7%bd%ae%e3%81%8d%e6%8f%9b%e3%81%88%e3%82%8b%e3%80%801-%e3%83%93%e3%83%aa/20120713_billiard_flash/" rel="attachment wp-att-28"></p>
<p>[</a>javascript]<br />
ほぼ問題無く作動。やはり少々重いか。変更点はcanvasへの描画部分をball.jsクラス内に組み込んだことくらい。記載の番号は重さ(=半径)。<br />
<a href="http://nouv.biz/labo/20120713_billiard/javascript/" target="_blank"><img class="aligncenter size-full wp-image-30" title="20120713_billiard_js" src="http://nouv.biz/wp/wp-content/uploads/2012/07/20120713_billiard_js.jpg" alt="" width="500" height="500" /></a><a href="http://nouv.biz/labo/20120713_billiard/javascript/">http://nouv.biz/labo/20120713_billiard/javascript/</a></p>
<p><a href="http://nouv.biz/wp/2012/07/13/%e3%80%8cactionscript3-0%e3%82%a2%e3%83%8b%e3%83%a1%e3%83%bc%e3%82%b7%e3%83%a7%e3%83%b3%e3%80%8d%e3%82%92canvas%e3%81%a7%e7%bd%ae%e3%81%8d%e6%8f%9b%e3%81%88%e3%82%8b%e3%80%801-%e3%83%93%e3%83%aa/20120713_billiard_js/" rel="attachment wp-att-30"><br />
</a></p>
]]></description>        
        
        
				<content:encoded><![CDATA[<p>書籍ActionScript3.0アニメーションをcanvasでどこまで描画できるか試してみる。<br />
chapter11_ビリヤードボールの物理。<br />
[flash]<br />
<a href="http://nouv.biz/labo/20120713_billiard/flash/" target="_blank"><img class="aligncenter size-full wp-image-32" title="20120713_billiard_flash" src="http://nouv.biz/wp/wp-content/uploads/2012/07/20120713_billiard_flash.jpg" alt="" width="500" height="500" /></a><a href="http://nouv.biz/labo/20120713_billiard/flash/">http://nouv.biz/labo/20120713_billiard/flash/</a><a href="http://nouv.biz/wp/2012/07/13/%e3%80%8cactionscript3-0%e3%82%a2%e3%83%8b%e3%83%a1%e3%83%bc%e3%82%b7%e3%83%a7%e3%83%b3%e3%80%8d%e3%82%92canvas%e3%81%a7%e7%bd%ae%e3%81%8d%e6%8f%9b%e3%81%88%e3%82%8b%e3%80%801-%e3%83%93%e3%83%aa/20120713_billiard_flash/" rel="attachment wp-att-28"></p>
<p>[</a>javascript]<br />
ほぼ問題無く作動。やはり少々重いか。変更点はcanvasへの描画部分をball.jsクラス内に組み込んだことくらい。記載の番号は重さ(=半径)。<br />
<a href="http://nouv.biz/labo/20120713_billiard/javascript/" target="_blank"><img class="aligncenter size-full wp-image-30" title="20120713_billiard_js" src="http://nouv.biz/wp/wp-content/uploads/2012/07/20120713_billiard_js.jpg" alt="" width="500" height="500" /></a><a href="http://nouv.biz/labo/20120713_billiard/javascript/">http://nouv.biz/labo/20120713_billiard/javascript/</a></p>
<p><a href="http://nouv.biz/wp/2012/07/13/%e3%80%8cactionscript3-0%e3%82%a2%e3%83%8b%e3%83%a1%e3%83%bc%e3%82%b7%e3%83%a7%e3%83%b3%e3%80%8d%e3%82%92canvas%e3%81%a7%e7%bd%ae%e3%81%8d%e6%8f%9b%e3%81%88%e3%82%8b%e3%80%801-%e3%83%93%e3%83%aa/20120713_billiard_js/" rel="attachment wp-att-30"><br />
</a></p>
]]></content:encoded>
			<wfw:commentRss>http://nouv.biz/wp/2012/07/13/%e3%80%8cactionscript3-0%e3%82%a2%e3%83%8b%e3%83%a1%e3%83%bc%e3%82%b7%e3%83%a7%e3%83%b3%e3%80%8d%e3%82%92canvas%e3%81%a7%e7%bd%ae%e3%81%8d%e6%8f%9b%e3%81%88%e3%82%8b%e3%80%801-%e3%83%93%e3%83%aa/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>ライブラリ(papervision3D)使用サンプル</title>
		<link>http://nouv.biz/wp/2010/02/12/%e3%83%a9%e3%82%a4%e3%83%96%e3%83%a9%e3%83%aapapervision3d%e4%bd%bf%e7%94%a8%e3%82%b5%e3%83%b3%e3%83%97%e3%83%ab/</link>
		<comments>http://nouv.biz/wp/2010/02/12/%e3%83%a9%e3%82%a4%e3%83%96%e3%83%a9%e3%83%aapapervision3d%e4%bd%bf%e7%94%a8%e3%82%b5%e3%83%b3%e3%83%97%e3%83%ab/#comments</comments>
		<pubDate>Fri, 12 Feb 2010 13:21:41 +0000</pubDate>
		<dc:creator><![CDATA[nouv]]></dc:creator>
				<category><![CDATA[ActionScript3]]></category>
		<category><![CDATA[技術]]></category>

		<guid isPermaLink="false">http://nouv.biz/wp/?p=86</guid>
		
        

        <description><![CDATA[<p>幸いといっていいのか、今のところ外部ライブラリを使うほど重たい作業は無し。全てを自前のクラスで作成している。とはいえ今後はそうもいっていられないであろう。とりあえず少しだけ触ってみる。ライブラリはpapervision3D。いまさらという感も多々あるが…。</p>
<p>作成したのは人の手指の動作をスライダーで調整するテストプログラム。<br />
それぞれの指を上のスライダーで調整し、下のスライダーで回転させる。<br />
<a href="http://www.nouv.biz/labo/20100212_HandTest/index.html" target="_blank">http://www.nouv.biz/labo/20100212_HandTest/index.html</a><a href="http://www.nouv.biz/labo/20100212_HandTest/index.html" rel="attachment wp-att-90" target="_blank"><img class="aligncenter size-full wp-image-90" title="flashhandtest" src="http://nouv.biz/wp/wp-content/uploads/2012/09/flashhandtest.jpg" alt="" width="565" height="386" /></a></p>
<p>ライブラリの機能に頼った結果重くなってしまった。陰面消去やら光沢テクスチャの設定等はとても楽（当然ながら）。</p>
]]></description>        
        
        
				<content:encoded><![CDATA[<p>幸いといっていいのか、今のところ外部ライブラリを使うほど重たい作業は無し。全てを自前のクラスで作成している。とはいえ今後はそうもいっていられないであろう。とりあえず少しだけ触ってみる。ライブラリはpapervision3D。いまさらという感も多々あるが…。</p>
<p>作成したのは人の手指の動作をスライダーで調整するテストプログラム。<br />
それぞれの指を上のスライダーで調整し、下のスライダーで回転させる。<br />
<a href="http://www.nouv.biz/labo/20100212_HandTest/index.html" target="_blank">http://www.nouv.biz/labo/20100212_HandTest/index.html</a><a href="http://www.nouv.biz/labo/20100212_HandTest/index.html" rel="attachment wp-att-90" target="_blank"><img class="aligncenter size-full wp-image-90" title="flashhandtest" src="http://nouv.biz/wp/wp-content/uploads/2012/09/flashhandtest.jpg" alt="" width="565" height="386" /></a></p>
<p>ライブラリの機能に頼った結果重くなってしまった。陰面消去やら光沢テクスチャの設定等はとても楽（当然ながら）。</p>
]]></content:encoded>
			<wfw:commentRss>http://nouv.biz/wp/2010/02/12/%e3%83%a9%e3%82%a4%e3%83%96%e3%83%a9%e3%83%aapapervision3d%e4%bd%bf%e7%94%a8%e3%82%b5%e3%83%b3%e3%83%97%e3%83%ab/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
