<?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>PuchilogPlus &#187; AS3</title>
	<atom:link href="http://blog.puchiplus.com/category/as3/feed" rel="self" type="application/rss+xml" />
	<link>http://blog.puchiplus.com</link>
	<description>Flash/Actionscript</description>
	<lastBuildDate>Tue, 10 May 2011 06:41:16 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>Box2D 2.1a触ってみた</title>
		<link>http://blog.puchiplus.com/2010/05/box2d-2-1a.php</link>
		<comments>http://blog.puchiplus.com/2010/05/box2d-2-1a.php#comments</comments>
		<pubDate>Tue, 11 May 2010 17:10:36 +0000</pubDate>
		<dc:creator>laqu</dc:creator>
				<category><![CDATA[AS3]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[Box2D]]></category>

		<guid isPermaLink="false">http://blog.puchiplus.com/?p=682</guid>
		<description><![CDATA[久しぶりにBox2Dでも触ろうと思ったらバージョンが2.1aに。 2.0.2から結構変わってたので備忘録として。 とりあえずこの記事と同じものを2.1aで作ってみました。 2.1aからPlayer9と10でわかれたっぽい。ライブラリはこちらから。 今回はPlayer9の方で作りました。 ご覧になるには最新のFlashPlayerが必要です。 // 2.0.2と見比べながら。まずは2.0.2ではあったb2AABBクラスが不要に。 b2Worldのコンストラクタの第一引数にいれてたけどそれもなくなりました。 //2.0.2 var worldAABB : b2AABB = new b2AABB(); worldAABB.lowerBound.Set( -100, -100); worldAABB.upperBound.Set(100, 100); var world : b2World = new b2World(worldAABB, gravity, true); //2.1a var world : b2World = new b2World(gravity, true); 2.1aで重要になってくるのがb2FixtureDefクラス。ドキュメントには A fixture definition is used to create a fixture. This class defines an abstract [...]]]></description>
			<content:encoded><![CDATA[<p>久しぶりにBox2Dでも触ろうと思ったらバージョンが2.1aに。<br />
2.0.2から結構変わってたので備忘録として。</p>
<p>とりあえず<a href="http://blog.puchiplus.com/2009/04/box2d.php" target="_blank">この記事</a>と同じものを2.1aで作ってみました。<br />
2.1aからPlayer9と10でわかれたっぽい。<a href="http://sourceforge.net/projects/box2dflash/files/" target="_blank">ライブラリはこちら</a>から。<br />
今回はPlayer9の方で作りました。</p>
<p><span id="more-682"></span></p>
<div style="border: 3px solid #00b2ee; margin: 10px 0px; width: 400px; height: 300px;">
<div id="100512">ご覧になるには<a title="Adobe Flash Player ダウンロードセンター" href="http://www.adobe.com/go/getflashplayer_jp" target="blank">最新のFlashPlayer</a>が必要です。
</div>
<p><script type="text/javascript">// <![CDATA[
var params = {};
params.wmode="transparent";
swfobject.embedSWF("http://blog.puchiplus.com/img/jikken/box2d/100512.swf", "100512", "400", "300", "9.0.0", "http://blog.puchiplus.com/img/expressInstall.swf",  params);
// ]]&gt;</script>
</div>
<p>2.0.2と見比べながら。まずは2.0.2ではあったb2AABBクラスが不要に。<br />
b2Worldのコンストラクタの第一引数にいれてたけどそれもなくなりました。</p>
<pre class="brush:as3;wrap-lines: false;">
//2.0.2
var worldAABB : b2AABB = new b2AABB();
worldAABB.lowerBound.Set( -100, -100);
worldAABB.upperBound.Set(100, 100);

var world : b2World = new b2World(worldAABB, gravity, true);

//2.1a
var world : b2World = new b2World(gravity, true);
</pre>
<p>2.1aで重要になってくるのがb2FixtureDefクラス。ドキュメントには</p>
<blockquote><p>A fixture definition is used to create a fixture. This class defines an abstract fixture definition. You can reuse fixture definitions safely. </p></blockquote>
<p>と書いてある。fixtureは【固定具・固定】とかいう意味。このクラスは再利用できて固定具の定義に使うよって意味であってるかな。<br />
上のFlashでいう固定具ってのは壁とかCircleとかBoxとかのオブジェクト。</p>
<p>また、b2Bodyクラスも再利用する。<br />
<blockquote><p>A body definition holds all the data needed to construct a rigid body. You can safely re-use body definitions. </p></blockquote>
<p>rigid bodyもここでいう壁やCircleなどのオブジェクトととらえていいと思う。そういうオブジェクト全てを管理する。</p>
<p>例えばCircleを一つ定義するとなるとこんな感じ。</pre>
<pre class="brush:as3;wrap-lines: false;">
//2.0.2
var circleBodyDef:b2BodyDef = new b2BodyDef();
circleBodyDef.position.Set(100 / m_physScale, 20 / m_physScale);

var circleShapeDef:b2CircleDef = new b2CircleDef();
circleShapeDef.radius = 50 / m_phyScale ;
circleShapeDef.density = 1;             //密度
circleShapeDef.friction = 0.2;          //摩擦
circleShapeDef.restitution = 0.1;     //反発係数

var circleBody:b2Body = world.CreateBody(circleBodyDef);
circleBody.CreateShape(circleShapeDef);
circleBody.SetMassFromShapes();

//2.1a
var bodyDef : b2BodyDef = new b2BodyDef();
var fixtureDef : b2FixtureDef = new b2FixtureDef();
var circleDef : b2CircleShape = new b2CircleShape();
fixtureDef.density = 1;
fixtureDef.friction = 0.2;
fixtureDef.restitution = 0.1;
fixtureDef.shape = circleDef;
bodyDef.type = b2Body.b2_dynamicBody;

circleDef.SetRadius(radius / m_physScale);
bodyDef.position.Set(100 / m_physScale, 20 / m_physScale);
var circleBody : b2Body = world.CreateBody(bodyDef);
circleBody.CreateFixture(fixtureDef);
</pre>
<p>b2FixtureDefインスタンスとb2Bodyインスタンスは再利用ができる。最後にソース全部のっけるのでそこ参照。<br />
またここでいうCircleやBoxなど動かしたいものはb2BodyDefインスタンスのtypeプロパティにb2Body.b2_dynamicBodyを代入する。<br />
uint型なので2を代入してもいい。静的なものはb2_staticBodyか0、kinematicはb2_kinematicBodyか1。<br />
dynamicBodyを代入したあと静的なものを作る場合はちゃんとstaticBodyを代入するのを忘れずに。</p>
<p>あとb2DebugDrawのm_fillAlphaやm_drawScaleプロパティが全てメソッド定義に変わっている。</p>
<pre class="brush:as3;wrap-lines: false;">
//2.0.2
var m_sprite : Sprite = new Sprite();
addChild(m_sprite);
var debugDraw:b2DebugDraw = new b2DebugDraw();
debugDraw.m_fillAlpha = 0.3;
debugDraw.m_drawScale = m_physScale;
debugDraw.m_lineThickness = 1;
debugDraw.m_sprite = m_sprite;
debugDraw.m_drawFlags = b2DebugDraw.e_shapeBit;
world.SetDebugDraw(debugDraw);

//2.1a
var m_sprite : Sprite = new Sprite();
addChild(m_sprite);
var debugDraw : b2DebugDraw = new b2DebugDraw();
debugDraw.SetFillAlpha(0.3);
debugDraw.SetDrawScale(m_physScale);
debugDraw.SetLineThickness(1);
debugDraw.SetSprite(m_sprite);
debugDraw.SetFlags(b2DebugDraw.e_shapeBit);
world.SetDebugDraw(debugDraw);
</pre>
<p>以下全ソースです。ちょっと触ってみただけなので間違いなどあれば指摘ください</p>
<pre class="brush:as3;wrap-lines: false;">
package
{
	import Box2D.Collision.Shapes.b2CircleShape;
	import Box2D.Collision.Shapes.b2PolygonShape;
	import Box2D.Common.Math.b2Vec2;
	import Box2D.Dynamics.b2Body;
	import Box2D.Dynamics.b2BodyDef;
	import Box2D.Dynamics.b2DebugDraw;
	import Box2D.Dynamics.b2FixtureDef;
	import Box2D.Dynamics.b2World;

	import fl.controls.Button;

	import flash.display.Sprite;
	import flash.events.Event;
	import flash.events.MouseEvent;

	/**
	 * @author laqu
	 */
	public class Index extends Sprite
	{
		const WIDTH : uint = 400;
		const HEIGHT : uint = 300;
		const OBJ_NUM : uint = 20;

		private var _world : b2World;
		private var _fixtureDef : b2FixtureDef;
		private var _m_physScale : uint = 100;
		private var _m_sprite : Sprite;
		private var _m_iterations : int = 10;
		private var _m_timeStep : Number = 1 / 30;
		private var _m_positionIterations : uint = 10;
		private var _objArr : Array = [];
		private var _btn:Button;

		public function Index()
		{
			init();
		}

		private function init() : void
		{
			var i : uint;
			var gravity : b2Vec2 = new b2Vec2(0, 10);

			_world = new b2World(gravity, true);
			_fixtureDef = new b2FixtureDef();

			var bodyDef : b2BodyDef = new b2BodyDef();

			//壁・上下左右
			var wallBody : b2Body;
			var wallDef : b2PolygonShape = new b2PolygonShape();
			var wallWidth : Array = [WIDTH / 2,5];
			var wallHeight : Array = [5,HEIGHT / 2];
			var wallX : Array = [WIDTH / 2,0 ,WIDTH / 2,WIDTH];
			var wallY : Array = [0,HEIGHT / 2,HEIGHT,HEIGHT / 2];
			_fixtureDef.density = 1;
			_fixtureDef.friction = 1;
			_fixtureDef.shape = wallDef;

			for(i = 0;i < 4;i++)
			{
				bodyDef.position.Set(wallX[i] / _m_physScale, wallY[i] / _m_physScale);
				wallDef.SetAsBox(wallWidth[i % 2] / _m_physScale, wallHeight[i % 2] / _m_physScale);
				wallBody = _world.CreateBody(bodyDef);
				wallBody.CreateFixture(_fixtureDef);
			}

			//Circle
			var circleDef : b2CircleShape = new b2CircleShape();
			_fixtureDef.friction = 10;
			_fixtureDef.density = 10;
			_fixtureDef.restitution = 0.9;
			_fixtureDef.shape = circleDef;
			bodyDef.type = b2Body.b2_dynamicBody;

			for(i = 0;i < OBJ_NUM;i++)
			{
				var radius : uint = Math.random() * 20 + 10;
				circleDef.SetRadius(radius / _m_physScale);
				bodyDef.position.Set(Math.random() * WIDTH / _m_physScale, Math.random() * HEIGHT / _m_physScale);
				var circleBody : b2Body = _world.CreateBody(bodyDef);
				circleBody.CreateFixture(_fixtureDef);
				_objArr.push(circleBody);
			}

			//Box
			var boxDef : b2PolygonShape = new b2PolygonShape();
			_fixtureDef.friction = 1;
			_fixtureDef.density = 1;
			_fixtureDef.restitution = 0.1;
			_fixtureDef.shape = boxDef;
			bodyDef.type = b2Body.b2_dynamicBody;

			for(i = 0;i < OBJ_NUM;i++)
			{
				var boxWidth : uint = Math.random() * 20 + 5;
				var boxHeight : uint = Math.random() * 20 + 5;
				boxDef.SetAsBox(boxWidth / _m_physScale, boxHeight / _m_physScale);
				bodyDef.position.Set(Math.random() * WIDTH / _m_physScale,Math.random() * HEIGHT / _m_physScale);
				var boxBody:b2Body = _world.CreateBody(bodyDef);
				boxBody.CreateFixture(_fixtureDef);
				_objArr.push(boxBody);
			}

			//DebugDraw
			_m_sprite = new Sprite();
			addChild(_m_sprite);

			var debugDraw : b2DebugDraw = new b2DebugDraw();
			debugDraw.SetSprite(_m_sprite);
			debugDraw.SetFillAlpha(0.3);
			debugDraw.SetDrawScale(_m_physScale);
			debugDraw.SetLineThickness(1);
			debugDraw.SetFlags(b2DebugDraw.e_shapeBit);
			_world.SetDebugDraw(debugDraw);

			addEventListener(Event.ENTER_FRAME, update);

			//Btn
			_btn = new Button();
			_btn.label = "Button";
			_btn.x = _btn.y = 20;
			_btn.addEventListener(MouseEvent.CLICK, btnClick);
			addChild(_btn);
		}

		//ボタンをクリックしたら上方向に力を加える
		private function btnClick(e : MouseEvent) : void
		{
			for(var  i : uint = 0;i < OBJ_NUM*2;i++)
			{
				var body:b2Body = _objArr[i] as b2Body;
				body.SetLinearVelocity(new b2Vec2(0,-Math.random()*10));
				//SetAwakeしないと全てのオブジェクトが静止した場合に動かない
				body.SetAwake(true);
			}
		}

		//レンダリング
		private function update(e : Event) : void
		{
			_world.Step(_m_timeStep, _m_iterations, _m_positionIterations);
			_world.ClearForces();
			_world.DrawDebugData();
		}
	}
}
</pre>
]]></content:encoded>
			<wfw:commentRss>http://blog.puchiplus.com/2010/05/box2d-2-1a.php/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>FLVPlaybackのサウンドボタンを制御する</title>
		<link>http://blog.puchiplus.com/2010/04/flvplayback_skin_sound.php</link>
		<comments>http://blog.puchiplus.com/2010/04/flvplayback_skin_sound.php#comments</comments>
		<pubDate>Sun, 25 Apr 2010 16:00:42 +0000</pubDate>
		<dc:creator>laqu</dc:creator>
				<category><![CDATA[AS3]]></category>
		<category><![CDATA[Flash]]></category>

		<guid isPermaLink="false">http://blog.puchiplus.com/?p=585</guid>
		<description><![CDATA[FLVPlaybackでデフォルトサウンドON・OFFをユーザーに設定させたい場合があったりします。 サンプル作ってみました。サウンドは【void productions】さんのを利用させていただきました。 ムービーは【ayato@web】さんを見ながら作ってみました。AEとかほとんど触ったことないけど。 ご覧になるには最新のFlashPlayerが必要です。 // ラジオボタンON・OFF切り替え後、LoadMovieボタンをクリックでムービーを読み込みます。 以下LoadMovieクリック後のソース抜粋です。_soundGroupはON・OFFのRadioButtonGroupです。 //ラジオボタンがOFFだったら if(_soundGroup.selection.value == "sound_off") { var on_mc : Sprite = _player.muteButton.getChildAt(0) as Sprite; on_mc.dispatchEvent(new MouseEvent(MouseEvent.CLICK)); } ただし、これはスキン内のインスタンスを参照しているのでスキンが読み込まれた後じゃないとエラーがでます。 スキンが読み込まれたかどうかはVideoEvent.SKIN_LOADEDを使用します。 以下LoadMovieクリック後の流れ。 実際にはローディングテキストなど他の処理も含まれていますが今回はその辺は重要じゃないので省きます。 private function loadFlv(e : MouseEvent) : void { _player = new FLVPlayback(); _player.setSize(420, 280); _player.skin = "スキンのパス"; _player.source = "ムービーのパス"; _player.autoPlay = true; _player.addEventListener(VideoEvent.COMPLETE, complete); _player.addEventListener(VideoEvent.READY, videoReady); [...]]]></description>
			<content:encoded><![CDATA[<p>
FLVPlaybackでデフォルトサウンドON・OFFをユーザーに設定させたい場合があったりします。<br />
サンプル作ってみました。サウンドは<a href="http://www.void-productions.com/" target="_blank">【void productions】</a>さんのを利用させていただきました。<br />
ムービーは<a href="http://www.ayatoweb.com/" target="_blank">【ayato@web】</a>さんを見ながら作ってみました。AEとかほとんど触ったことないけど。
</p>
<p><span id="more-585"></span></p>
<div style="border: 3px solid #00b2ee; margin: 10px 0px; padding:5px 10px 10px; width: 420px; height: 350px;">
<div id="100425">ご覧になるには<a title="Adobe Flash Player ダウンロードセンター" href="http://www.adobe.com/go/getflashplayer_jp" target="blank">最新のFlashPlayer</a>が必要です。
</div>
<p><script type="text/javascript">// <![CDATA[
var params = {};
params.wmode="transparent";
swfobject.embedSWF("http://blog.puchiplus.com/img/jikken/flvplayback/index.swf", "100425", "420", "350", "9.0.0", "http://blog.puchiplus.com/img/expressInstall.swf",  params);
// ]]&gt;</script>
</div>
<p>
ラジオボタンON・OFF切り替え後、LoadMovieボタンをクリックでムービーを読み込みます。<br />
以下LoadMovieクリック後のソース抜粋です。_soundGroupはON・OFFの<a href="http://help.adobe.com/ja_JP/AS3LCR/Flash_10.0/fl/controls/RadioButtonGroup.html" target="_blank">RadioButtonGroup</a>です。
</p>
<pre class="brush:as3;wrap-lines: false;">
//ラジオボタンがOFFだったら
if(_soundGroup.selection.value == "sound_off")
{
	var on_mc : Sprite = _player.muteButton.getChildAt(0) as Sprite;
	on_mc.dispatchEvent(new MouseEvent(MouseEvent.CLICK));
}
</pre>
<p>
ただし、これはスキン内のインスタンスを参照しているのでスキンが読み込まれた後じゃないとエラーがでます。<br />
スキンが読み込まれたかどうかは<a href="http://help.adobe.com/ja_JP/AS3LCR/Flash_10.0/fl/video/VideoEvent.html#SKIN_LOADED" target="_blank">VideoEvent.SKIN_LOADED</a>を使用します。<br />
以下LoadMovieクリック後の流れ。<br />
実際にはローディングテキストなど他の処理も含まれていますが今回はその辺は重要じゃないので省きます。
</p>
<pre class="brush:as3;wrap-lines: false;">
private function loadFlv(e : MouseEvent) : void
{
	_player = new FLVPlayback();
	_player.setSize(420, 280);
	_player.skin = "スキンのパス";
	_player.source = "ムービーのパス";
	_player.autoPlay = true;
	_player.addEventListener(VideoEvent.COMPLETE, complete);
	_player.addEventListener(VideoEvent.READY, videoReady);
	_player.addEventListener(VideoEvent.SKIN_LOADED, skinLoaded);
}

private function skinLoaded(e : VideoEvent) : void
{
	_player.removeEventListener(VideoEvent.SKIN_LOADED, skinLoaded);

	//ラジオボタンがOFFだったら
	if(_soundGroup.selection.value == "sound_off")
	{
		var on_mc : Sprite = _player.muteButton.getChildAt(0) as Sprite;
		on_mc.dispatchEvent(new MouseEvent(MouseEvent.CLICK));
	}
}

private function videoReady(e : VideoEvent) : void
{
	_player.removeEventListener(VideoEvent.READY, videoReady);
	addChild(_player);
}

private function complete(e : VideoEvent) : void
{
	_player.play();
}
</pre>
]]></content:encoded>
			<wfw:commentRss>http://blog.puchiplus.com/2010/04/flvplayback_skin_sound.php/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>FlashからRubyに値を受け渡す</title>
		<link>http://blog.puchiplus.com/2010/04/flash_ruby.php</link>
		<comments>http://blog.puchiplus.com/2010/04/flash_ruby.php#comments</comments>
		<pubDate>Sat, 24 Apr 2010 20:12:06 +0000</pubDate>
		<dc:creator>laqu</dc:creator>
				<category><![CDATA[AS3]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[Ruby]]></category>

		<guid isPermaLink="false">http://blog.puchiplus.com/?p=551</guid>
		<description><![CDATA[FlashからRubyに値を受け渡す。FlashからPHPとかはよく見かけるけど。 まずはFlash側。 package classes { import flash.display.Sprite; import flash.events.Event; import flash.net.URLLoader; import flash.net.URLLoaderDataFormat; import flash.net.URLRequest; import flash.net.URLRequestMethod; import flash.net.URLVariables; public class Index extends Sprite { private var _urlLoader : URLLoader; private var _req : URLRequest; private var _variables : URLVariables; public function Index() { init(); } private function init() : void { _variables = new [...]]]></description>
			<content:encoded><![CDATA[<p>FlashからRubyに値を受け渡す。FlashからPHPとかはよく見かけるけど。</p>
<p><span id="more-551"></span></p>
<p>まずはFlash側。</p>
<pre class="brush:as3;wrap-lines: false;">
package classes
{
	import flash.display.Sprite;
	import flash.events.Event;
	import flash.net.URLLoader;
	import flash.net.URLLoaderDataFormat;
	import flash.net.URLRequest;
	import flash.net.URLRequestMethod;
	import flash.net.URLVariables;

	public class Index extends Sprite
	{
		private var _urlLoader : URLLoader;
		private var _req : URLRequest;
		private var _variables : URLVariables;

		public function Index()
		{
			init();
		}

		private function init() : void
		{
			_variables = new URLVariables();
			_variables.sendData = "huga";

			_req = new URLRequest();
			_req.url = "URLを代入";
			_req.method = URLRequestMethod.POST;
			_req.data = _variables;

			_urlLoader = new URLLoader();
			_urlLoader.dataFormat = URLLoaderDataFormat.VARIABLES;
			_urlLoader.addEventListener(Event.COMPLETE, complete);
			_urlLoader.load(_req);
		}

		private function complete(e : Event) : void
		{
			_urlLoader.removeEventListener(Event.COMPLETE, complete);

			var data : URLVariables = new URLVariables(_urlLoader.data);
			trace(data.reciveData);
		}
	}
}
</pre>
<p>Ruby側。</p>
<pre class="brush:ruby;">
#!/usr/bin/env ruby

require 'cgi'

print "Content-type:text/plain\n\n"

cgi = CGI.new
hoge = cgi["sendData"]
print "reciveData=" + hoge
</pre>
<p>パブリッシュしてhugaと出ればOK。<br />
まあ、簡単ですよね。</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.puchiplus.com/2010/04/flash_ruby.php/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>jiglib 3D Physics Engine #2</title>
		<link>http://blog.puchiplus.com/2009/10/jiglib-3d-physics-engine-2.php</link>
		<comments>http://blog.puchiplus.com/2009/10/jiglib-3d-physics-engine-2.php#comments</comments>
		<pubDate>Sun, 11 Oct 2009 05:06:30 +0000</pubDate>
		<dc:creator>laqu</dc:creator>
				<category><![CDATA[AS3]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[jiglib]]></category>

		<guid isPermaLink="false">http://blog.puchiplus.com/?p=514</guid>
		<description><![CDATA[メモ ご覧になるには最新のFlashPlayerが必要です。 // package classes { import flash.events.Event; import org.papervision3d.view.BasicView; import org.papervision3d.materials.WireframeMaterial; import org.papervision3d.objects.DisplayObject3D; import org.papervision3d.objects.primitives.Cone; import org.papervision3d.objects.primitives.Plane; import jiglib.plugin.papervision3d.Papervision3DPhysics; import jiglib.plugin.papervision3d.Pv3dMesh; import jiglib.geometry.JBox; [SWF(width="450",height="300",backgroundColor="#ffffff",frameRate="30")] public class Main extends BasicView { private var rootNode : DisplayObject3D; private var physics : Papervision3DPhysics; public static const FROOR_SIZE : uint=2000; public static const CONE_NUM : uint=5; public static [...]]]></description>
			<content:encoded><![CDATA[<p>メモ</p>
<p><span id="more-514"></span></p>
<div style="border: 3px solid #00b2ee; margin: 10px 0px; width: 450px; height: 300px;">
<div id="jiglib2">ご覧になるには<a title="Adobe Flash Player ダウンロードセンター" href="http://www.adobe.com/go/getflashplayer_jp" target="blank">最新のFlashPlayer</a>が必要です。
</div>
<p><script type="text/javascript">// <![CDATA[
var params = {};
params.wmode="transparent";
swfobject.embedSWF("http://blog.puchiplus.com/img/jikken/jiglib/jiglib_2.swf", "jiglib2", "450", "300", "9.0.0", "http://blog.puchiplus.com/img/expressInstall.swf",  params);
// ]]&gt;</script>
</div>
<p><!--more--></p>
<pre class="brush:as3;wrap-lines: false;">
package classes
{
	import flash.events.Event;

	import org.papervision3d.view.BasicView;
	import org.papervision3d.materials.WireframeMaterial;
	import org.papervision3d.objects.DisplayObject3D;
	import org.papervision3d.objects.primitives.Cone;
	import org.papervision3d.objects.primitives.Plane;

	import jiglib.plugin.papervision3d.Papervision3DPhysics;
	import jiglib.plugin.papervision3d.Pv3dMesh;
	import jiglib.geometry.JBox;

	[SWF(width="450",height="300",backgroundColor="#ffffff",frameRate="30")]

	public class Main extends BasicView
	{
		private var rootNode : DisplayObject3D;
		private var physics : Papervision3DPhysics;

		public static const FROOR_SIZE : uint=2000;
		public static const CONE_NUM : uint=5;
		public static const CONE_RADIUS : uint=80;
		public static const CONE_HEIGHT : uint=200;

		public function Main():void
		{
			super(450,300,false);
			init();
		}

		private function init():void
		{
			camera.y = 400;
			camera.z = -1500;

			rootNode = new DisplayObject3D  ;
			scene.addChild(rootNode);

			physics = new Papervision3DPhysics(rootNode,9.8);

			var floor:Plane = new Plane(new WireframeMaterial(0),FROOR_SIZE,FROOR_SIZE);
			rootNode.addChild(floor);
			var floorBox : JBox=new JBox(new Pv3dMesh(floor),FROOR_SIZE,1,FROOR_SIZE);
			floorBox.y = -500;
			floorBox.rotationX = 90;
			floorBox.movable = false;
			physics.addBody(floorBox);

			for (var i : uint = 0; i < cone_NUM; i++)
			{
				var cone : Cone = new Cone(new WireframeMaterial(0xFF0000),CONE_RADIUS,CONE_HEIGHT,6,4);
				scene.addChild(cone);
				var coneBox : JBox = new JBox(new Pv3dMesh(cone),CONE_RADIUS*2,CONE_RADIUS*2,CONE_HEIGHT);
				coneBox.y = 1000;
				coneBox.friction = 0.2;
				coneBox.restitution = 1.2;
				physics.addBody(coneBox);
			}

			startRendering();
		}

		protected override function onRenderTick(e:Event=null):void
		{
			physics.step();
			super.onRenderTick(e);
		}
	}
}
</pre>
]]></content:encoded>
			<wfw:commentRss>http://blog.puchiplus.com/2009/10/jiglib-3d-physics-engine-2.php/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>jiglib 3D Physics Engine #1</title>
		<link>http://blog.puchiplus.com/2009/07/jiglib-3d-physics-engine.php</link>
		<comments>http://blog.puchiplus.com/2009/07/jiglib-3d-physics-engine.php#comments</comments>
		<pubDate>Wed, 29 Jul 2009 01:46:46 +0000</pubDate>
		<dc:creator>laqu</dc:creator>
				<category><![CDATA[AS3]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[jiglib]]></category>
		<category><![CDATA[Papervision3D]]></category>

		<guid isPermaLink="false">http://blog.puchiplus.com/?p=498</guid>
		<description><![CDATA[3ヶ月以上空いてしまいました。 jiglib 3D Physics Engineという各種3Dライブラリで物理シミュレーションを行うことができるライブラリを触ってみました。 対応している3Dライブラリはjiglibのバージョンr92の時点でPapervision3D・Away3D・Sandyの3つ。 自分はPV3Dしか使ったことないのでPV3D+jiglibの環境です。 ご覧になるには最新のFlashPlayerが必要です。 // package { import flash.events.Event; import org.papervision3d.view.BasicView; import org.papervision3d.materials.WireframeMaterial; import org.papervision3d.materials.utils.MaterialsList; import org.papervision3d.objects.DisplayObject3D; import jiglib.plugin.papervision3d.Papervision3DPhysics; import jiglib.physics.RigidBody; import net.hires.debug.Stats; /** * @author laqu */ public class Main extends BasicView { private var rootNode:DisplayObject3D; private var physics:Papervision3DPhysics; private var floor:RigidBody; public static const CUBE_SIZE:uint=150; public static const CUBE_NUM:uint=15; [...]]]></description>
			<content:encoded><![CDATA[<p>3ヶ月以上空いてしまいました。</p>
<p><a href="http://www.jiglibflash.com/blog/" target="_blank">jiglib 3D Physics Engine</a>という各種3Dライブラリで物理シミュレーションを行うことができるライブラリを触ってみました。</p>
<p>対応している3Dライブラリはjiglibのバージョンr92の時点でPapervision3D・Away3D・Sandyの3つ。</p>
<p>自分はPV3Dしか使ったことないのでPV3D+jiglibの環境です。</p>
<p><span id="more-498"></span></p>
<div style="border: 3px solid #00b2ee; margin: 10px 0px; width: 450px; height: 300px;">
<div id="jiglib1">ご覧になるには<a title="Adobe Flash Player ダウンロードセンター" href="http://www.adobe.com/go/getflashplayer_jp" target="blank">最新のFlashPlayer</a>が必要です。
</div>
<p><script type="text/javascript">// <![CDATA[
var params = {};
params.wmode="transparent";
swfobject.embedSWF("http://blog.puchiplus.com/img/jikken/jiglib/jiglib_1.swf", "jiglib1", "450", "300", "9.0.0", "http://blog.puchiplus.com/img/expressInstall.swf",  params);
// ]]&gt;</script>
</div>
<pre class="brush:as3;wrap-lines: false;">
package
{
	import flash.events.Event;

	import org.papervision3d.view.BasicView;
	import org.papervision3d.materials.WireframeMaterial;
	import org.papervision3d.materials.utils.MaterialsList;
	import org.papervision3d.objects.DisplayObject3D;

	import jiglib.plugin.papervision3d.Papervision3DPhysics;
	import jiglib.physics.RigidBody;

	import net.hires.debug.Stats;

	/**
	 * @author laqu
	 */
	public class Main extends BasicView
	{
		private var rootNode:DisplayObject3D;
		private var physics:Papervision3DPhysics;
		private var floor:RigidBody;

		public static const CUBE_SIZE:uint=150;
		public static const CUBE_NUM:uint=15;

		//Constructor
		public function Main():void
		{
			super(450,300,false);
			stage.quality=&quot;low&quot;;
			init();
		}

		private function init() : void
		{
			addChild(new Stats());

			rootNode=new DisplayObject3D();
			scene.addChild(rootNode);

			camera.y=400;
			camera.z=-2000;

			physics=new Papervision3DPhysics(rootNode,9.8);

			//Create Floor
			floor=physics.createGround(new WireframeMaterial(0), 2000, 0);
			floor.y=-500;

			//Create Cubes
			for(var i:uint=0;i &lt; Main.CUBE_NUM;i++)
			{
				var matlist:MaterialsList=new MaterialsList();
				matlist.addMaterial(new WireframeMaterial(Math.random()*0xffffff),&quot;all&quot;);
				var cube:RigidBody=physics.createCube(matlist, Main.CUBE_SIZE, Main.CUBE_SIZE, Main.CUBE_SIZE);
				cube.restitution=1.2;
				cube.friction=0.2;
				cube.y = Main.CUBE_SIZE * i+1000;
			}

			//Rendering Start
			startRendering();
		}

		protected override function onRenderTick(e:Event=null) : void
		{
			rootNode.rotationY+=(stage.stageWidth/2-stage.mouseX)/70;
			physics.step();
			super.onRenderTick(e);
		}
	}
}
</pre>
<p>以下ソースです。<br />
PV3Dを使用する場合はPapervision3DPhysicsクラスでまず物理のワールドを作ります。</p>
<pre name="code" class="actionscript">
physics=new Papervision3DPhysics(rootNode,9.8);
</pre>
<p>第1引数はDisplayObjectContainer3Dなのでsceneでもいいんですが、別途事前にDisplayObject3Dを作っておいてそれを割り当てておきます。<br />
第2引数は重力です。
</p>
<p>
続いて地面を作ります。使うクラスはRigidBodyというクラス。<br />
Papervision3DPhysicsにはcreateGround・createCube・createSphereというメソッドが用意されておりそれらを利用し3Dのオブジェクトを作っていきます。（PV3Dでオブジェクトを作っておいてそれを利用することもできるのですが、それはまた今度）</p>
<pre name="code" class="actionscript">
floor=physics.createGround(new WireframeMaterial(0), 2000, 0);
</pre>
<p>第2引数はサイズなんですがそれはあくまで第1引数で指定したマテリアルが表示されるサイズであって地面は延々と続いています、はず。
</p>
<p>
次にオブジェクトを作ってみます。</p>
<pre name="code" class="actionscript">
var cube:RigidBody=physics.createCube(matlist, Main.CUBE_SIZE, Main.CUBE_SIZE, Main.CUBE_SIZE);
</pre>
</p>
<p>
最後にenterFrame内でPapervision3DPhysicsのstepメソッドを実行します。<br />
これ忘れると動かない。</p>
<pre name="code" class="actionscript">
physics.step();
</pre></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.puchiplus.com/2009/07/jiglib-3d-physics-engine.php/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Box2D 2.0.2触ってみた</title>
		<link>http://blog.puchiplus.com/2009/04/box2d.php</link>
		<comments>http://blog.puchiplus.com/2009/04/box2d.php#comments</comments>
		<pubDate>Sat, 18 Apr 2009 11:39:53 +0000</pubDate>
		<dc:creator>laqu</dc:creator>
				<category><![CDATA[AS3]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[Box2D]]></category>

		<guid isPermaLink="false">http://blog.puchiplus.com/?p=472</guid>
		<description><![CDATA[2010/5/12 : Box2d 2.1a版を書きました 今さらですがBox2Dやってみました。というか仕事で物理演算使わなきゃいけなかったので触らざるを得なかったというか。 Box2Dのバージョンは2.0.2です。 ご覧になるには最新のFlashPlayerが必要です。 var params = {}; params.wmode="transparent"; swfobject.embedSWF("http://blog.puchiplus.com/img/jikken/box2d/test_202.swf", "box2d1", "450", "300", "9.0.0", "http://blog.puchiplus.com/img/expressInstall.swf", params); PV3Dとか他のライブラリとちょっと勝手が違うので最初とまどいましたが。 サンプルのはボックスとサークルを20個ずつNewしてボックスの質量をサークルの質量の100倍にしてます。 ボタンを押したら上下左右ランダムに力を加えてあげてます。 PV3Dとか組み合わせたらおもしろそう。 以下汚いですけどソースです。 （一度全ソース載せましたが長くて表示が遅くなってしまったのでボタン部分とボックス部分、他をちょっと削除します。。） import Box2D.Collision.*; import Box2D.Collision.Shapes.*; import Box2D.Common.Math.*; import Box2D.Common.*; import Box2D.Dynamics.*; import Box2D.Common.Math.b2Vec2; public class Main extends Sprite { private var m_physScale:uint = 100; private var world:b2World; private var m_sprite:Sprite; private [...]]]></description>
			<content:encoded><![CDATA[<div class="link_no_color" style="font-weight:bold; font-size:16px; margin:10px 0; padding:10px; background:#E0EEEE"><a href="http://blog.puchiplus.com/2010/05/box2d-2-1a.php">2010/5/12 : Box2d 2.1a版を書きました</a></div>
<p>
今さらですが<a href="http://box2dflash.sourceforge.net/" target="_blank">Box2D</a>やってみました。というか仕事で物理演算使わなきゃいけなかったので触らざるを得なかったというか。<br />
Box2Dのバージョンは2.0.2です。
</p>
<p><span id="more-472"></span></p>
<div style="margin:10px 0 ; border:solid 3px #00B2EE; width:450px; height:300px">
<div id="box2d1">
ご覧になるには<a href="http://www.adobe.com/go/getflashplayer_jp" target="blank" title="Adobe Flash Player ダウンロードセンター">最新のFlashPlayer</a>が必要です。
</div>
<p><script type="text/javascript">
var params = {};
params.wmode="transparent";
swfobject.embedSWF("http://blog.puchiplus.com/img/jikken/box2d/test_202.swf", "box2d1", "450", "300", "9.0.0", "http://blog.puchiplus.com/img/expressInstall.swf",  params);</script>
</div>
<p>
PV3Dとか他のライブラリとちょっと勝手が違うので最初とまどいましたが。<br />
サンプルのはボックスとサークルを20個ずつNewしてボックスの質量をサークルの質量の100倍にしてます。<br />
ボタンを押したら上下左右ランダムに力を加えてあげてます。
</p>
<p>
PV3Dとか組み合わせたらおもしろそう。
</p>
<p>
以下汚いですけどソースです。<br />
（一度全ソース載せましたが長くて表示が遅くなってしまったのでボタン部分とボックス部分、他をちょっと削除します。。）
</p>
<pre class="brush:as3;wrap-lines: false;">
	import Box2D.Collision.*;
	import Box2D.Collision.Shapes.*;
	import Box2D.Common.Math.*;
	import Box2D.Common.*;
	import Box2D.Dynamics.*;
	import Box2D.Common.Math.b2Vec2;

	public class Main extends Sprite
	{
		private var m_physScale:uint = 100;
		private var world:b2World;
		private var m_sprite:Sprite;
		private var m_iterations:int = 10;
		private var m_timeStep:Number = 1 / 30;

		public function Main():void
		{
			init();
		}

		private function init():void
		{
			var worldAABB:b2AABB = new b2AABB();
			worldAABB.lowerBound.Set( -100, -100);
			worldAABB.upperBound.Set(100, 100);

			var gravity:b2Vec2 = new b2Vec2(0, 9.8);

			world = new b2World(worldAABB, gravity, true);

			var wxArr:Array = [0, stage.stageWidth, stage.stageWidth / 2, stage.stageWidth / 2];
			var wyArr:Array = [stage.stageHeight / 2, stage.stageHeight / 2, 0, stage.stageHeight];
			var wwArr:Array = [10, 10, stage.stageWidth, stage.stageWidth];
			var whArr:Array = [stage.stageHeight, stage.stageHeight, 10, 10];

			//Wall
			for (var j:uint = 0; j < 4; j++)
			{
				var floorBodyDef:b2BodyDef = new b2BodyDef();
				floorBodyDef.position.Set(wxArr[j] / m_physScale, wyArr[j] / m_physScale);

				var floorShapeDef:b2PolygonDef = new b2PolygonDef();
				floorShapeDef.SetAsBox(wwArr[j] / 2 / m_physScale, whArr[j]/2 / m_physScale);

				var floorBody:b2Body = world.CreateBody(floorBodyDef);
				floorBody.CreateShape(floorShapeDef);
			}

			//Circle
			for (var i:uint = 0; i < 20; i++)
			{
				var circleBodyDef:b2BodyDef = new b2BodyDef();
				circleBodyDef.position.Set(stage.stageWidth / 2 / m_physScale, 200 / m_physScale);

				var circleShapeDef:b2CircleDef = new b2CircleDef();
				circleShapeDef.radius = Math.random()*0.3+0.05;
				circleShapeDef.density = 1;
				circleShapeDef.friction = 0.5;
				circleShapeDef.restitution = 0.5;

				var circleBody:b2Body = world.CreateBody(circleBodyDef);
				circleBody.CreateShape(circleShapeDef);
				circleBody.SetMassFromShapes();
			}

			//Debug
			m_sprite = new Sprite();
			var debugDraw:b2DebugDraw = new b2DebugDraw();
			debugDraw.m_fillAlpha = 0.3;
			debugDraw.m_drawScale = m_physScale;
			debugDraw.m_lineThickness = 1;
			debugDraw.m_sprite = m_sprite;
			debugDraw.m_drawFlags = b2DebugDraw.e_shapeBit | b2DebugDraw.e_jointBit;
			world.SetDebugDraw(debugDraw);
			addChild(m_sprite);

			addEventListener(Event.ENTER_FRAME, update);
		}

		private function update(e:Event):void
		{
			world.Step(m_timeStep, m_iterations);
		}
	}
</pre>
]]></content:encoded>
			<wfw:commentRss>http://blog.puchiplus.com/2009/04/box2d.php/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>TextMate買った</title>
		<link>http://blog.puchiplus.com/2009/04/textmate.php</link>
		<comments>http://blog.puchiplus.com/2009/04/textmate.php#comments</comments>
		<pubDate>Sat, 18 Apr 2009 10:51:10 +0000</pubDate>
		<dc:creator>laqu</dc:creator>
				<category><![CDATA[AS3]]></category>
		<category><![CDATA[Ruby]]></category>

		<guid isPermaLink="false">http://blog.puchiplus.com/?p=459</guid>
		<description><![CDATA[2ヶ月ぶりの更新になってしまいました。 最近Rubyを勉強し始めましてMac用のいいエディタないかなーと思っていろいろ試して最終的にいきついたのがTextMate。 他に試したのはAptanaやNetBeansとかのいわゆるIDE。この2つはフリーで使えるんだけどTextMateはTrial期間1ヶ月が終わったら有料。日本円で5000円くらい。 やっぱりIDEは他にいろいろアプリ立ち上げてたら重くなっちゃう(自分の環境では)のでTextMateにしました。 ただしTextMateはデフォルトでは日本語が打てない。この辺を見ながらなんとか日本語打てるようになったけど文字幅が細い・・けど今んとこ解決方法が他にないのでしょうがないですが。 一応AS3の補完なんかもやってくれるんですがFlashDevelopには適わないのでASは当分FDで。 Flash→Ruby→XML→FlashとかFlash→Ruby→MySQLとかやって遊んでる感じです。 別にプログラマになりたいわけじゃないんだけどサーバーサイドもやれたら幅が広がるしなーと。 PHPもちょっとやったことはあるんですが自分にはRubyの方がしっくりきたんでRubyをやることに。 なのでRuby関連のエントリも書けたら書いていこうと思います。]]></description>
			<content:encoded><![CDATA[<div style="margin:0 0 10px 0;">
<img src="http://blog.puchiplus.com/img/thumbnail/TextMate_icon.png" alt="TextMate" />
</div>
<p>
2ヶ月ぶりの更新になってしまいました。
</p>
<p>
最近Rubyを勉強し始めましてMac用のいいエディタないかなーと思っていろいろ試して最終的にいきついたのが<a href="http://macromates.com/" title="TextMate" target="_blank">TextMate</a>。<br />
他に試したのは<a href="http://aptana.com/" title="Aptana" target="_blank">Aptana</a>や<a href="http://ja.netbeans.org/" title="NetBeans" target="_blank">NetBeans</a>とかのいわゆるIDE。この2つはフリーで使えるんだけどTextMateはTrial期間1ヶ月が終わったら有料。日本円で5000円くらい。
</p>
<p><span id="more-459"></span></p>
<p>
やっぱりIDEは他にいろいろアプリ立ち上げてたら重くなっちゃう(自分の環境では)のでTextMateにしました。<br />
ただしTextMateはデフォルトでは日本語が打てない。<a href="http://d.hatena.ne.jp/hetima/20061110/1163085746" target="_blank">この辺</a>を見ながらなんとか日本語打てるようになったけど文字幅が細い・・けど今んとこ解決方法が他にないのでしょうがないですが。
</p>
<p>
一応AS3の補完なんかもやってくれるんですがFlashDevelopには適わないのでASは当分FDで。
</p>
<p>
Flash→Ruby→XML→FlashとかFlash→Ruby→MySQLとかやって遊んでる感じです。<br />
別にプログラマになりたいわけじゃないんだけどサーバーサイドもやれたら幅が広がるしなーと。
</p>
<p>
PHPもちょっとやったことはあるんですが自分にはRubyの方がしっくりきたんでRubyをやることに。<br />
なのでRuby関連のエントリも書けたら書いていこうと思います。</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.puchiplus.com/2009/04/textmate.php/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Ribbon3D触ってみた</title>
		<link>http://blog.puchiplus.com/2009/02/ribbon3d.php</link>
		<comments>http://blog.puchiplus.com/2009/02/ribbon3d.php#comments</comments>
		<pubDate>Wed, 18 Feb 2009 18:46:44 +0000</pubDate>
		<dc:creator>laqu</dc:creator>
				<category><![CDATA[AS3]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[Papervision3D]]></category>

		<guid isPermaLink="false">http://blog.puchiplus.com/?p=448</guid>
		<description><![CDATA[PV3Dのブログで紹介されてたRibbon3Dを試してみました。 Audiのサイトで使われてたやつですね。 Soulwireの中の人が作られたのかな？ PV3Dで紹介されてたのをちょっといじっただけですけど。 ご覧になるには最新のFlashPlayerが必要です。 var params = {}; params.wmode="transparent"; swfobject.embedSWF("http://blog.puchiplus.com/img/jikken/pv3d/ribbon/ribbon3d.swf", "ribbon3d", "450", "300", "9.0.0", "http://blog.puchiplus.com/img/expressInstall.swf", params); var ribbon:Ribbon3D = new Ribbon3D(マテリアル, 線の太さ, 長さ); 第3引数の長さはmaxSegementってなってたからまぁそのまんまセグメントの最大数を指定してあげる感じ。 10ならセグメントが10個以上になったら前のは消えていくよってことだと思う。 ほんで描画するときはenterFrame内で ribbon.draw(); って感じでdrawメソッド使えばいい。 ソース抜粋。汚くてすいません。あとBasicView使ってないです。 public function init3d():void { /**** 略 ****/ 　　　　 var light:PointLight3D = new PointLight3D(); light.z = -1000; var material:FlatShadeMaterial = new FlatShadeMaterial(light, 0xFF0000, 0x0099CC); material.doubleSided = [...]]]></description>
			<content:encoded><![CDATA[<p>
<a href="http://pv3d.org/2009/02/17/ribbons/" target="_blank">PV3Dのブログで紹介</a>されてたRibbon3Dを試してみました。<br />
<a href="http://www.rhythmoflines.co.uk/" target="_blank">Audiのサイト</a>で使われてたやつですね。<br />
<a href="http://blog.soulwire.co.uk/" target="_blank">Soulwire</a>の中の人が作られたのかな？
</p>
<p>PV3Dで紹介されてたのをちょっといじっただけですけど。</p>
<p><span id="more-448"></span></p>
<div style="margin:10px 0 ; border:solid 3px #00B2EE; width:450px;">
<div id="ribbon3d">
ご覧になるには<a href="http://www.adobe.com/go/getflashplayer_jp" target="blank" title="Adobe Flash Player ダウンロードセンター">最新のFlashPlayer</a>が必要です。
</div>
<p><script type="text/javascript">
var params = {};
params.wmode="transparent";
swfobject.embedSWF("http://blog.puchiplus.com/img/jikken/pv3d/ribbon/ribbon3d.swf", "ribbon3d", "450", "300", "9.0.0", "http://blog.puchiplus.com/img/expressInstall.swf",  params);</script>
</div>
<pre class="brush:as3;wrap-lines: false;">
var ribbon:Ribbon3D = new Ribbon3D(マテリアル, 線の太さ, 長さ);
</pre>
<p>
第3引数の長さはmaxSegementってなってたからまぁそのまんまセグメントの最大数を指定してあげる感じ。<br />
10ならセグメントが10個以上になったら前のは消えていくよってことだと思う。
</p>
<p>
ほんで描画するときはenterFrame内で</p>
<pre class="brush:as3;wrap-lines: false;">
ribbon.draw();
</pre>
<p>って感じでdrawメソッド使えばいい。
</p>
<p>
ソース抜粋。汚くてすいません。あとBasicView使ってないです。</p>
<pre class="brush:as3;wrap-lines: false;">
public function init3d():void
{
	/**** 略 ****/
　　　　
	var light:PointLight3D = new PointLight3D();
	light.z = -1000;
	var material:FlatShadeMaterial = new FlatShadeMaterial(light, 0xFF0000, 0x0099CC);
	material.doubleSided = true;
	ribbon = new Ribbon3D(material, 6, 160);
	ribbon.useOwnContainer = true;
	ribbon.filters = [new GlowFilter(0x000000, 1, 4, 4, 60)];

	scene.addChild(ribbon);

	addEventListener(Event.ENTER_FRAME, render3d);
}

private function render3d(event:Event):void
{
	//ここで動きつける

	ribbon.draw();
	render.renderScene(scene, camera, viewport);
}
</pre></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.puchiplus.com/2009/02/ribbon3d.php/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Progression講座「最初の2歩目」</title>
		<link>http://blog.puchiplus.com/2009/02/progression-2.php</link>
		<comments>http://blog.puchiplus.com/2009/02/progression-2.php#comments</comments>
		<pubDate>Fri, 06 Feb 2009 18:44:05 +0000</pubDate>
		<dc:creator>laqu</dc:creator>
				<category><![CDATA[AS3]]></category>
		<category><![CDATA[Event]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[Progression]]></category>

		<guid isPermaLink="false">http://blog.puchiplus.com/?p=348</guid>
		<description><![CDATA[書くのがだいぶ遅れちゃったけど1/27に開かれた『Progression講座（クラスベース）「最初の2歩目」』に参加してきました。 道に迷って少し遅れて到着。（超方向音痴なんで） 内容はクラスベースでの制作の基礎的なところ。 あるシーンに配置するページ（MC）をあらかじめライブラリにいれておきクラス書き出し設定しておく（仮にここではAboutPageていうクラス名をつけます） 書き出しておいたAboutPageクラスはCastMovieClipを継承しておく AboutPage内に配置して置いたMCのプロパティを_onCastAdded内でnew Propを使って一括設定 new DoTweenerでアニメーションさせる 順番に実行したいならSerialList、同時に実行するならParallelList AboutPageからステージに配置しておいた『bg』というインスタンス名のMCを参照する =&#62;var bg_mc:MovieClip=MovieClip(Index(CastDocument.root).getChildByName(&#8220;bg&#8221;)); みたいな感じ AboutPageからIndexクラス内の変数を参照する =&#62;Index(CastDocument.root).hoge みたいな感じ みたいな内容でした。私的にはだいたい分かってた内容だったので少し物足りなかったのだけども復習的な感じで良かったです。 今月は３歩目があるそうなので興味のある方は行って見られてはどうでしょうか。]]></description>
			<content:encoded><![CDATA[<p>書くのがだいぶ遅れちゃったけど1/27に開かれた『Progression講座（クラスベース）「最初の2歩目」』に参加してきました。</p>
<p>道に迷って少し遅れて到着。（超方向音痴なんで）</p>
<p>内容はクラスベースでの制作の基礎的なところ。</p>
<p><span id="more-348"></span></p>
<ul style="list-style-type:disc">
<li>あるシーンに配置するページ（MC）をあらかじめライブラリにいれておきクラス書き出し設定しておく（仮にここではAboutPageていうクラス名をつけます）</li>
<li>書き出しておいたAboutPageクラスはCastMovieClipを継承しておく</li>
<li>AboutPage内に配置して置いたMCのプロパティを_onCastAdded内でnew Propを使って一括設定</li>
<li>new DoTweenerでアニメーションさせる</li>
<li>順番に実行したいならSerialList、同時に実行するならParallelList</li>
<li>AboutPageからステージに配置しておいた『bg』というインスタンス名のMCを参照する =&gt;var bg_mc:MovieClip=MovieClip(Index(CastDocument.root).getChildByName(&#8220;bg&#8221;)); みたいな感じ</li>
<li>AboutPageからIndexクラス内の変数を参照する =&gt;Index(CastDocument.root).hoge みたいな感じ</li>
</ul>
<p>みたいな内容でした。私的にはだいたい分かってた内容だったので少し物足りなかったのだけども復習的な感じで良かったです。</p>
<p>今月は３歩目があるそうなので興味のある方は行って見られてはどうでしょうか。</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.puchiplus.com/2009/02/progression-2.php/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>FLARToolKitを触ってみた</title>
		<link>http://blog.puchiplus.com/2009/02/flartoolkit.php</link>
		<comments>http://blog.puchiplus.com/2009/02/flartoolkit.php#comments</comments>
		<pubDate>Mon, 02 Feb 2009 16:34:35 +0000</pubDate>
		<dc:creator>laqu</dc:creator>
				<category><![CDATA[AS3]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[FLARToolKit]]></category>
		<category><![CDATA[Papervision3D]]></category>

		<guid isPermaLink="false">http://blog.puchiplus.com/flartoolkit/</guid>
		<description><![CDATA[Saqooshaさん作のAS3ライブラリ、「FLARToolKit」を触ってみました。 「FLARToolKit」とは「ARToolKit」をAS3に移植したものです。正確にはJAVA版の「NyARToolkit」を移植されたそうです。 で、以前から知ってたんだけどAdobeMax2009でのSparkセッションでのSaqooshaさんのデモを見て触ってみてーっと思ってサンプルをちょこっといじってやってみました。 注）FLARToolKitはGPLライセンスです。要望があったらソースコードを公開しないといけないそうです。使用するときはその辺気をつけて。 作ったのをキャプチャしてみました。（初回の再生が速いかも） ↑くらいのならPapervision3D触ったことある人なら余裕でできるんじゃないかと。 試して見たい人はコレをプリントしてこことかここでやってみるといいよ。 初めて触ったけどWebカムにマーカーが認識されてオブジェクトが表示されたときはちょっと感動。 かなりおもろい。こんなおもしろいライブラリを作ってくださったSaqooshaさんに感謝感謝。今後もなにかつくる。 てかデスクトップのキャプチャとか初めてやったんだけどみんなソフト何使ってるの？]]></description>
			<content:encoded><![CDATA[<p>
<a href="http://saqoosha.net/" target="_blank">Saqooshaさん</a>作のAS3ライブラリ、「<a href="http://www.libspark.org/wiki/saqoosha/FLARToolKit" target="_blank">FLARToolKit</a>」を触ってみました。<br />
「FLARToolKit」とは「<a href="http://dic.nicovideo.jp/a/artoolkit" target="_blank">ARToolKit</a>」をAS3に移植したものです。正確にはJAVA版の「<a href="http://nyatla.jp/nyartoolkit/wiki/" target="_blank">NyARToolkit</a>」を移植されたそうです。
</p>
<p>
で、以前から知ってたんだけどAdobeMax2009でのSparkセッションでのSaqooshaさんのデモを見て触ってみてーっと思ってサンプルをちょこっといじってやってみました。
</p>
<p style="font-weight:bold">
注）FLARToolKitは<a href="http://ja.wikipedia.org/wiki/GNU_General_Public_License#GPL.E3.82.92.E3.82.81.E3.81.90.E3.82.8B.E8.A8.B4.E8.A8.9F" target="_blank">GPL</a>ライセンスです。要望があったらソースコードを公開しないといけないそうです。使用するときはその辺気をつけて。
</p>
<p><span id="more-272"></span></p>
<p>
作ったのをキャプチャしてみました。（初回の再生が速いかも）</p>
<p>
<object width="400" height="302"><param name="allowfullscreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="movie" value="http://vimeo.com/moogaloop.swf?clip_id=3054216&amp;server=vimeo.com&amp;show_title=1&amp;show_byline=1&amp;show_portrait=0&amp;color=00adef&amp;fullscreen=1" /><embed src="http://vimeo.com/moogaloop.swf?clip_id=3054216&amp;server=vimeo.com&amp;show_title=1&amp;show_byline=1&amp;show_portrait=0&amp;color=00adef&amp;fullscreen=1" type="application/x-shockwave-flash" allowfullscreen="true" allowscriptaccess="always" width="400" height="302"></embed></object>
</p>
<p>
<object width="400" height="302"><param name="allowfullscreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="movie" value="http://vimeo.com/moogaloop.swf?clip_id=3054244&amp;server=vimeo.com&amp;show_title=1&amp;show_byline=1&amp;show_portrait=0&amp;color=00adef&amp;fullscreen=1" /><embed src="http://vimeo.com/moogaloop.swf?clip_id=3054244&amp;server=vimeo.com&amp;show_title=1&amp;show_byline=1&amp;show_portrait=0&amp;color=00adef&amp;fullscreen=1" type="application/x-shockwave-flash" allowfullscreen="true" allowscriptaccess="always" width="400" height="302"></embed></object>
</p>
<p>
↑くらいのならPapervision3D触ったことある人なら余裕でできるんじゃないかと。
</p>
<p>
試して見たい人は<a href="http://blog.puchiplus.com/img/jikken/FLARToolKit/1/flar_marker.jpg" target="_blank"><span style="font-weight:bold">コレ</span></a>をプリントして<a href="http://blog.puchiplus.com/img/jikken/FLARToolKit/1/FLAR_1.swf" target="_blank"><span style="font-weight:bold">ここ</span></a>とか<a href="http://blog.puchiplus.com/img/jikken/FLARToolKit/1/FLAR_2.swf" target="_blank"><span style="font-weight:bold">ここ</span></a>でやってみるといいよ。
</p>
<p>
初めて触ったけどWebカムにマーカーが認識されてオブジェクトが表示されたときはちょっと感動。<br />
かなりおもろい。こんなおもしろいライブラリを作ってくださったSaqooshaさんに感謝感謝。今後もなにかつくる。
</p>
<p>
てかデスクトップのキャプチャとか初めてやったんだけどみんなソフト何使ってるの？</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.puchiplus.com/2009/02/flartoolkit.php/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

