<?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>memo.393 &#187; OREORELibrary</title>
	<atom:link href="http://memo.393.bz/archives/tag/oreorelibrary/feed" rel="self" type="application/rss+xml" />
	<link>http://memo.393.bz</link>
	<description>個人的メモです。間違いなどありましたらご指摘ください。。。</description>
	<lastBuildDate>Sun, 27 Nov 2011 15:27:41 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>[AS][オレオレライブラリ]シフトキー(ctrlキー)を押してる、押してないを判定してくれるクラス</title>
		<link>http://memo.393.bz/archives/1243</link>
		<comments>http://memo.393.bz/archives/1243#comments</comments>
		<pubDate>Thu, 01 Jul 2010 23:05:26 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[ActionScript]]></category>
		<category><![CDATA[AS3]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[OREORELibrary]]></category>

		<guid isPermaLink="false">http://memo.393.bz/?p=1243</guid>
		<description><![CDATA[製作の上であったら便利かな、と思ったのでクラス化。 ◆動機 たとえば、あるボタンを押したら外部読み込み開始するとしたら、それが失敗したときなどを考慮してにエラー処理を実装しますよね。 この実装のチェックとしては、わざとエ [...]]]></description>
			<content:encoded><![CDATA[<p>製作の上であったら便利かな、と思ったのでクラス化。</p>
<p>◆動機<br />
たとえば、あるボタンを押したら外部読み込み開始するとしたら、それが失敗したときなどを考慮してにエラー処理を実装しますよね。<br />
この実装のチェックとしては、わざとエラーが起こる状態を再現してテストしなくちゃいけない。<br />
たとえば、読み込むべきURLが外部xmlに記述してあって、それが存在しないURLだった場合のエラー処理だったら、わざとxmlに記述されたURLを間違えたものに書き換えてチェックとか。<br />
というようなことを以前はやってました。<br />
が、いちいちファイル書き換えてチェックするのが面倒。</p>
<p>そこで、<br />
もしshiftキーを押しながらクリックしたら、存在しないURLを読みにいくようなロジックを最初から組んどけばテスト簡単じゃね？<br />
お客さんにエラー時の動作処理をみてもらうときも、お客さんの負担減るんじゃね？</p>
<p>ってことで、shiftキーとctrlキーが押されてるかどうかを判定するクラスを作りました。<br />
Singletonで作ってあるので、最初に初期化しちゃえば、どこからでも参照可能。<br />
消すときも、Singletonなのでクラス名で検索書ければどこで使ってるかが一目瞭然（のはず)。</p>
<p>使い方は以下のような感じ</p>
<pre name="code" class="as">

//準備
//ステージに追加、これだけでOK
addChild(AddKeyDownUtil.getInstance());

//使い方、以下のプロパティを参照して、true/falseを取得できる
//シフトキーが押されてたら、true,押されてなかったらflaseを返す
AddKeyDownUtil.getInstance().isShiftDown;//戻り値：Boolean
//コントロールキーが押されてたら、true,押されてなかったらflaseを返す
AddKeyDownUtil.getInstance().isCtrlDown;//戻り値：Boolean

//使用例）
//_btnがクリックされたときにシフトキーが押されているかいないかで処理を分岐
_btn.addEventListener(MouseEvent.CLICK, clickHandler);
private function clickHandler(e:MouseEvent):void {
    if(AddKeyDownUtil.getInstance().isShiftDown){
        //シフトキーが押されていた場合に実行したい処理
    }else{
        //シフトキーが押されていない場合に実行したい処理
    }
}
</pre>
<p>クラスファイルは以下の通り</p>
<pre name="code" class="as">

package bz393.util {
	import flash.display.Sprite;
	import flash.events.Event;
	import flash.events.KeyboardEvent;
	import flash.ui.Keyboard;

	/**
	 * ...
	 * @author 393
	 */
	public class AddKeyDownUtil extends Sprite{

		public static var instance:AddKeyDownUtil;
		public var isShiftDown:Boolean = false;
		public var isCtrlDown:Boolean = false;

		public function AddKeyDownUtil(enforcer:SingletonEnforcer) { };

		public static function getInstance():AddKeyDownUtil {
			if (!AddKeyDownUtil.instance) {
				AddKeyDownUtil.instance = new AddKeyDownUtil(new SingletonEnforcer());
				AddKeyDownUtil.instance.addEventListener(Event.ADDED_TO_STAGE,init);
			}
			return AddKeyDownUtil.instance;
		}

		static private function init(e:Event):void {
			AddKeyDownUtil.instance.removeEventListener(Event.ADDED_TO_STAGE, init);

			AddKeyDownUtil.getInstance().stage.addEventListener(KeyboardEvent.KEY_DOWN, keyDownHander);
			AddKeyDownUtil.getInstance().stage.addEventListener(KeyboardEvent.KEY_UP, keyUpHander);
		}

		static private function keyDownHander(e:KeyboardEvent):void {
			switch (e.keyCode) {
				case Keyboard.SHIFT:
				AddKeyDownUtil.instance.isShiftDown = true;
				break;
				case Keyboard.CONTROL:
				AddKeyDownUtil.instance.isCtrlDown = true;
				break;
			}
		}

		static private function keyUpHander(e:KeyboardEvent):void {
			switch (e.keyCode) {
				case Keyboard.SHIFT:
				AddKeyDownUtil.instance.isShiftDown = false;
				break;
				case Keyboard.CONTROL:
				AddKeyDownUtil.instance.isCtrlDown = false;
				break;
			}
		}
	}

}
class SingletonEnforcer {
};
</pre>
]]></content:encoded>
			<wfw:commentRss>http://memo.393.bz/archives/1243/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

