<?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>tmdf.net</title>
	<atom:link href="http://tmdf.net/blog/feed" rel="self" type="application/rss+xml" />
	<link>http://tmdf.net/blog</link>
	<description>Takaaki Morita Blog</description>
	<lastBuildDate>Tue, 24 Jan 2012 16:31:58 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.2</generator>
<image>
  <link>http://tmdf.net/blog</link>
  <url>http://tmdf.net/blog/../favicon.ico</url>
  <title>tmdf.net</title>
</image>
		<item>
		<title>CS5でFlashPlayer10.2</title>
		<link>http://tmdf.net/blog/20110513_cs5-fp102.html</link>
		<comments>http://tmdf.net/blog/20110513_cs5-fp102.html#comments</comments>
		<pubDate>Thu, 12 May 2011 16:14:36 +0000</pubDate>
		<dc:creator>tmdf</dc:creator>
				<category><![CDATA[Flash / ActionScript]]></category>
		<category><![CDATA[ActionScript]]></category>

		<guid isPermaLink="false">http://www.tmdf.net/blog/?p=2387</guid>
		<description><![CDATA[数カ月ぶりの投稿。もうすぐCS5.5が出るので必要な方は限られると思いますが、Adobe Flash Professional CS5を使ってFlashPlayer10.2のAPIを使ったswfを書き出す方法です。何か不 [...]]]></description>
			<content:encoded><![CDATA[<p>数カ月ぶりの投稿。もうすぐCS5.5が出るので必要な方は限られると思いますが、Adobe Flash Professional CS5を使ってFlashPlayer10.2のAPIを使ったswfを書き出す方法です。何か不具合があっても自己責任でお願いします。</p>
<p>「<a href="http://rhuno.com/flashblog/2011/04/04/how-to-compile-for-flash-player-10-2-with-flash-cs5/">Rhuno Flash Blog > How to compile for Flash Player 10.2 with Flash CS5</a>」を日本語訳しただけだと思ってください。簡単な英語が読める方は、上記のリンク先ページの最後の方に、必要なファイルと手順をまとめてくれているzipファイルがあるのでそれを使うと楽です。コメント欄に追記があるのでちゃんと見てください。</p>
<p>そうでない方は以下の手順。<br />
元のページがWin向けだったので、ここではMac向けに書きます。</p>
<h4>1. FlexSDKのダウンロード</h4>
<p><a href="http://opensource.adobe.com/wiki/display/flexsdk/Download+Flex+4.5">ここ</a>からFlexSDK（2011.5.13時点では4.5.0.20967が最新）をダウンロード。「Adobe Flex SDK」で大丈夫です。</p>
<h4>2. playerglobal.swcのコピー</h4>
<p>「/アプリケーション/Adobe Flash CS5/Common/Configuration/ActionScript 3.0」に「FP10.2」フォルダを作成し、その中に先ほどダウンロードした「flex_sdk_4.5.0.20967/frameworks/libs/player/10.2/playerglobal.swc」をコピーして下さい。</p>
<h4>3. XMLファイルを作成</h4>
<p>「/アプリケーション/Adobe Flash CS5/Common/Configuration/Players」の「FlashPlayer10_1.xml」をコピーして、ファイル名を「FlashPlayer10_2.xml」に変更。このXMLファイルをテキストエディタなどで開き、以下の行を変更。<br />
3行目　playerノード　&#8221;FlashPlayer10&#8243; を &#8220;FlashPlayer10.2&#8243; にして、さらにversion を &#8220;11&#8243; に変更<br />
4行目　nameノード　&#8221;Flash Player 10.2&#8243; に変更<br />
8行目　playerDefinitionPath の as3= 以降を &#8220;$(AppConfig)/ActionScript 3.0/FP10.2/playerglobal.swc&#8221; に変更</p>
<h4>4. FlashPlayerを更新</h4>
<p>これは参考サイトに書かれていなかったのですが、<a href="http://www.adobe.com/support/flashplayer/downloads.html">ここ</a>から最新のFlashPlayerをダウンロードして「/アプリケーション/Adobe Flash CS5/Players」内の各Player（DebugやReleaseも）を最新のもので上書きした方がいいと思います。</p>
<h4>5. 動作確認</h4>
<p>Flashを再起動後、パブリッシュ設定に「FlashPlayer10.2」が追加されているはずです。てきとうなファイルを作り、動作確認してください。</p>
<h4>6. 注意事項</h4>
<p>一部のAPI（StageVideoなど？）を使うと、プレビューではエラーが出たりする場合があるようです。今のところデバッグやパブリッシュでは問題なく動きましたが、自分も今日したばっかりなのであまり検証していません。以上です。</p>
]]></content:encoded>
			<wfw:commentRss>http://tmdf.net/blog/20110513_cs5-fp102.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>一定時間で消える線</title>
		<link>http://tmdf.net/blog/20101222_as3_line.html</link>
		<comments>http://tmdf.net/blog/20101222_as3_line.html#comments</comments>
		<pubDate>Wed, 22 Dec 2010 10:23:21 +0000</pubDate>
		<dc:creator>tmdf</dc:creator>
				<category><![CDATA[Flash / ActionScript]]></category>
		<category><![CDATA[ActionScript]]></category>

		<guid isPermaLink="false">http://www.tmdf.net/blog/?p=2347</guid>
		<description><![CDATA[マウスの座標をオリジナルクラスの二次元配列で保存し白線を描画、1秒後配列から削除します。]]></description>
			<content:encoded><![CDATA[<p>マウスの座標をオリジナルクラスの二次元配列で保存し白線を描画、1秒後配列から削除します。</p>
<p>
<object width="570" height="240">
<param name="movie" value="http://tmdf.net/blog/wp-content/2010/12/Drawing.swf"></param>
<param name="quality" value="high"></param>
<param name="wmode" value="window"></param>
<param name="menu" value="false"></param>
<param name="bgcolor" value="#000"></param>
<param name="allowScriptAccess" value="always"></param>
<embed type="application/x-shockwave-flash" width="570" height="240" src="http://tmdf.net/blog/wp-content/2010/12/Drawing.swf" quality="high" bgcolor="#000" wmode="window" menu="false" ></embed>
</object>
</p>
<pre class="brush: as3; title: ; notranslate">
package {
	import flash.display.Graphics;
	import flash.display.MovieClip;
	import flash.events.Event;
	import flash.events.MouseEvent;
	import flash.geom.Point;
	import flash.utils.getTimer;

	public class Main extends MovieClip {

		private var tracks:Vector.&lt;Vector.&lt;Track&gt;&gt;;

		public function Main():void {

			//初期化
			tracks = new Vector.&lt;Vector.&lt;Track&gt;&gt;();

			//リスナー登録
			this.addEventListener(Event.ENTER_FRAME, Draw);
			stage.addEventListener(MouseEvent.MOUSE_DOWN, Begin);
		}

		//ドラッグ開始
		private function Begin(e:MouseEvent):void {

			//更新
			Update(mouseX, mouseY, getTimer(), true);

			//リスナー登録
			stage.addEventListener(Event.ENTER_FRAME, Move);
			stage.addEventListener(MouseEvent.MOUSE_UP, Finish);
		}

		//ドラッグ中
		private function Move(e:Event):void {

			//更新
			Update(mouseX, mouseY, getTimer(), false);
		}

		//ドラッグ終了
		private function Finish(e:MouseEvent):void {

			//更新
			Update(mouseX, mouseY, getTimer(), false);

			//リスナー解除
			stage.removeEventListener(Event.ENTER_FRAME, Move);
			stage.removeEventListener(MouseEvent.MOUSE_UP, Finish);
		}

		//更新
		private function Update(_x:int, _y:int, _t:int, _s:Boolean):void {

			//データ追加
			if (!_s) _s = Boolean(tracks.length == 0);
			if (_s) tracks.unshift(new Vector.&lt;Track&gt;());
			tracks[0].unshift(new Track(_x, _y, _t));
		}

		//描画
		private function Draw(e:Event):void {

			//変数
			var t:uint = getTimer();
			var a:int = tracks.length;
			var b:int;
			var c:Boolean;
			var i:int;
			var j:int;
			var g:Graphics = this.graphics;

			//描画
			g.clear();
			if (a &gt; 0) {
				for (i = a - 1; i &gt;= 0; i --) {
					b = tracks[i].length;
					c = true;
					if (b &gt; 0) {
						for (j = b - 1; j &gt;= 0; j --) {
							if (t - tracks[i][j].t &gt; 1000) {
								tracks[i].splice(j, 1);
								if (j == 0) tracks.splice(i, 1);
							}
							else {
								if (c) {
									c = false;
									g.lineStyle();
									g.moveTo(tracks[i][j].x, tracks[i][j].y);
									g.beginFill(0xFFFFFF, 1.0);
									g.drawCircle(tracks[i][j].x, tracks[i][j].y, 3);
									g.endFill();
									g.lineStyle(6, 0xFFFFFF, 1.0, false);
								}
								g.lineTo(tracks[i][j].x, tracks[i][j].y);
							}
						}
					}
				}
			}
		}
	}
}

//軌跡クラス
class Track {
	public var x:int;
	public var y:int;
	public var t:int;
	public function Track(_x:int, _y:int, _t:int):void {
		x = _x;
		y = _y;
		t = _t;
	}
}
</pre>
]]></content:encoded>
			<wfw:commentRss>http://tmdf.net/blog/20101222_as3_line.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>oFで純正マルチタッチ</title>
		<link>http://tmdf.net/blog/20101213_of_multitouch.html</link>
		<comments>http://tmdf.net/blog/20101213_of_multitouch.html#comments</comments>
		<pubDate>Mon, 13 Dec 2010 14:38:06 +0000</pubDate>
		<dc:creator>tmdf</dc:creator>
				<category><![CDATA[iPhone / Objective-C]]></category>
		<category><![CDATA[openFrameworks]]></category>

		<guid isPermaLink="false">http://www.tmdf.net/blog/?p=2324</guid>
		<description><![CDATA[Mac版openFrameworksで純正マルチタッチ入力を取得する方法について。 デバイスを一つしか使わない（MacBookのトラックパッドやiMacにMagicTrackpad）場合はopenFrameworks.j [...]]]></description>
			<content:encoded><![CDATA[<p>Mac版openFrameworksで純正マルチタッチ入力を取得する方法について。</p>
<p>デバイスを一つしか使わない（MacBookのトラックパッドやiMacにMagicTrackpad）場合は<a href="http://openframeworks.jp/forum/topic.php?id=4">openFrameworks.jp forum 「MacBookProのトラックパッドでマルチタッチ」</a>のサンプルとかリンク先を見てください。</p>
<p>ここではすでにトラックパッドが搭載されているMacBookにMagicTrackpadをつないでMagicTrackpad側を認識したい場合、など複数のデバイスを混在させoFで認識させる方法について書きます。基本は上のサンプルとほとんど同じで、デバイスの取得で使う関数がObjective-Cで動作させる必要があるので少し変更が必要です。下記コードの変更は24行目と78～82行目の部分がメイン。</p>
<p>まず、oFのemptyExampleをコピーして、addonsの「ofxVectorMath」とフレームワークの「MultitouchSupport.framework」を読み込みます。次に「testApp.cpp」を「testApp.mm」に名称変更し、右クリック>情報を見る>ファイルタイプで「sourcecode.cpp.cpp」を「sourcecode.cpp.objcpp」に変更します。そしてtestApp.mmには以下のコード。</p>
<pre class="brush: cpp; title: ; notranslate">
#include &quot;testApp.h&quot;
#include &quot;ofxVectorMath.h&quot;

extern &quot;C&quot; {
	typedef struct { float x,y; } mtPoint;
	typedef struct { mtPoint pos,vel; } mtReadout;
	typedef struct {
		int frame;
		double timestamp;
		int identifier, state, foo3, foo4;
		mtReadout normalized;
		float size;
		int zero1;
		float angle, majorAxis, minorAxis;
		mtReadout mm;
		int zero2[2];
		float unk2;
	}
	Finger;

	typedef void *MTDeviceRef;
	typedef int (*MTContactCallbackFunction)(int,Finger*,int,double,int);

	CFMutableArrayRef MTDeviceCreateList(void);
	void MTRegisterContactFrameCallback(MTDeviceRef, MTContactCallbackFunction);
	void MTDeviceStart(MTDeviceRef, int);
}

class TouchPoint {
public:
	ofxVec2f pos;
	float size;
	int id;
	bool enable;
	float phase;
	float freq, amp;
	float trem_phase;
};

vector&lt;TouchPoint&gt; touchPoints;

int mtCallback(int device, Finger *data, int nFingers, double timestamp, int frame) {
	for (int i = 0; i &lt; touchPoints.size(); i  ++) {
		touchPoints[i].enable = false;
	}
	for (int i=0; i&lt;nFingers; i++) {
		Finger *f = &amp;data[i];

		/*
		 printf(&quot;Frame %7d: Angle %6.2f, ellipse %6.3f x%6.3f; &quot;
			&quot;position (%6.3f,%6.3f) vel (%6.3f,%6.3f) &quot;
			&quot;ID %d, state %d [%d %d?] size %6.3f, %6.3f?n&quot;,
			f-&gt;frame,
			f-&gt;angle * 90 / atan2(1,0),
			f-&gt;majorAxis,
			f-&gt;minorAxis,
			f-&gt;normalized.pos.x,
			f-&gt;normalized.pos.y,
			f-&gt;normalized.vel.x,
			f-&gt;normalized.vel.y,
			f-&gt;identifier, f-&gt;state, f-&gt;foo3, f-&gt;foo4,
			f-&gt;size, f-&gt;unk2);
		 */

		TouchPoint &amp;t = touchPoints[f-&gt;identifier];
		t.pos.x = f-&gt;normalized.pos.x;
		t.pos.y = 1 - f-&gt;normalized.pos.y;
		t.size = f-&gt;size;
		t.enable = true;
		t.id = f-&gt;identifier;
	}
	return 0;
}

void testApp::setup() {
	touchPoints.resize(20);

	NSMutableArray* deviceList = (NSMutableArray*)MTDeviceCreateList();
	for(int i = 0; i &lt; [deviceList count]; i ++) {
		MTRegisterContactFrameCallback([deviceList objectAtIndex:i], mtCallback);
		MTDeviceStart([deviceList objectAtIndex:i], 0);
	}

	ofEnableSmoothing();
	ofEnableAlphaBlending();
	ofSetVerticalSync(true);
	ofSetFrameRate(60);

	ofHideCursor();

	ofBackground(0, 0, 0);

	ofSetColor(255, 255, 255);
	ofNoFill();
}

void testApp::update() {
}

void testApp::draw() {
	for (int i = 0; i &lt; touchPoints.size(); i++)
	{
		TouchPoint &amp;t = touchPoints[i];

		if (t.enable == false) continue;

		float xx = t.pos.x * ofGetWidth();
		float yy = t.pos.y * ofGetHeight();
		ofCircle(xx, yy, t.size * 50);

		ofDrawBitmapString(ofToString(t.freq, 1), xx, yy);
	}
}

void testApp::keyPressed(int key) {
}

void testApp::keyReleased(int key) {
}

void testApp::mouseMoved(int x, int y){
}

void testApp::mouseDragged(int x, int y, int button) {
}

void testApp::mousePressed(int x, int y, int button) {
}

void testApp::mouseReleased(int x, int y, int button) {
}

void testApp::windowResized(int w, int h) {
}
</pre>
]]></content:encoded>
			<wfw:commentRss>http://tmdf.net/blog/20101213_of_multitouch.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>addCaller 注意点</title>
		<link>http://tmdf.net/blog/20101209_as3_addcaller.html</link>
		<comments>http://tmdf.net/blog/20101209_as3_addcaller.html#comments</comments>
		<pubDate>Thu, 09 Dec 2010 13:03:12 +0000</pubDate>
		<dc:creator>tmdf</dc:creator>
				<category><![CDATA[Flash / ActionScript]]></category>
		<category><![CDATA[ActionScript]]></category>

		<guid isPermaLink="false">http://www.tmdf.net/blog/?p=2298</guid>
		<description><![CDATA[Tweener ver.1.33.74（それ以外は未確認）でaddCallerを使う時の注意点。addCallerでtransitionを無指定のままにしておくとなぜか遅延されます。下記swfはキーボードの「1」を押した [...]]]></description>
			<content:encoded><![CDATA[<p>Tweener ver.1.33.74（それ以外は未確認）でaddCallerを使う時の注意点。addCallerでtransitionを無指定のままにしておくとなぜか遅延されます。下記swfはキーボードの「1」を押した時がtransition指定無し、「2」「3」を押したときは指定有りでaddCallerを呼び、イベントが発生するたびに円を右に動かします。</p>
<p>
<object width="570" height="200">
<param name="movie" value="http://tmdf.net/blog/wp-content/2010/12/addCaller.swf"></param>
<param name="quality" value="high"></param>
<param name="wmode" value="window"></param>
<param name="menu" value="false"></param>
<param name="bgcolor" value="#000"></param>
<param name="allowScriptAccess" value="always"></param>
<embed type="application/x-shockwave-flash" width="570" height="200" src="http://tmdf.net/blog/wp-content/2010/12/addCaller.swf" quality="high" bgcolor="#000" wmode="window" menu="false" ></embed>
</object>
</p>
<pre class="brush: as3; title: ; notranslate">
//Main.as

package {
	import caurina.transitions.Tweener;
	import flash.display.Graphics;
	import flash.display.MovieClip;
	import flash.events.KeyboardEvent;
	import flash.text.TextField;
	import flash.text.TextFieldAutoSize;

	public class Main extends MovieClip {

		private var Circle_mc:MovieClip;

		public function Main():void {

			//円
			Circle_mc = new MovieClip();
			Circle_mc.graphics.beginFill(0x999999, 1);
			Circle_mc.graphics.drawCircle(0, 0, 50);
			Circle_mc.x = 170;
			Circle_mc.y = stage.stageHeight / 2;
			this.addChild(Circle_mc);

			//説明文
			var Text_tf:TextField = new TextField();
			Text_tf.textColor = 0xFFFFFF;
			Text_tf.text = &quot;KeyDown (ON/OFF)n1 : nonen2 : linearn3 : easeInOutCubic&quot;;
			Text_tf.x = Text_tf.y = 10;
			Text_tf.autoSize = TextFieldAutoSize.LEFT;
			this.addChild(Text_tf);

			//リスナー登録
			stage.addEventListener(KeyboardEvent.KEY_DOWN, KeyDown);
		}

		//キーボードが押された場合
		private function KeyDown(e:KeyboardEvent):void {

			//移動
			if (e.keyCode == 49 || e.keyCode == 97) Move(&quot;&quot;);
			else if (e.keyCode == 50 || e.keyCode == 98) Move(&quot;linear&quot;);
			else if (e.keyCode == 51 || e.keyCode == 99) Move(&quot;easeInOutCubic&quot;);
		}

		//移動
		private function Move(_type:String):void {

			//初期化
			Tweener.removeTweens(this);
			Circle_mc.x = 170;

			//トランジションが指定されている場合
			if (_type != &quot;&quot;) {
				Tweener.addCaller(this, {
					count		:30,
					time		:3.0,
					transition	:_type,
					onUpdate	:Update
				});
			}

			//トランジションが無指定の場合
			else {
				Tweener.addCaller(this, {
					count		:30,
					time		:3.0,
					onUpdate	:Update
				});
			}

			//トゥイーン中
			function Update():void {
				Circle_mc.x += 10;
			}
		}
	}
}
</pre>
]]></content:encoded>
			<wfw:commentRss>http://tmdf.net/blog/20101209_as3_addcaller.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>rep2 カスタム</title>
		<link>http://tmdf.net/blog/20101208_rep2_custom.html</link>
		<comments>http://tmdf.net/blog/20101208_rep2_custom.html#comments</comments>
		<pubDate>Wed, 08 Dec 2010 14:28:18 +0000</pubDate>
		<dc:creator>tmdf</dc:creator>
				<category><![CDATA[Other]]></category>
		<category><![CDATA[rep2]]></category>

		<guid isPermaLink="false">http://www.tmdf.net/blog/?p=2301</guid>
		<description><![CDATA[rep2の自分用カスタムメモ。 使用している画像とかスキンは「rep2_tmdf.zip」からダウンロードできます。 1. iPhone用Webクリップを変更 img/touch-icon/p2-serif.png を好 [...]]]></description>
			<content:encoded><![CDATA[<p>rep2の自分用カスタムメモ。<br />
使用している画像とかスキンは「<a href='http://tmdf.net/blog/wp-content/2010/12/rep2_tmdf.zip'>rep2_tmdf.zip</a>」からダウンロードできます。</p>
<h4>1. iPhone用Webクリップを変更</h4>
<p>img/touch-icon/p2-serif.png を好きな画像に変更<br />
解像度はiPhoneやiPadが勝手にリサイズするので大きめでOK。<br />
同じフォルダ内に他にも画像がいっぱいあるけど何のためだろう？</p>
<h4>2. faviconを変更</h4>
<p>./favicon.ico を好きな画像に変更</p>
<h4>3. スタイルシートを変更</h4>
<p>skin/○○○.php を追加（※自分の場合はtmdf.php）<br />
設定管理の「スキン」でそれを指定</p>
<h4>4. 2カラムに変更 &#038; 新規タブで開く</h4>
<p>設定管理 > ユーザ設定編集 > ETC の<br />
frame_subject_width と frame_read_width を空白に。<br />
このままだとスレ一覧のリンクをクリックした際に見えなくしている<br />
カラムに表示されてしまうので target=&#8221;_blank&#8221; を下記に追加<br />
lin/sb_print.inc.php の443行目（※各スレッド）<br />
lib/sb_toolbar.inc.php の127行目（※板の新着まとめ読み）</p>
]]></content:encoded>
			<wfw:commentRss>http://tmdf.net/blog/20101208_rep2_custom.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>keyCode 一覧リスト</title>
		<link>http://tmdf.net/blog/20101110_as3-keycode.html</link>
		<comments>http://tmdf.net/blog/20101110_as3-keycode.html#comments</comments>
		<pubDate>Wed, 10 Nov 2010 14:48:47 +0000</pubDate>
		<dc:creator>tmdf</dc:creator>
				<category><![CDATA[Flash / ActionScript]]></category>
		<category><![CDATA[ActionScript]]></category>

		<guid isPermaLink="false">http://www.tmdf.net/blog/?p=2277</guid>
		<description><![CDATA[自分が好きな感じのタイプがなかったのでキーボードのグラフィック上にkeyCodeをマッピングしたグラフィックを作りました。ActionScript（Flash）でKeyboardEventを大量に使う時に便利なはず。編集 [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://tmdf.net/blog/wp-content/2010/11/Keycode.gif" alt="Keycode" title="Keycode" width="570" height="190" class="c" /></p>
<p>自分が好きな感じのタイプがなかったのでキーボードのグラフィック上にkeyCodeをマッピングしたグラフィックを作りました。ActionScript（Flash）でKeyboardEventを大量に使う時に便利なはず。編集可能なPDFなので好きなようにいじって使ってください。間違えてないはずだけど、間違えてたら直すのでコメントで教えてください。</p>
<p><a href='http://tmdf.net/blog/wp-content/2010/11/Keycode.pdf'>Download Keycode.pdf</a></p>
]]></content:encoded>
			<wfw:commentRss>http://tmdf.net/blog/20101110_as3-keycode.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>mxj を.app(.exe) ビルド時の注意点</title>
		<link>http://tmdf.net/blog/20101106_notemxj.html</link>
		<comments>http://tmdf.net/blog/20101106_notemxj.html#comments</comments>
		<pubDate>Fri, 05 Nov 2010 16:42:24 +0000</pubDate>
		<dc:creator>tmdf</dc:creator>
				<category><![CDATA[Max/MSP / Processing]]></category>
		<category><![CDATA[Max/MSP]]></category>

		<guid isPermaLink="false">http://www.tmdf.net/blog/?p=2228</guid>
		<description><![CDATA[mxjのライブラリを使ったMax/MSPを.app（.exe）でビルドし、そのまま実行するとJavaの実行環境がインクルードされていないためにうまく動かない場合があります。Maxウィンドウには下記エラー表示。 ・(mxj [...]]]></description>
			<content:encoded><![CDATA[<p>mxjのライブラリを使ったMax/MSPを.app（.exe）でビルドし、そのまま実行するとJavaの実行環境がインクルードされていないためにうまく動かない場合があります。Maxウィンドウには下記エラー表示。<br />
・(mxj) Unable to find max.jar! mxj is rendered powerless in its absence.<br />
・Unable to create JVM<br />
これの解決方法を紹介。</p>
<p>Macの場合、ビルドされた■■■.appを右クリックして「パッケージの内容を表示」し「Contents/support」フォルダ内に「java」フォルダを新規作成。その中に「アプリケーション/Max5/Cycling &#8217;74/java」フォルダ内にある以下のファイルをコピー。<br />
・classes/■■■.class　*使用しているライブラリ<br />
・classes/■■■.java<br />
・lib/max.jar<br />
・max.java.config.txt</p>
<p>Windowsの場合も似たディレクトリになっているので、同じようにファイルをコピー。<br />
これでちゃんと実行されるはず。</p>
<p>注意点は、「コレクティブ / アプリケーションをビルド&#8230;」をすると、「含めるフォルダ&#8230;」などでインクルードするファイルを指定できますが、上記ファイルを指定してもインクルードされない上に、後でビルドされたアプリにmax.jarをコピーしてもうまく認識されなくなります。なのでmxj関連のファイルは指定しないようにしておきましょう。</p>
<p>上記の環境はMac、WinともにMax5.1.4です。</p>
]]></content:encoded>
			<wfw:commentRss>http://tmdf.net/blog/20101106_notemxj.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>起動時にMaxウィンドウ非表示</title>
		<link>http://tmdf.net/blog/20101104_hide-maxwindo.html</link>
		<comments>http://tmdf.net/blog/20101104_hide-maxwindo.html#comments</comments>
		<pubDate>Thu, 04 Nov 2010 14:56:44 +0000</pubDate>
		<dc:creator>tmdf</dc:creator>
				<category><![CDATA[Max/MSP / Processing]]></category>
		<category><![CDATA[Max/MSP]]></category>

		<guid isPermaLink="false">http://www.tmdf.net/blog/?p=2262</guid>
		<description><![CDATA[タイトルの通り、.mxf や.app（.exe）のMax/MSPの実行ファイルを起動した場合に、Maxウィンドウを表示させない方法の紹介。 「standalone」オブジェクトを作り、「インスペクタ」で「Status W [...]]]></description>
			<content:encoded><![CDATA[<p>タイトルの通り、.mxf や.app（.exe）のMax/MSPの実行ファイルを起動した場合に、Maxウィンドウを表示させない方法の紹介。</p>
<p>「standalone」オブジェクトを作り、「インスペクタ」で「Status Window Visible at Statup」をオフにするだけ。</p>
]]></content:encoded>
			<wfw:commentRss>http://tmdf.net/blog/20101104_hide-maxwindo.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>プロパティ毎にremoveTweens</title>
		<link>http://tmdf.net/blog/20101008_as3_removetweens.html</link>
		<comments>http://tmdf.net/blog/20101008_as3_removetweens.html#comments</comments>
		<pubDate>Fri, 08 Oct 2010 10:36:50 +0000</pubDate>
		<dc:creator>tmdf</dc:creator>
				<category><![CDATA[Flash / ActionScript]]></category>
		<category><![CDATA[ActionScript]]></category>

		<guid isPermaLink="false">http://www.tmdf.net/blog/?p=2070</guid>
		<description><![CDATA[TweenerのremoveTweensについてあまり書かれていないのでメモ。オブジェクトにaddTweenしたプロパティの一部だけを止めたい場合は、「Tweener.removeTweens(オブジェクト, プロパティ [...]]]></description>
			<content:encoded><![CDATA[<p>TweenerのremoveTweensについてあまり書かれていないのでメモ。オブジェクトにaddTweenしたプロパティの一部だけを止めたい場合は、「Tweener.removeTweens(オブジェクト, プロパティ);」といった書き方をします。プロパティ名はStringで指定し、複数ある場合はカンマ区切りで続けて書きます。プロパティ部分を省略するとすべてトゥイーンが止まります。</p>
<div class="add">修正 2010.10.25<br />
一度もaddTweenせずにremoveTweensをプロパティ指定して呼びだすと、「TypeError: Error #1009: ～～～」が発生します。起動時に何でもいいのでオブジェクトにaddTweenしておくとエラーを回避できます。
</div>
<p>
<object width="570" height="200">
<param name="movie" value="http://tmdf.net/blog/wp-content/2010/10/RemoveTweens.swf"></param>
<param name="quality" value="high"></param>
<param name="wmode" value="window"></param>
<param name="menu" value="false"></param>
<param name="bgcolor" value="#000"></param>
<param name="allowScriptAccess" value="always"></param>
<embed type="application/x-shockwave-flash" width="570" height="200" src="http://tmdf.net/blog/wp-content/2010/10/RemoveTweens.swf" quality="high" bgcolor="#000" wmode="window" menu="false" ></embed>
</object>
</p>
<pre class="brush: as3; title: ; notranslate">
//Main.as

package {
	import caurina.transitions.Tweener;
	import flash.display.Graphics;
	import flash.display.MovieClip;
	import flash.events.KeyboardEvent;
	import flash.text.TextField;
	import flash.text.TextFieldAutoSize;

	public class Main extends MovieClip {

		private var Circle_mc:MovieClip;
		private var fade:Boolean;
		private var move:Boolean;

		public function Main():void {

			//円
			Circle_mc = new MovieClip();
			Circle_mc.graphics.beginFill(0xFFFFFF, 1);
			Circle_mc.graphics.drawCircle(0, 0, 60);
			Circle_mc.x = 100;
			Circle_mc.y = stage.stageHeight / 2;
			this.addChild(Circle_mc);

			//説明文
			var Text_tf:TextField = new TextField();
			Text_tf.textColor = 0xFFFFFF;
			Text_tf.text = &quot;KeyDown (ON/OFF)n1 : Moven2 : Alphan3 : Both&quot;;
			Text_tf.x = Text_tf.y = 10;
			Text_tf.autoSize = TextFieldAutoSize.LEFT;
			this.addChild(Text_tf);

			//動作
			Change(&quot;fade&quot;, true);
			Change(&quot;move&quot;, true);

			//リスナー登録
			stage.addEventListener(KeyboardEvent.KEY_DOWN, KeyDown);
		}

		//キーボードが押された場合
		private function KeyDown(e:KeyboardEvent):void {

			//フェードイン（アウト） トグル
			if (e.keyCode == 49 || e.keyCode == 97) Change(&quot;fade&quot;, !fade);

			//x軸移動 トグル
			else if (e.keyCode == 50 || e.keyCode == 98) Change(&quot;move&quot;, !move);

			//3 停止（どちらも停止中の場合は開始）
			else if (e.keyCode == 51 || e.keyCode == 99) {
				if (!fade &amp;&amp; !move) {
					Change(&quot;fade&quot;, true);
					Change(&quot;move&quot;, true);
				}
				else Change(&quot;both&quot;);
			}
		}

		//動作
		private function Change(_type:String, _value:Boolean = false):void {

			//フェードイン（アウト） 停止
			if (_type == &quot;fade&quot; &amp;&amp; !_value) {
				fade = false;
				Tweener.removeTweens(Circle_mc, &quot;alpha&quot;);
			}

			//フェードイン（アウト） 開始
			else if (_type == &quot;fade&quot; &amp;&amp; _value) {
				fade = true;
				Tweener.addTween(Circle_mc, {
					alpha				:1.0,
					time				:0.5
				});
				Tweener.addTween(Circle_mc, {
					alpha				:0.2,
					delay				:0.5,
					time				:0.5,
					onComplete			:Change,
					onCompleteParams	:[&quot;fade&quot;, true]
				});
			}

			//x軸移動 停止
			else if (_type == &quot;move&quot; &amp;&amp; !_value) {
				move = false;
				Tweener.removeTweens(Circle_mc, &quot;x&quot;);
			}

			//x軸移動 開始
			else if (_type == &quot;move&quot; &amp;&amp; _value) {
				move = true;
				Tweener.addTween(Circle_mc, {
					x					:stage.stageWidth - 100,
					time				:2.5
				});
				Tweener.addTween(Circle_mc, {
					x					:100,
					delay				:2.5,
					time				:2.5,
					onComplete			:Change,
					onCompleteParams	:[&quot;move&quot;, true]
				});
			}

			//両方 停止
			else if (_type == &quot;both&quot;) {
				fade = false;
				move = false;
				Tweener.removeTweens(Circle_mc, &quot;alpha&quot;, &quot;x&quot;);
			}
		}
	}
}
</pre>
]]></content:encoded>
			<wfw:commentRss>http://tmdf.net/blog/20101008_as3_removetweens.html/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>小さい順にソート</title>
		<link>http://tmdf.net/blog/20100818_as3_sort.html</link>
		<comments>http://tmdf.net/blog/20100818_as3_sort.html#comments</comments>
		<pubDate>Wed, 18 Aug 2010 14:47:35 +0000</pubDate>
		<dc:creator>tmdf</dc:creator>
				<category><![CDATA[Flash / ActionScript]]></category>
		<category><![CDATA[ActionScript]]></category>

		<guid isPermaLink="false">http://www.tmdf.net/blog/?p=1867</guid>
		<description><![CDATA[ActionScript3で数値配列内の任意のインデックス位置の数値が、配列全体で何番目に小さい（または大きい）値なのかを調べるためのコード。ダイレクトな関数がなかったので作ってみました。けっこう高速に処理してくれてると [...]]]></description>
			<content:encoded><![CDATA[<p>ActionScript3で数値配列内の任意のインデックス位置の数値が、配列全体で何番目に小さい（または大きい）値なのかを調べるためのコード。ダイレクトな関数がなかったので作ってみました。けっこう高速に処理してくれてると思います。</p>
<pre class="brush: as3; title: ; notranslate">
//Main.as

package {
	import flash.display.MovieClip;

	public class Main extends MovieClip {

		public function Main():void {

			//数値配列「num」を作成
			var l:uint = 100000;
			var num:Vector.&lt;Number&gt; = new Vector.&lt;Number&gt;();
			for (var i:uint = 0; i &lt; l; i ++) {
				num[i] = Math.random() * l;
			}

			//インデックス位置と数値を記憶する配列を作成
			var sort:Array = new Array();
			for (i = 0; i &lt; l; i ++) {
				sort[i] = {id:i, value:num[i]};
			}

			//元のインデックス位置が4285のデータを記憶
			var search:Object = sort[4285];

			//数値の小さい順に並び替え
			sort.sortOn(&quot;value&quot;, Array.NUMERIC);

			//元のインデックス位置が4285のデータが何番目に小さい値か？
			trace(sort.indexOf(search));

			//1365番目に小さい値の元のインデックス位置はどこか？
			trace(sort[1365].id);
		}
	}
}
</pre>
]]></content:encoded>
			<wfw:commentRss>http://tmdf.net/blog/20100818_as3_sort.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Flashの透過処理</title>
		<link>http://tmdf.net/blog/20100813_flash_alpha.html</link>
		<comments>http://tmdf.net/blog/20100813_flash_alpha.html#comments</comments>
		<pubDate>Fri, 13 Aug 2010 10:37:14 +0000</pubDate>
		<dc:creator>tmdf</dc:creator>
				<category><![CDATA[Flash / ActionScript]]></category>
		<category><![CDATA[ActionScript]]></category>

		<guid isPermaLink="false">http://www.tmdf.net/blog/?p=1832</guid>
		<description><![CDATA[久しぶりにFlashネタ。複数の子mcを配置した親mcを透過させると、各子mcの透明度が変化し、自分の意図した状態と違った表示になる場合があります。これの解決方法。 キーダウン 「1」 単純に親mcをフェードアウトした場 [...]]]></description>
			<content:encoded><![CDATA[<p>久しぶりにFlashネタ。複数の子mcを配置した親mcを透過させると、各子mcの透明度が変化し、自分の意図した状態と違った表示になる場合があります。これの解決方法。</p>
<p>
<object width="570" height="300">
<param name="movie" value="http://tmdf.net/blog/wp-content/2010/08/FadeOut.swf"></param>
<param name="quality" value="high"></param>
<param name="wmode" value="window"></param>
<param name="menu" value="false"></param>
<param name="bgcolor" value="#000"></param>
<param name="allowScriptAccess" value="always"></param>
<embed type="application/x-shockwave-flash" width="570" height="300" src="http://tmdf.net/blog/wp-content/2010/08/FadeOut.swf" quality="high" bgcolor="#000" wmode="window" menu="false" ></embed>
</object>
</p>
<p>キーダウン 「1」<br />
単純に親mcをフェードアウトした場合。本来なら円が重なったところはそのままの状態でフェードアウトして欲しいのですが、子mcに透明度が別々に割り当てられるせいで、見せたくない部分（青と重なっている緑など）まで透けて見えます。</p>
<p>キーダウン 「2」<br />
「1」をビットマップキャッシュ化した場合。これでうまくいくと思っていたのですが、結果は「1」と変わりません。</p>
<p>キーダウン 「3」<br />
自分の希望はこのタイプ。親mcをそのままビットマップデータに描画、親mcと同階層にそのビットマップを配置。もともとの親mcは非表示にし、ビットマップをフェードアウトさせ、完了と同時にビットマップ（データ）を削除（メモリ開放）しています。</p>
<p>細かい部分は下記コード、または「<a href='http://www.tmdf.net/blog/wp-content/2010/08/FadeOut.zip'>FadeOut.zip</a>」を参照して下さい。連打した場合の処理はしていません。</p>
<p>もっとスマートな処理がありそうなので、思いついたら追記したいと思います。また、今回のように単純に黒ベタ背景でフェードアウトする場合は、逆に黒ベタを親mcの前面にフェードインさせるのが一番楽です。</p>
<pre class="brush: as3; title: ; notranslate">
//Sample.as

package {
	import caurina.transitions.Tweener;
	import flash.display.Bitmap;
	import flash.display.BitmapData;
	import flash.display.DisplayObject;
	import flash.display.Graphics;
	import flash.display.MovieClip;
	import flash.events.Event;
	import flash.events.KeyboardEvent;

	public class Sample extends MovieClip {

		//起動時
		public function Sample():void {

			//リスナー登録
			this.addEventListener(Event.ADDED_TO_STAGE, Init);
		}

		//初期化
		private function Init(e:Event):void {

			//リスナー登録
			this.removeEventListener(Event.ADDED_TO_STAGE, Init);

			//オブジェクト生成
			var g:Graphics;

			//赤
			var Red_mc:MovieClip = new MovieClip();
			g = Red_mc.graphics;
			g.beginFill(0xCC0000);
			g.drawCircle(0, 0, 100);
			this.addChild(Red_mc);
			Red_mc.x = 185;
			Red_mc.y = 150;

			//緑
			var Green_mc:MovieClip = new MovieClip();
			g = Green_mc.graphics;
			g.beginFill(0x33CC00);
			g.drawCircle(0, 0, 100);
			this.addChild(Green_mc);
			Green_mc.x = 285;
			Green_mc.y = 150;

			//青
			var Blue_mc:MovieClip = new MovieClip();
			g = Blue_mc.graphics;
			g.beginFill(0x0033CC);
			g.drawCircle(0, 0, 100);
			this.addChild(Blue_mc);
			Blue_mc.x = 385;
			Blue_mc.y = 150;

			//リスナー解除
			stage.addEventListener(KeyboardEvent.KEY_DOWN, KeyDown);
		}

		//キーボードが押された場合
		private function KeyDown(e:KeyboardEvent):void {

			//1～3
			if (e.keyCode == 49 || e.keyCode == 97) NormalFadeOut(false);
			else if (e.keyCode == 50 || e.keyCode == 98) NormalFadeOut(true);
			else if (e.keyCode == 51 || e.keyCode == 99) CustomFadeOut();
		}

		//ノーマル フェードアウト
		private function NormalFadeOut(_cache:Boolean):void {

			//キャッシュ
			this.cacheAsBitmap = _cache;

			//トゥイーン
			Tweener.addTween(this, {
				alpha		:0,
				time		:1.0,
				onComplete	:Reset
			});

			//フェードアウト
			function Reset():void {
				this.alpha = 1.0;
			}
		}

		//カスタム フェードアウト
		private function CustomFadeOut():void {

			//表示オブジェクトをビットマップ化
			var Copy_bmd:BitmapData = new BitmapData(stage.stageWidth, stage.stageHeight, true, 0x00000000);
			Copy_bmd.draw(this);
			var Copy_bmp:Bitmap = new Bitmap(Copy_bmd, &quot;auto&quot;, false);

			//親オブジェクトに配置、レイヤー調整
			this.parent.addChild(Copy_bmp);
			this.parent.setChildIndex(DisplayObject(Copy_bmp), this.parent.getChildIndex(DisplayObject(this)));

			//自身を非表示
			this.alpha = 0.0;

			//親オブジェクトに配置したコピーをフェードアウト
			Tweener.addTween(Copy_bmp, {
				alpha				:0,
				time				:1.0,
				onComplete			:Reset,
				onCompleteParams	:[this]
			});

			//リセット
			function Reset(_this:Sample):void {
				_this.alpha = 1.0;
				_this.parent.removeChild(Copy_bmp);
				Copy_bmp = null;
				Copy_bmd.dispose();
				Copy_bmd = null;
			}
		}
	}
}
</pre>
]]></content:encoded>
			<wfw:commentRss>http://tmdf.net/blog/20100813_flash_alpha.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Windows7での.mxf（Max/MSP）不具合</title>
		<link>http://tmdf.net/blog/20100506_win7_mxf.html</link>
		<comments>http://tmdf.net/blog/20100506_win7_mxf.html#comments</comments>
		<pubDate>Thu, 06 May 2010 14:30:42 +0000</pubDate>
		<dc:creator>tmdf</dc:creator>
				<category><![CDATA[Max/MSP / Processing]]></category>
		<category><![CDATA[Max/MSP]]></category>

		<guid isPermaLink="false">http://www.tmdf.net/blog/?p=1608</guid>
		<description><![CDATA[Twitterの方に数ヶ月前に書いたのですが、忘れそうなので投稿しておきます。 ※Windows7のPCが手元になくなってしまったので試せませんが、最新のRuntimeを使えばこの不具合が直っているかも。 Max/MSP [...]]]></description>
			<content:encoded><![CDATA[<p>Twitterの方に数ヶ月前に書いたのですが、忘れそうなので投稿しておきます。<br />
※Windows7のPCが手元になくなってしまったので試せませんが、最新のRuntimeを使えばこの不具合が直っているかも。</p>
<p>Max/MSPでビルドしたmxfファイルを、Windows7のRuntime（ver 5.1.3）で実行すると初回起動以降（初回はうまく動作します）、オーディオのI/Oデバイスが認識されなくなる（DSPステータスみるとDriverが「None」）場合の対処法。</p>
<p>手動で毎回ステータス画面を開いて設定するのは面倒なので、まず「admme@.txt」っていうファイルを検索して消去。次に、このファイルが入っていた「Max 5 Preferences Files」フォルダ（最初は不可視）を書き込み不可に。以上の2ステップです。<br />
強制的に初期設定ファイルを作れないようにするだけですが、これで意図したとおりに動作してくれるはず。フォルダを書き込み不可にしたことによって、他の不具合が発生するかもしれないので、その場合は権限を調整して下さい。</p>
]]></content:encoded>
			<wfw:commentRss>http://tmdf.net/blog/20100506_win7_mxf.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>フルスクリーンのバグ</title>
		<link>http://tmdf.net/blog/20100216_fp_fullscreen.html</link>
		<comments>http://tmdf.net/blog/20100216_fp_fullscreen.html#comments</comments>
		<pubDate>Tue, 16 Feb 2010 14:53:34 +0000</pubDate>
		<dc:creator>tmdf</dc:creator>
				<category><![CDATA[Flash / ActionScript]]></category>
		<category><![CDATA[ActionScript]]></category>

		<guid isPermaLink="false">http://www.tmdf.net/blog/?p=1651</guid>
		<description><![CDATA[CENTURYのUSB接続モニタ「LCD-8000U」「LCD-8000UD」に、swf（exe）ファイルをフルスクリーンで表示すると描画が更新されないバグがあるみたいです。WindowsXP SP3 と FlashPl [...]]]></description>
			<content:encoded><![CDATA[<p>CENTURYのUSB接続モニタ「LCD-8000U」「LCD-8000UD」に、swf（exe）ファイルをフルスクリーンで表示すると描画が更新されないバグがあるみたいです。WindowsXP SP3 と FlashPlayer 10.0 r32 、DisplayLinkのドライバは5.2.22663 の環境で起きました。同じドライバを使う「LCD-4300U」でも起きるかもしれません。</p>
<p>解決方法ですが、「パブリッシュ設定」-「ハードウェアアクセラレーション」を「レベル2 &#8211; GPU」にするとちゃんと動きます。また、cmd（ctrl）+Fでフルスクリーンと通常の表示方法を10回くらい切り替えていると、何故かちゃんと動き出したりします。</p>
]]></content:encoded>
			<wfw:commentRss>http://tmdf.net/blog/20100216_fp_fullscreen.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>高負荷ビットマップ処理</title>
		<link>http://tmdf.net/blog/20100212_as3_bmp.html</link>
		<comments>http://tmdf.net/blog/20100212_as3_bmp.html#comments</comments>
		<pubDate>Fri, 12 Feb 2010 14:24:24 +0000</pubDate>
		<dc:creator>tmdf</dc:creator>
				<category><![CDATA[Flash / ActionScript]]></category>
		<category><![CDATA[ActionScript]]></category>

		<guid isPermaLink="false">http://www.tmdf.net/blog/?p=1562</guid>
		<description><![CDATA[WindowsのFlash（※Macでは未検証）では、高負荷なビットマップ操作を行うと、マスク処理を無視する場合があります。 例えばA、B、Cの3枚の画像を、ブレンドモードで重ね、できた画像をビットマップDとみなし、他の [...]]]></description>
			<content:encoded><![CDATA[<p>WindowsのFlash（※Macでは未検証）では、高負荷なビットマップ操作を行うと、マスク処理を無視する場合があります。<br />
例えばA、B、Cの3枚の画像を、ブレンドモードで重ね、できた画像をビットマップDとみなし、他の画像Eのグラデーションマスクに使うといったときに、処理が重たい（画像が大きい）と、画像Eのマスク処理を無視し（単純にEがマスクされない）描画されます。</p>
<p>また、Flash IDE上のライブラリに登録してビットマップ画像を配置・操作するよりも、プログラムのLoaderを使って画像ファイルを外部から読み込んで操作した方が、大きい画像や重い処理を実行できる場合が多いです。</p>
<p>さらに、デバッグモードやプレビューモードで実行するより、コンパイルしたものの方が扱える画像が増える場合があります。PCのスペックに依存すると思いますが、Core2QuadのPCで100枚以上の1000&#215;1000の24bitのPNG画像を読み込み、碁盤目状に配置し操作することはできました。さらに500&#215;500の24bitのPNG画像を100枚読み込むと、コンパイルしたexeでは動作しますが、デバッグモードでは動かなかったです。エラーが出ない場合があるので注意が必要。</p>
]]></content:encoded>
			<wfw:commentRss>http://tmdf.net/blog/20100212_as3_bmp.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>mtdf.net 更新</title>
		<link>http://tmdf.net/blog/20100113_mtdf2010.html</link>
		<comments>http://tmdf.net/blog/20100113_mtdf2010.html#comments</comments>
		<pubDate>Wed, 13 Jan 2010 14:34:11 +0000</pubDate>
		<dc:creator>tmdf</dc:creator>
				<category><![CDATA[Other]]></category>

		<guid isPermaLink="false">http://www.tmdf.net/blog/?p=1593</guid>
		<description><![CDATA[mtdf.net のFlashを2010年度版に更新しました。去年と同じくFlickrにアップしている自分のPhotosetの写真を表示するだけですが、元画像を表示する前のドットパターンは、元画像に数段階のJPEGエンコ [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://mtdf.net">mtdf.net</a> のFlashを2010年度版に更新しました。去年と同じくFlickrにアップしている自分のPhotosetの写真を表示するだけですが、元画像を表示する前のドットパターンは、元画像に数段階のJPEGエンコードを行い生成しています。</p>
]]></content:encoded>
			<wfw:commentRss>http://tmdf.net/blog/20100113_mtdf2010.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>A HAPPY NEW YEAR</title>
		<link>http://tmdf.net/blog/20100101_201.html</link>
		<comments>http://tmdf.net/blog/20100101_201.html#comments</comments>
		<pubDate>Fri, 01 Jan 2010 14:53:43 +0000</pubDate>
		<dc:creator>tmdf</dc:creator>
				<category><![CDATA[Other]]></category>

		<guid isPermaLink="false">http://www.tmdf.net/blog/?p=1552</guid>
		<description><![CDATA[あけましておめでとうございます。 今年は自転車とAS3以外の記事も追加していこうと思っています。 今年もよろしくお願いします。]]></description>
			<content:encoded><![CDATA[<p>あけましておめでとうございます。<br />
今年は自転車とAS3以外の記事も追加していこうと思っています。<br />
今年もよろしくお願いします。</p>
]]></content:encoded>
			<wfw:commentRss>http://tmdf.net/blog/20100101_201.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>XREAでrep2</title>
		<link>http://tmdf.net/blog/20091227_xrea_rep2.html</link>
		<comments>http://tmdf.net/blog/20091227_xrea_rep2.html#comments</comments>
		<pubDate>Sat, 26 Dec 2009 18:39:49 +0000</pubDate>
		<dc:creator>tmdf</dc:creator>
				<category><![CDATA[Other]]></category>
		<category><![CDATA[rep2]]></category>

		<guid isPermaLink="false">http://www.tmdf.net/blog/?p=1528</guid>
		<description><![CDATA[修正 2010.12.8 記事の内容を最新の「rev.101010.2210」に直しました。 XREA Plus（XREA Freeでも同じ？）に rep2「rev.101010.2210」を設置するメモです。自動ポップ [...]]]></description>
			<content:encoded><![CDATA[<div class="add">修正 2010.12.8<br />
記事の内容を最新の「rev.101010.2210」に直しました。
</div>
<p>XREA Plus（XREA Freeでも同じ？）に rep2「rev.101010.2210」を設置するメモです。自動ポップアップが表示できなくてハマリました。rep2の設置はXREAの規約に違反するかもしれないので自己責任でお願いします。</p>
<h4>1. ダウンロード</h4>
<p>まず「<a href="http://page2.skr.jp/rep2/downloads.html">rep2expack ダウンロード</a>」から「依存ライブラリ込み」をダウンロードします。ダウンロード後、解凍してできる「rep2」フォルダ内のいくつかのファイルを下記のように直します。</p>
<h4>2. アクセス解除</h4>
<p>自分のPCからrep2にアクセスできるようIPアドレスを登録にします。自分のアドレスが分からない場合は「グローバルIP 確認」でググれば色んなサイトが引っかかります。<br />
conf/conf_hostcheck.php<br />
36行目を変更<br />
    &#8216;custom&#8217;    => 1,<br />
50行目に追加<br />
    &#8216;XXX.XXX.XXX.XXX&#8217; => 24, //調べた自分のIPアドレスを追加</p>
<h4>3. プライバシー対策</h4>
<p>プライバシー（セキュリティ）が気になる人は、「public_html」ど同階層などにデータ保存フォルダのディレクトリ位置、ディレクトリ名を変更します。<br />
conf_admin.inc.php<br />
14,17,20,23行目を変更<br />
$_conf['data_dir'] = &#8220;./data&#8221;;      // (&#8220;./data&#8221;)<br />
$_conf['dat_dir'] = &#8220;./data&#8221;;       // (&#8220;./data&#8221;)<br />
$_conf['idx_dir'] = &#8220;./data&#8221;;       // (&#8220;./data&#8221;)<br />
$_conf['pref_dir'] = &#8220;./data&#8221;;      // (&#8220;./data&#8221;)<br />
$_conf['db_dir'] = &#8220;./data/db&#8221;;     // (&#8220;./data/db&#8221;)</p>
<h4>4. レス修正</h4>
<p>XREAサーバー経由だと公開プロクシ判断されレスできないので、直接スレをブラウザで開いて、レスができるように変更。<br />
conf/conf_admin.inc.php<br />
87行目を変更<br />
$_conf['disable_res'] = 1;          // (0)</p>
<h4>5. PHP対策 1</h4>
<p>PHPバージョンが推奨より古いためバージョンチェックを回避。<br />
conf/conf.inc.php<br />
193行目を変更（コメントアウト）<br />
//p2_check_environment(__LINE__);</p>
<h4>6. PHP対策 2</h4>
<p>私がどこにあるのか分からずにハマったのはこの部分。レス番号の自動ポップアップ、URLの自動リンクが動作しないので、コメントアウトされている機能を動作するように変更。<br />
lib/ShowThread.php<br />
840行目と847行目を削除<br />
/* と */ です。</p>
<h4>7. PHP対策 3</h4>
<p>PHPをCGIとして動作させるため、rep2フォルダ直下に「.htaccess」ファイルを作成し、テキストエディタなどで下記の文を書いて保存。<br />
AddHandler application/x-httpd-phpcgi .php</p>
<h4>8. アップロード</h4>
<p>以上で一通りのファイル修正が完了です。rep2のフォルダをFTPソフトで自信のXREAサーバーにアップロードし、ユーザー名とパスワードを設定（初アクセス時）して使いましょう。</p>
]]></content:encoded>
			<wfw:commentRss>http://tmdf.net/blog/20091227_xrea_rep2.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>AS3で最近調べたこと</title>
		<link>http://tmdf.net/blog/20091226_research_as.html</link>
		<comments>http://tmdf.net/blog/20091226_research_as.html#comments</comments>
		<pubDate>Sat, 26 Dec 2009 12:13:30 +0000</pubDate>
		<dc:creator>tmdf</dc:creator>
				<category><![CDATA[Flash / ActionScript]]></category>
		<category><![CDATA[ActionScript]]></category>

		<guid isPermaLink="false">http://www.tmdf.net/blog/?p=1480</guid>
		<description><![CDATA[最近、ActionScript3で調べたことの参考サイトと自分なりのまとめ。 NUTSU 「2次ベジェ曲線の交点」 任意の2次ベジェ曲線同士の交点は、むりやり求めるしかない。かなりCPUに不可がかかるので、交点が100個 [...]]]></description>
			<content:encoded><![CDATA[<p>最近、ActionScript3で調べたことの参考サイトと自分なりのまとめ。</p>
<p><a href="http://nutsu.com/blog/2008/030320_as_bezierintersect.html">NUTSU 「2次ベジェ曲線の交点」</a><br />
任意の2次ベジェ曲線同士の交点は、むりやり求めるしかない。かなりCPUに不可がかかるので、交点が100個以上とかある場合、毎フレーム実行させると処理落ちが発生する。また、上記リンク先で公開しているライブラリでは、ベジェ曲線を内包する短形が計算のベースになっているので、短形を描けない直線（コントロールポイントが2点の間にある）の場合は、別のスクリプトを書く必要がある。</p>
<p><a href="http://memo.393.bz/actionscript/756.html/comment-page-1">memo 「ArgumentError: Error #2015: BitmapData が無効です。エラーの謎」</a><br />
#2015のエラーが起こる場合、原因はnew BitmapData() によるメモリ不足が考えられるので<br />
不要になったBitmapDataはdispose()で開放してあげなければいけない。それでもエラーが無くならない場合、PCのスペックを超過している恐れがある。しかし、ムービプレビューでエラーが起きても、デバッグモードやコンパイルした場合にはエラーが起きないこともあるので、限界ギリギリのパフォーマンスを求めるなら試してみる。</p>
]]></content:encoded>
			<wfw:commentRss>http://tmdf.net/blog/20091226_research_as.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>基準点以外で拡大・回転</title>
		<link>http://tmdf.net/blog/20091223_base_poin.html</link>
		<comments>http://tmdf.net/blog/20091223_base_poin.html#comments</comments>
		<pubDate>Tue, 22 Dec 2009 16:35:00 +0000</pubDate>
		<dc:creator>tmdf</dc:creator>
				<category><![CDATA[Flash / ActionScript]]></category>
		<category><![CDATA[ActionScript]]></category>

		<guid isPermaLink="false">http://www.tmdf.net/blog/?p=1512</guid>
		<description><![CDATA[自分が昔ハマったことのあるプログラムですが、Flashではシンボル化されたオブジェクトの基準点を中心に、回転やスケール変更を行います。オブジェクト（ステージ上）の任意の点を中心に拡大したい場合には、プログラムに少しコツが [...]]]></description>
			<content:encoded><![CDATA[<p>自分が昔ハマったことのあるプログラムですが、Flashではシンボル化されたオブジェクトの基準点を中心に、回転やスケール変更を行います。オブジェクト（ステージ上）の任意の点を中心に拡大したい場合には、プログラムに少しコツが必要です。</p>
<p>下記の参考スクリプトの2つの関数、RotateA()とRotateB()は、結果は同じになりますが、アプローチが少し違います。どちらの関数も引数は「操作したいオブジェクト、基準点の座標、相対回転角度」になっています。</p>
<p>RotateA()が、いつも自分で使っている方法。まず、回転させる直前と直後に指定したオブジェクトの親視点で基準点の位置を取得。この差分だけ回転した直後にオブジェクトを移動し位置を補正します。</p>
<p>RotateB()はオブジェクトの基準点自体を移動させる方法。最近読んだ<a href="http://level0.kayac.com/2009/11/matrix_with_getbounds.php">_level0.KAYAC 「getBounds + Matrixで、もう基準点にはこだわらない。」</a>を参考にしました。Matrixを使っているあたり、こっちの方がプロっぽいです。<a href="http://blog.cellfusion.jp/archives/633/">cellfusion blog 「DisplayObject.transform.matrix」</a>でもほぼ同じ方法を紹介しています。</p>
<p>この2つの方法以外にも、オブジェクトを入れ子にして操作する方法がありますが、あまりスマートではないので省略します。</p>
<pre class="brush: as3; title: ; notranslate">
package {
	import flash.display.Graphics;
	import flash.display.MovieClip;
	import flash.events.Event;
	import flash.events.KeyboardEvent;
	import flash.geom.Matrix;
	import flash.geom.Point;
	import flash.geom.Rectangle;

	public class Main extends MovieClip {

		//オブジェクト
		private var Sample_mc:MovieClip;
		private var Point_mc:MovieClip;

		//動作タイプ
		private var check:Boolean;

		public function Main():void {

			//オブジェクト（グレーの四角）を描画
			Sample_mc = new MovieClip();
			this.addChild(Sample_mc);
			Sample_mc.x = 200;
			Sample_mc.y = 150;
			var g:Graphics = Sample_mc.graphics;
			g.beginFill(0x999999, 1);
			g.drawRect(-10, -10, 200, 150);

			//基準点を描画
			Point_mc = new MovieClip();
			this.addChild(Point_mc);

			//初期値
			check = true;

			//リスナー登録
			this.addEventListener(Event.ENTER_FRAME, Update);
			stage.addEventListener(KeyboardEvent.KEY_DOWN, Change);
		}

		//動作タイプを変更
		private function Change(e:Event):void {

			//更新
			check = !check;
		}

		//表示更新
		private function Update(e:Event):void {

			//回転
			if (check) RotateA(Sample_mc, new Point(200, 200), 1);
			else RotateB(Sample_mc, new Point(300, 150), -2);
		}

		//回転
		private function RotateA(_object:MovieClip, _p:Point, _rotation:Number):void {

			//基準点を描画
			Draw(_p);

			//基準点をステージ上の座標で設定
			var p:Point = _object.globalToLocal(_p);

			//変更前の座標を取得
			var a:Point = _object.localToGlobal(p);

			//回転
			_object.rotation += _rotation;

			//変更後の座標を取得
			var b:Point = _object.localToGlobal(p);

			//差を補正
			var c:Point = a.subtract(b);
			_object.x += c.x;
			_object.y += c.y;
		}

		//回転
		private function RotateB(_object:MovieClip, _p:Point, _rotation:Number):void {

			//基準点を描画
			Draw(_p);

			//現状のマトリクスを取得
			var mx:Matrix = _object.transform.matrix;

			//オブジェクトの領域を取得
			var r:Rectangle = _object.getBounds(_object.parent);

			//基準点を任意の座標に変更
			mx.translate(-_p.x, -_p.y);

			//回転
			mx.rotate(_rotation / 180 * Math.PI);

			//基準点を初期位置に戻す
			mx.translate(_p.x, _p.y);

			//反映
			_object.transform.matrix = mx;
		}

		//基準点を描画
		private function Draw(_p:Point):void {

			//赤点を描画
			var g:Graphics = Point_mc.graphics;
			g.clear();
			g.beginFill(0xFF0000, 1);
			g.drawCircle(_p.x, _p.y, 5);
		}
	}
}
</pre>
]]></content:encoded>
			<wfw:commentRss>http://tmdf.net/blog/20091223_base_poin.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Booleanの型変換</title>
		<link>http://tmdf.net/blog/20091202_as3boolean.html</link>
		<comments>http://tmdf.net/blog/20091202_as3boolean.html#comments</comments>
		<pubDate>Wed, 02 Dec 2009 13:54:20 +0000</pubDate>
		<dc:creator>tmdf</dc:creator>
				<category><![CDATA[Flash / ActionScript]]></category>
		<category><![CDATA[ActionScript]]></category>

		<guid isPermaLink="false">http://www.tmdf.net/blog/?p=1354</guid>
		<description><![CDATA[trick7「hoge=”true”を受け取る時」を読んでいたのに、同じミスを最近したので書いておきます。 XMLファイル保存時など、Boolean型のデータをそのまま書き出すと文字列の &#8220;true&#822 [...]]]></description>
			<content:encoded><![CDATA[<p>trick7「<a href="http://www.trick7.com/blog/2009/04/09-200343.php">hoge=”true”を受け取る時</a>」を読んでいたのに、同じミスを最近したので書いておきます。</p>
<p>XMLファイル保存時など、Boolean型のデータをそのまま書き出すと文字列の &#8220;true&#8221; か &#8220;false” になりますが、読み込み時に、この文字列を強制型変換すると &#8220;true&#8221; &#8220;false&#8221; のどちらもtrueになってしまいます。読み込む時は強制型変換はせずに、文字列の等価性（==）を見るようにしましょう。</p>
<p>以下はキーボードが押された場合に、同階層のSample.xmlを読み込んで、trueかfalseを強制Boolean型変換かStringの判定で出力するサンプルコード。</p>
<pre class="brush: xml; title: ; notranslate">
//Sample.xml
&lt;data&gt;
  &lt;a&gt;true&lt;/a&gt;
  &lt;b&gt;false&lt;/b&gt;
&lt;/data&gt;
</pre>
<pre class="brush: as3; title: ; notranslate">
//Main.as
package {
	import flash.display.MovieClip;
	import flash.events.Event;
	import flash.events.KeyboardEvent;
	import flash.net.URLLoader;
	import flash.net.URLRequest;

	public class Main extends MovieClip {

		public function Main():void {

			//リスナー登録
			stage.addEventListener(KeyboardEvent.KEY_DOWN, KeyDown);
		}

		//キーボードが押された場合
		private function KeyDown(e:KeyboardEvent):void {

			//XMLファイルの読み込み
			var request:URLRequest = new URLRequest(&quot;Sample.xml&quot;);
			var loader:URLLoader = new URLLoader(request);
			loader.dataFormat = &quot;text&quot;;
			loader.addEventListener(Event.COMPLETE, Output);

			//出力
			function Output(e:Event):void {

				var xml:XML = new XML();
				xml = XML(loader.data);

				//Boolean型で処理
				if (Boolean(xml.a)) trace(&quot;Boolean A:true&quot;);
				else trace(&quot;Boolean A:false&quot;);
				if (Boolean(xml.b)) trace(&quot;Boolean B:true&quot;);
				else if (Boolean(xml.b)) trace(&quot;Boolean B:false&quot;);

				//String型で処理
				if (xml.a == &quot;true&quot;) trace(&quot;String A:true&quot;);
				else trace(&quot;String A:false&quot;);
				if (xml.b == &quot;true&quot;) trace(&quot;String B:true&quot;);
				else trace(&quot;String B:false&quot;);
			}
		}
	}
}
</pre>
]]></content:encoded>
			<wfw:commentRss>http://tmdf.net/blog/20091202_as3boolean.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

