<?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>仮ぶろぐ &#187; dq</title>
	<atom:link href="http://plusb.jp/blog/?cat=18&#038;feed=rss2" rel="self" type="application/rss+xml" />
	<link>http://plusb.jp/blog</link>
	<description>今更なことをそれでもつらづらと書くブログ</description>
	<lastBuildDate>Tue, 07 May 2013 09:06:48 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.5.1</generator>
		<item>
		<title>dq 0.6 リリース</title>
		<link>http://plusb.jp/blog/?p=795</link>
		<comments>http://plusb.jp/blog/?p=795#comments</comments>
		<pubDate>Thu, 25 Aug 2011 15:30:38 +0000</pubDate>
		<dc:creator>M. K.</dc:creator>
				<category><![CDATA[dq]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[プログラミング]]></category>

		<guid isPermaLink="false">http://plusb.jp/blog/?p=795</guid>
		<description><![CDATA[まだ実装すべき機能は残っていますが、ライブラリを0.6.0として区切りました。 そろそろ、Firefoxでもっさりしている原因を突き止めないと・・・ ライブラリー RPG 習作 戦闘テスト 戦闘の表示効果や効果音を改善し &#8230; <a href="http://plusb.jp/blog/?p=795">続きを読む <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>まだ実装すべき機能は残っていますが、ライブラリを0.6.0として区切りました。<br />
そろそろ、Firefoxでもっさりしている原因を突き止めないと・・・<br />
<span id="more-795"></span><br />
<a href="http://plusb.jp/dq/">ライブラリー</a><br />
<a href="http://plusb.jp/dq/samples/rpg_learning.html">RPG 習作</a><br />
<a href="http://plusb.jp/dq/samples/bt_test.html">戦闘テスト</a></p>
<ul>
<li>戦闘の表示効果や効果音を改善しました。</li>
<li>NPCのAIと移動機能を実装</li>
<li>お店機能を改善</li>
<li>装備による追加効果に対応</li>
<li>マップエディターを改訂（マップの追加やUIを改善)</li>
<li>UIの見栄えを少し変更(CSS3を一部使用）</li>
<li>UIにスピンボックスを追加</li>
<li>スマートフォンを想定したRTG用のライブラリを作成</li>
<li>不具合をそこそこ修正</li>
</ul>
<p><a href="http://plusb.jp/blog/wp-content/uploads/2011/08/nantara.png"><img src="http://plusb.jp/blog/wp-content/uploads/2011/08/nantara.png" alt="" title="ローラ救出" width="245" height="215" class="alignnone size-full wp-image-776" /></a><br />
<a href="http://plusb.jp/blog/wp-content/uploads/2011/08/map_editor.png"><img src="http://plusb.jp/blog/wp-content/uploads/2011/08/map_editor-300x208.png" alt="マップエディター" title="マップエディター" width="300" height="208" class="alignnone size-medium wp-image-746" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://plusb.jp/blog/?feed=rss2&#038;p=795</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>dq(rpg) 2011-08-22</title>
		<link>http://plusb.jp/blog/?p=789</link>
		<comments>http://plusb.jp/blog/?p=789#comments</comments>
		<pubDate>Mon, 22 Aug 2011 16:21:54 +0000</pubDate>
		<dc:creator>M. K.</dc:creator>
				<category><![CDATA[dq]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[プログラミング]]></category>

		<guid isPermaLink="false">http://plusb.jp/blog/?p=789</guid>
		<description><![CDATA[ナイトリービルドを更新。 主にお店関連の不具合対応 既知の不具合を修正したら、0.6のリリースしようかと。 消費アイテムのみ複数保持するように変更 装備を買ったら、その場で装備する選択肢を追加 アイテムを交換できない不具 &#8230; <a href="http://plusb.jp/blog/?p=789">続きを読む <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>ナイトリービルドを更新。<br />
主にお店関連の不具合対応<br />
既知の不具合を修正したら、0.6のリリースしようかと。<br />
<span id="more-789"></span></p>
<ol>
<li>消費アイテムのみ複数保持するように変更</li>
<li>装備を買ったら、その場で装備する選択肢を追加</li>
<li>アイテムを交換できない不具合修正</li>
<li>アイテムを売った際にお金が増えない不具合を修正</li>
<li>メッセージにスクリプト指定の不具合を修正</li>
<li>宿屋のジングルのタイミングを修正</li>
</ol>
<p><a href="http://plusb.jp/dqfw/">ナイトリービルド</a>を更新。<br />
<a href="http://plusb.jp/dqfw/samples/rpg_learning.html">習作</a></p>
<p>補足ですが、キャッシュが効いている場合に<code>CTRL+R</code>などでページを再読み込みする必要があります。</p>
]]></content:encoded>
			<wfw:commentRss>http://plusb.jp/blog/?feed=rss2&#038;p=789</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>dq(rpg) 2011-08-20</title>
		<link>http://plusb.jp/blog/?p=775</link>
		<comments>http://plusb.jp/blog/?p=775#comments</comments>
		<pubDate>Sat, 20 Aug 2011 14:38:57 +0000</pubDate>
		<dc:creator>M. K.</dc:creator>
				<category><![CDATA[dq]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[プログラミング]]></category>
		<category><![CDATA[rpg]]></category>

		<guid isPermaLink="false">http://plusb.jp/blog/?p=775</guid>
		<description><![CDATA[ナイトリービルドを更新。 NPCのイベント処理を追加して、ローラ姫を救出出来るようにしました。 既知の不具合を修正したら、0.6のリリースしようかと。 NPCと自動戦闘可能にしました。 NPCの表示・非表示をフラグで指定 &#8230; <a href="http://plusb.jp/blog/?p=775">続きを読む <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>ナイトリービルドを更新。<br />
NPCのイベント処理を追加して、ローラ姫を救出出来るようにしました。<br />
既知の不具合を修正したら、0.6のリリースしようかと。<br />
<span id="more-775"></span></p>
<ol>
<li>NPCと自動戦闘可能にしました。</li>
<li>NPCの表示・非表示をフラグで指定可能にしました。</li>
<li>NPCの移動APIを追加</li>
<li>戦闘時のメッセージ表示を改善</li>
<li>メッセージにスクリプト指定に対応</li>
<li>ジングルの再生遅延を改善</li>
</ol>
<p><a href="http://plusb.jp/blog/wp-content/uploads/2011/08/nantara.png"><img src="http://plusb.jp/blog/wp-content/uploads/2011/08/nantara.png" alt="" title="ローラ救出" width="245" height="215" class="alignnone size-full wp-image-776" /></a><br />
<a href="http://plusb.jp/dqfw/">ナイトリービルド</a>を更新。<br />
<a href="http://plusb.jp/dqfw/samples/rpg_learning.html">習作</a></p>
<p>補足ですが、キャッシュが効いている場合に<code>CTRL+R</code>などでページを再読み込みする必要があります。</p>
]]></content:encoded>
			<wfw:commentRss>http://plusb.jp/blog/?feed=rss2&#038;p=775</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>JavaScriptの遅延ロード</title>
		<link>http://plusb.jp/blog/?p=758</link>
		<comments>http://plusb.jp/blog/?p=758#comments</comments>
		<pubDate>Fri, 05 Aug 2011 06:21:40 +0000</pubDate>
		<dc:creator>M. K.</dc:creator>
				<category><![CDATA[dq]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[tips]]></category>
		<category><![CDATA[プログラミング]]></category>
		<category><![CDATA[遅延ロード]]></category>

		<guid isPermaLink="false">http://plusb.jp/blog/?p=758</guid>
		<description><![CDATA[久しぶりに今更なネタですが、JavaScriptの遅延ロードについてです。 単純にJavaScriptのコードで動的にスクリプトを読み込みたいだけならオンデマンドにScriptタグをDOMに追加するだけですみます。 とこ &#8230; <a href="http://plusb.jp/blog/?p=758">続きを読む <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>久しぶりに今更なネタですが、JavaScriptの遅延ロードについてです。<br />
単純にJavaScriptのコードで動的にスクリプトを読み込みたいだけならオンデマンドに<code>Script</code>タグをDOMに追加するだけですみます。<br />
ところが、遅延ロードありきでライブラリやらを構築し出すと、読み込み完了している必要があるだとか依存関係だとかの問題が発生するわけです。<br />
<span id="more-758"></span><br />
これから説明するコードは拙作のライブラリ(<a href="http://plusb.js/dqfw/js/dq.js">dq.js</a>)から抜粋しています。</p>
<h3>とりあえず遅延ロード</h3>
<p>スクリプト内から動的にスクリプトをロードする<code>include()</code>関数の例です。</p>
<pre>
    include = function (file) {
        var s = document.createElement('script');
        s.src = file;
        s.type = 'text/javascript';
        s.defer = 'defer';
        document.head.appendChild(s);
    }
</pre>
<p>このコード自体はなんでも無いですね。<code>script</code>タグをheadタグに追加しているだけです。</p>
<h3>ロード完了を待つ</h3>
<p>そして読み込み完了を待って、任意のコードを実行する<code>lazyLoad()</code>を実装します。</p>
<pre>
    lazyLoad = function(url, ctl, fn) {
        function _check(ctl) { <span style="color:Red;">//オブジェクトの有無でロード完了を判定</span>
            return !!(eval(ctl));
        }
        if (_check(ctl)) {
            fn &#038;&#038; fn(); <span style="color:Red;">//ロード済みなら指定の関数をすぐ実行</span>
        } else {
            include(url);
            setTimeout(function () {
                if (!_check(ctl)) {
                    setTimeout(arguments.callee, 15.625);
                } else {
                    fn &#038;&#038; fn();<span style="color:Red;">//読み込みが終わったら関数を実行</span>
                }
            }, 15.625);
        }
    }
</pre>
<p>今でもそうだと思うのですが、scriptタグの読み込み完了イベントは拾えないので代わりに遅延ロードしたスクリプトを実行した結果として作成されるオブジェクトの有無を判定に利用します。<br />
後は既に読み込み済みなら遅延ロードを実行しないようにチェックを挟んでおきます。</p>
<h3>複数箇所からの呼び出し</h3>
<p>先のコードではとりあえず読み込み済みのチェックは実施していますが、遅延ロードが完了する前に複数回同じスクリプトが呼び出されると無駄があったり面倒くさいことが発生するかもしれません。<br />
そこで同じスクリプトに対しては一度しかinclude()が呼び出されないようにします。</p>
<pre>
    _urls = [];
    lazyLoad = function (url, ctl, fn) {
        function _check(ctl) {
            return !!(eval(ctl));
        }
        if (_check(ctl)) {
            fn &#038;&#038; fn();
            _remove$lazyLoad();
        } else {<span style="color: Red;">
            if (_urls[url]) { <span style="color: Red;">//リクエスト済みならfnのみ登録して終了。</span>
                _urls[url].push(fn);
                return;
            }
            _urls[url] = [];</span>
            include(url);<span style="color: Red;">
            _urls[url].push(fn);</span>
            setTimeout(function () {
                if (!_check(ctl)) {
                    setTimeout(arguments.callee, 15.625);
                } else {<span style="color: Red;">
                    for (var i = 0; i < DQ._urls[url].length; i++) {
                        _urls[url][i] &#038;&#038; DQ._urls[url][i].call();
                    }
                    delete _urls[url];</span>
                }
            }, 15.625);
        }
    }
</pre>
<p>読み込み中のスクリプトと読み込み完了時に実行される関数を<code>_urls</code>に追加しています。<br />
`</p>
<h3>複数のスクリプトを遅延ロードする</h3>
<p>複数のスクリプトを遅延ロードしてから自身のコードを実行したい場合どうなるのでしょうか。</p>
<pre>
lazyLoad("first.js", "Window.FIRST", function() {
  layzLoad("second.js", "Window.SECOND", function() {
      ... //自分のコード
  });
});
</pre>
<p>もしくは</p>
<pre>
lazyLoad("first.js", "Window.FIRST");
layzLoad("second.js", "Window.SECOND", function() {
    ... //自分のコード
});
</pre>
<p>まあ、どちらもいまいちですね。<br />
そこで、全ての遅延ロードが完了したら呼び出される、<code>afterLoad()</code>という関数を用意します。</p>
<pre>
    lazyLoad = function (url, ctl, fn) {
        function _check(ctl) {
            return !!(eval(ctl));
        }
        if (_check(ctl)) {
            fn &#038;&#038; fn();
            <span style="color:red;">__remove$lazyLoad();</span>
        } else {
            if (_urls[url]) {
                _urls[url].push(fn);
                return;
            }
            _urls[url] = [];
            include(url);
            _urls[url].push(fn);

            setTimeout(function () {
                if (!_check(ctl)) {
                    setTimeout(arguments.callee, 15.625);
                } else {
                    for (var i = 0; i < _urls[url].length; i++) {
                        _urls[url][i] &#038;&#038; _urls[url][i].call();
                    }
                    delete _urls[url];
                    <span style="color:red;">_remove$lazyLoad();</span>
                }

            }, 15.625);
        }
<span style="color:red;">_
        function _remove$lazyLoad() {
            var cnt = 0;
            for (var nm in DQ._urls) {
                cnt += _urls.hasOwnProperty(nm) ? 1 : 0;
            }
            if (cnt == 0) {
                __trigger &#038;&#038; setTimeout(DQ.__trigger, 0);
            }
        }
    }

__trigger = function () {
    for (var i = 0; i < _onLoad.length; i++) {
        _onLoad[i].call();
    }
    _onLoad.length = 0;
    delete __trigger;
}
_onLoad = [];
afterLoad = function (callback) {
    _onLoad.push(callback);
}</span>
</pre>
<p>使い方は以下の通りです。</p>
<pre>
lazyLoad("first.js", "Window.FIRST");
layzLoad("second.js", "Window.SECOND");
afterLoad(function() {
    ... //自分のコード
});
</pre>
<p>より複雑なケースでは問題が出る可能性もありますが、そこは宿題ということで。</p>
]]></content:encoded>
			<wfw:commentRss>http://plusb.jp/blog/?feed=rss2&#038;p=758</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>dq(rpg) 2011-08-02</title>
		<link>http://plusb.jp/blog/?p=745</link>
		<comments>http://plusb.jp/blog/?p=745#comments</comments>
		<pubDate>Tue, 02 Aug 2011 14:13:52 +0000</pubDate>
		<dc:creator>M. K.</dc:creator>
				<category><![CDATA[dq]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[ゲーム作成]]></category>
		<category><![CDATA[JavaScript MapEditor]]></category>

		<guid isPermaLink="false">http://plusb.jp/blog/?p=745</guid>
		<description><![CDATA[ナイトリービルドを更新。 マップエディターを更新しました。汎用的なマップエディターのための最低限の機能は実装した気がします。 プロジェクトを導入 マップの新規追加対応 マップのプロパティー編集に対応 コマンドを追加（マッ &#8230; <a href="http://plusb.jp/blog/?p=745">続きを読む <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>ナイトリービルドを更新。<br />
マップエディターを更新しました。汎用的なマップエディターのための最低限の機能は実装した気がします。<br />
<span id="more-745"></span></p>
<ol>
<li>プロジェクトを導入</li>
<li>マップの新規追加対応</li>
<li>マップのプロパティー編集に対応</li>
<li>コマンドを追加（マップの移動、リサイズ)</li>
<li>スプライトのアップロード対応</li>
</ol>
<p><a href="http://plusb.jp/blog/wp-content/uploads/2011/08/map_editor.png"><img src="http://plusb.jp/blog/wp-content/uploads/2011/08/map_editor-300x208.png" alt="マップエディター" title="マップエディター" width="300" height="208" class="alignnone size-medium wp-image-746" /></a><br />
<a href="http://plusb.jp/dqfw/">ナイトリービルド</a>を更新。<br />
<a href="http://plusb.jp/dqfw/samples/map_editor.html">マップエディター</a><br />
後の問題はオフラインでも使えなければ公開している意味が無いことかorz</p>
<p>補足ですが、キャッシュが効いている場合に<code>CTRL+R</code>などでページを再読み込みする必要があります。</p>
]]></content:encoded>
			<wfw:commentRss>http://plusb.jp/blog/?feed=rss2&#038;p=745</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>dq(rpg) 2011-07-25</title>
		<link>http://plusb.jp/blog/?p=731</link>
		<comments>http://plusb.jp/blog/?p=731#comments</comments>
		<pubDate>Mon, 25 Jul 2011 15:53:30 +0000</pubDate>
		<dc:creator>M. K.</dc:creator>
				<category><![CDATA[dq]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[ゲーム作成]]></category>
		<category><![CDATA[Tiled Map Editor]]></category>

		<guid isPermaLink="false">http://plusb.jp/blog/?p=731</guid>
		<description><![CDATA[ナイトリービルドを更新。 マップエディターを更新しました。 canvasで実装したことで、描画に余裕ができたので今までの固定長のマップ領域をブラウザーに併せてサイズ変更できるようにしました。 マップエディターを汎用化する &#8230; <a href="http://plusb.jp/blog/?p=731">続きを読む <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>ナイトリービルドを更新。<br />
マップエディターを更新しました。<br />
<span id="more-731"></span><br />
canvasで実装したことで、描画に余裕ができたので今までの固定長のマップ領域をブラウザーに併せてサイズ変更できるようにしました。<br />
<div id="attachment_732" class="wp-caption alignnone" style="width: 310px"><a href="http://plusb.jp/blog/wp-content/uploads/2011/07/map_editor.jpg"><img src="http://plusb.jp/blog/wp-content/uploads/2011/07/map_editor-300x240.jpg" alt="マップエディター" title="map_editor" width="300" height="240" class="size-medium wp-image-732" /></a><p class="wp-caption-text">マップエディター</p></div></p>
<p>マップエディターを汎用化するために、しばらく改変を続けたいと思います。</p>
<p><a href="http://plusb.jp/dqfw/">ナイトリービルド</a>を更新。<br />
<a href="http://plusb.jp/dqfw/samples/map_editor.html">マップエディター</a></p>
<p>補足ですが、キャッシュが効いている場合に<code>CTRL+R</code>などでページを再読み込みする必要があります。</p>
]]></content:encoded>
			<wfw:commentRss>http://plusb.jp/blog/?feed=rss2&#038;p=731</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>dq(rpg) 2011-07-21</title>
		<link>http://plusb.jp/blog/?p=710</link>
		<comments>http://plusb.jp/blog/?p=710#comments</comments>
		<pubDate>Thu, 21 Jul 2011 16:37:05 +0000</pubDate>
		<dc:creator>M. K.</dc:creator>
				<category><![CDATA[dq]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[ゲーム作成]]></category>
		<category><![CDATA[プログラミング]]></category>
		<category><![CDATA[rpg]]></category>

		<guid isPermaLink="false">http://plusb.jp/blog/?p=710</guid>
		<description><![CDATA[ナイトリービルドを更新。 ロトの鎧を実装しました。 これまでロトの鎧を実装しようとして、手が止まっていました。ロトの鎧を装備すると沼のダメージが無くなり、魔法系のダメージが半減されます。 使い捨てのコードならダメージ処理 &#8230; <a href="http://plusb.jp/blog/?p=710">続きを読む <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>ナイトリービルドを更新。<br />
ロトの鎧を実装しました。<br />
<span id="more-710"></span><br />
これまでロトの鎧を実装しようとして、手が止まっていました。ロトの鎧を装備すると沼のダメージが無くなり、魔法系のダメージが半減されます。<br />
使い捨てのコードならダメージ処理でハードコーディングすれば良いのですが、フレームワークとして出来れば汎用的に実装したい。<br />
たぶん、ダメージ判定後に装備に対して補正を要求すれば良いのかな。</p>
<pre>
DQ.RPG.DamageType = { Unknown: 0, Pysical: 1, Magic: 2, Fire: 3, Water: 4, Erth: 5, Wind: 6, Sander: 7, Light: 8, Dark: 9, Swamp: 10, Baria:11 }
Player.prototype.gainDamage = function(damage, type) {
   for(var i = 0 ; i &lt; this._equipmentIDs.length ; i++ ) {
       var equip = world.items[this._equipmentIDs[i].uid];
       damage = equip.gainDamage(damage, type);
   }
   return damage;
}

storategys['roro'] = roro_storategy;

roro_storategy.prototype.gainDamage = function(damage, type) {
   var dm = DQ.RPG.DamageType;
   swich(type) {
       dm.Magic:
       dm.Fire:
           dm /= 2;
           break;
       dm.Swamp:
       dm.Baria:
           dm = 0;
           break;
   }
   return dm;
}
</pre>
<p>沼なら</p>
<p>・・・それから３日後</p>
<p>装備することで一時状態を追加すれば、良いのではないでしょうか。<br />
呪われた装備なら、カースを追加。カース状態中は装備を外せないが、カースを解除されると装備も外せると。</p>
<p>「浮いている」なら、スパイクや沼やバリア無効。</p>
<p>ロトを装備している「状態」なら魔法や火を半減、ダメージを受けるチップ（沼、バリア）無効。</p>
<p>装備に equipメソッドとremoveメソッドを追加します。</p>
<pre>
DQ.RPG.Item.prototype = {
  equip: functon(type, to) {
    to.temporary.push(
        new DQ.RPG.State(world.statuses.find("uid", 10009)));
  },
  remove: function() {
  }
}
</pre>
<p>特殊な装備は装備したときに状態を追加します。</p>
<p>DQ1では、呪われていると王様の台詞が変化します。呪われたらフラグを立てる方法が単純ですが、<br />
プレイヤーが呪われた状態かを調べる方法もありです。</p>
<pre>
Player.hasStatus = function(uid) {
}
</pre>
<p>チップによるイベントでは、状態によるisAvoid()判定とgainDamage()判定を実施します。<br />
スパイクでのダメージの場合、luckにより回避が発生する仕組みも実装できます。</p>
<pre>
Player.prototype.isAvoid(type) {
}
Player.prototype.gainDamage(dmg, type) {
}

Status.prototype.isAvoid(type) {
}
Status.prototype.gainDamage(dmg, type0 {
}
</pre>
<p>標準で提供されていない状態や装備は後から追加可能にします。<br />
今でも、種類毎にストラテジーを選択する仕組みが実装されていますが、いっそのことUID別の<br />
テーブルがあれば、そこからストラテジーを選択出来るようにして拡張毎のストラテジーを後から<br />
追加出来るようにすればよいのではないでしょうか。</p>
<pre>
DQ.RPG.State.Roro = function() {
}
DQ.RPG.State.table.push({uid: 10009, strategy: DQ.RPG.State.Roro});
</pre>
<p><a href="http://plusb.jp/dqfw/">ナイトリービルド</a>を更新。<br />
<a href="http://plusb.jp/dqfw/samples/rpg_learning.html">RPG 習作</a>(<a href="http://plusb.jp/dqfw/samples/rpg_learning.html?debug=true">debug</a>)<br />
<a href="http://plusb.jp/dqfw/samples/bt_test.html">戦闘テスト</a><br />
<a href="http://plusb.jp/dqfw/samples/message_editor.html">メッセージエディター</a></p>
<p>補足ですが、キャッシュが効いている場合に<code>CTRL+R</code>などでページを再読み込みする必要があります。</p>
]]></content:encoded>
			<wfw:commentRss>http://plusb.jp/blog/?feed=rss2&#038;p=710</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title></title>
		<link>http://plusb.jp/blog/?p=675</link>
		<comments>http://plusb.jp/blog/?p=675#comments</comments>
		<pubDate>Wed, 13 Jul 2011 16:21:09 +0000</pubDate>
		<dc:creator>M. K.</dc:creator>
				<category><![CDATA[dq]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[ゲーム作成]]></category>
		<category><![CDATA[game]]></category>
		<category><![CDATA[iphone]]></category>

		<guid isPermaLink="false">http://plusb.jp/blog/?p=675</guid>
		<description><![CDATA[ナイトリービルドを更新。 iPhone向けに少しだけまじめにバーチャルパッドを実装しました。もう一つ、デフォルトで遅延読み込みをするライブラリを整理して読み込みの高速化を図りました（ブロードバンド環境では関係ないですけど &#8230; <a href="http://plusb.jp/blog/?p=675">続きを読む <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>ナイトリービルドを更新。<br />
iPhone向けに少しだけまじめにバーチャルパッドを実装しました。もう一つ、デフォルトで遅延読み込みをするライブラリを整理して読み込みの高速化を図りました（ブロードバンド環境では関係ないですけどね）。<br />
<span id="more-675"></span><br />
ソース:<a href="http://plusb.jp/dqfw/js/dq-virtualpad.js">dq-virtualpad.js</a></p>
<p>バーチャルパッドですがtouchしたまま方向を検知するので、なんだか難しく考えていましたがアナログジョイスティックのデジタル変換の様な考えで単純にパッドの領域を９分割して、上下左右に二値化しました。<br />
あと追加するのなら、逆にアナログジョイスティック機能やキーリピートのエミュレーション（連射モード）とかでしょうか。</p>
<pre>
 var me = this, dir,
    _make_dir = function (e) {
        var dir = 0;
        var dx = e.pageX - pX;
        var dy = e.pageY - pY;
        if (dx &lt;= 35) {
            dir += 1;
        } else if (70 &lt; dx) {
            dir += 2;
        }
        if (dy &lt;= 35) {
            dir += 4;
        } else if (70 &lt; dy) {
            dir += 8;
        }
        return dir;
    },
    touch_start = function (e) {
        $(tt).bind('mousemove', tt, touch_move);
        $(tt).one('mouseup', tt, touch_end);

        if (e.originalEvent.touches &#038;&#038; e.originalEvent.touches.length) {
            e = e.originalEvent.touches[0];
        } else if (e.originalEvent.changedTouches &#038;&#038; e.originalEvent.changedTouches.length) {
            e = e.originalEvent.changedTouches[0];
        }
        me.dir = _make_dir(e);
        me.onMousedown &#038;&#038; me.onMousedown(me.dir, e);

        return false;
    },
    touch_move = function (e) {
        if (e.originalEvent.touches &#038;&#038; e.originalEvent.touches.length) {
            e = e.originalEvent.touches[0];
        } else if (e.originalEvent.changedTouches &#038;&#038; e.originalEvent.changedTouches.length) {
            e = e.originalEvent.changedTouches[0];
        }
        var back = me.dir;
        me.dir = _make_dir(e);
        if (back != me.dir) {
            me.onMousedown &#038;&#038; me.onMousedown(me.dir, e);
        }
        return false;
    },
    touch_end = function (e) {
        $(tt).unbind('mousemove', touch_move);
        me.onMouseup &#038;&#038; me.onMouseup(e);
        me.dir = DQ.DIR.NONE;
        return false;
    }
</pre>
<p><a href="http://plusb.jp/dqfw/">ナイトリービルド</a>を更新。<br />
<a href="http://plusb.jp/dqfw/samples/rpg_learning.html">RPG 習作</a><br />
<a href="http://plusb.jp/dqfw/samples/bt_test.html">戦闘テスト</a></p>
<p>先日のデモに反映しました。まだ、ABボタンは機能していません。<br />
<a href="http://plusb.jp/dqfw/samples/shooting.html">shooting.html</a><br />
<iframe src="http://plusb.jp/dqfw/samples/shooting.html" width="320" height="420" style="overflow: hidden;"></iframe></p>
]]></content:encoded>
			<wfw:commentRss>http://plusb.jp/blog/?feed=rss2&#038;p=675</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>dq 2011-07-12</title>
		<link>http://plusb.jp/blog/?p=662</link>
		<comments>http://plusb.jp/blog/?p=662#comments</comments>
		<pubDate>Tue, 12 Jul 2011 15:35:59 +0000</pubDate>
		<dc:creator>M. K.</dc:creator>
				<category><![CDATA[dq]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[ゲーム作成]]></category>
		<category><![CDATA[canvas]]></category>
		<category><![CDATA[game]]></category>

		<guid isPermaLink="false">http://plusb.jp/blog/?p=662</guid>
		<description><![CDATA[ナイトリービルドを更新。 調子をこいて、複数保存に対応させたらサーバーがcookieが長すぎると文句を言い出しました（Firefoxだけですがorz)。ので、データの保存をローカルストレージへ移行しました。 cookie &#8230; <a href="http://plusb.jp/blog/?p=662">続きを読む <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>ナイトリービルドを更新。<br />
調子をこいて、複数保存に対応させたらサーバーがcookieが長すぎると文句を言い出しました（Firefoxだけですがorz)。ので、データの保存をローカルストレージへ移行しました。<br />
<span id="more-662"></span><br />
cookieにしたのは、Firefox3.xで<code>localStorage</code>に対応していなかったためだと思いますが、最初からこっちにしておけば良かったです。<br />
使い方は至って簡単。</p>
<pre>
  localStorage.setItem(key, value);
  value = localStorage.getItem(key);
</pre>
<p>また、これに伴ってkeyに名前空間としてプロジェクト名を付与して保存するようにしました。</p>
<p><a href="http://plusb.jp/dqfw/">ナイトリービルド</a>を更新。<br />
<a href="http://plusb.jp/dqfw/samples/rpg_learning.html">RPG 習作</a>(<a href="http://plusb.jp/dqfw/samples/rpg_learning.html?debug=true">debug</a>)<br />
<a href="http://plusb.jp/dqfw/samples/bt_test.html">戦闘テスト</a></p>
<p>HTML5 canvasの習得のために、canvasとフレームワークを追加しました(IE9,Firefox,Chromeとか)。<br />
<a href="http://plusb.jp/dqfw/samples/shooting.html">shooting.html</a><br />
<iframe src="http://plusb.jp/dqfw/samples/shooting.html" width="320" height="350" style="overflow: hidden;"></iframe></p>
]]></content:encoded>
			<wfw:commentRss>http://plusb.jp/blog/?feed=rss2&#038;p=662</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>dq(rpg) 2011-07-10</title>
		<link>http://plusb.jp/blog/?p=659</link>
		<comments>http://plusb.jp/blog/?p=659#comments</comments>
		<pubDate>Sun, 10 Jul 2011 17:37:08 +0000</pubDate>
		<dc:creator>M. K.</dc:creator>
				<category><![CDATA[dq]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[ゲーム作成]]></category>
		<category><![CDATA[プログラミング]]></category>
		<category><![CDATA[rpg]]></category>

		<guid isPermaLink="false">http://plusb.jp/blog/?p=659</guid>
		<description><![CDATA[ナイトリービルドを更新。 メッセージエディターを作成しました。 足下を調べられるようにしました。アイテムに「だいじなもの」を反映。 調べなければ発生しないイベントとしてsecretを追加しました。イベントの処理は宝箱とほ &#8230; <a href="http://plusb.jp/blog/?p=659">続きを読む <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>ナイトリービルドを更新。<br />
メッセージエディターを作成しました。<br />
足下を調べられるようにしました。アイテムに「だいじなもの」を反映。<br />
<span id="more-659"></span><br />
調べなければ発生しないイベントとして<code>secret</code>を追加しました。イベントの処理は宝箱とほぼ同じで、イベントで設定されたアイテムを入手します。<br />
アイテムの分類として「だいじなもの」は、進行が行き詰まらないように捨てたり、売ったり出来ないものです。<br />
メッセージは、直接表示することをjsonからIDを元に表示する事も出来ます。jsonの場合は多言語を想定していますが、エディターで編集できるのは今のところjaのみです。</p>
<p><a href="http://plusb.jp/dqfw/">ナイトリービルド</a>を更新。<br />
<a href="http://plusb.jp/dqfw/samples/rpg_learning.html">RPG 習作</a>(<a href="http://plusb.jp/dqfw/samples/rpg_learning.html?debug=true">debug</a>)<br />
<a href="http://plusb.jp/dqfw/samples/bt_test.html">戦闘テスト</a><br />
<a href="http://plusb.jp/dqfw/samples/message_editor.html">メッセージエディター</a></p>
<p>補足ですが、キャッシュが効いている場合に<code>CTRL+R</code>などでページを再読み込みする必要があります。</p>
]]></content:encoded>
			<wfw:commentRss>http://plusb.jp/blog/?feed=rss2&#038;p=659</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
