<?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/?feed=rss2&#038;tag=dq" 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-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 ライブラリの設計ポリシー &#8211; DQ.Control</title>
		<link>http://plusb.jp/blog/?p=325</link>
		<comments>http://plusb.jp/blog/?p=325#comments</comments>
		<pubDate>Fri, 12 Mar 2010 02:48:30 +0000</pubDate>
		<dc:creator>M. K.</dc:creator>
				<category><![CDATA[dq]]></category>
		<category><![CDATA[JavaScript]]></category>

		<guid isPermaLink="false">http://plusb.jp/blog/?p=325</guid>
		<description><![CDATA[dqライブラリについて少しずつまとめておきます。 まずはコントロールについてですｌ。 基本方針 コントロール(DQ.Control)はGUI(DOM)を持つオブジェクトを指します。設計するに当たって.Net Framew &#8230; <a href="http://plusb.jp/blog/?p=325">続きを読む <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>dqライブラリについて少しずつまとめておきます。<br />
まずはコントロールについてですｌ。<br />
<span id="more-325"></span></p>
<h3>基本方針</h3>
<p>コントロール(DQ.Control)はGUI(DOM)を持つオブジェクトを指します。設計するに当たって.Net Framework を強く意識しています。<br />
ですので属性名称は.Net Frameworkのそれを踏襲しています。<br />
ただし、色やマージンなど見栄えを指定するプロパティやメソッドは用意せず、直接CSSやStyleで指定することにします。<br />
<span style="color: #ff6600;">※.Net Frameworkでは、GUIを持たないComponentも存在しますが、当該ライブラリーでは提供しません。</span></p>
<h3>objとclient</h3>
<p>DQ.Controlは要素(jQueryでラップしたもの)を内包しており、<code>obj</code>と<code>client</code>があります。<br />
<code>obj</code>は最も外側のDOMを指し、<code>client</code>は子Controlが追加される要素を指します。<br />
最もシンプルなコントロールの場合、<code>obj</code>と<code>client</code>は同じ要素を指します。</p>
<div id="attachment_408" class="wp-caption alignnone" style="width: 310px"><a href="http://plusb.jp/blog/wp-content/uploads/2010/03/obj.png"><img class="size-full wp-image-408" title="シンプルなControl" src="http://plusb.jp/blog/wp-content/uploads/2010/03/obj.png" alt="Control.obj" width="300" height="225" /></a><p class="wp-caption-text">シンプルなControl</p></div>
<p>Windowフォームの様にヘッダーとフッターを持つ場合はobjが最も外側の要素を指し、clientは子要素を指します。</p>
<div id="attachment_409" class="wp-caption alignnone" style="width: 310px"><a href="http://plusb.jp/blog/wp-content/uploads/2010/03/client.png"><img class="size-full wp-image-409" title="obj と client" src="http://plusb.jp/blog/wp-content/uploads/2010/03/client.png" alt="" width="300" height="250" /></a><p class="wp-caption-text">hederとfotterを持つControl</p></div>
<h3>作成と廃棄</h3>
<p>DQ.Controlはオブジェクトですのでnew で生成します。引数には親コントロールと要素を指定します。<br />
ページ全体を示すDQ.Pageコントロールが存在し、最上位のコントロールを作成する場合は親として<br />
<code>DQ.page()</code>を指定します。</p>
<p>コントロールに対応する要素の指定は以下の３通りの指定方法があります。</p>
<ol>
<li>IDを指定する</li>
<li>jQueryオブジェクトを指定する</li>
<li>省略する</li>
</ol>
<p>大別するとID指定かそれ以外となります。IDを指定した場合、html上の構造を維持したままControlを作成しますが、<br />
それ以外の場合は親Controlへ追加された時点で、親Control.clientオブジェクトの最後尾へ追加されます。</p>
<pre>var ctrl = new DQ.Control(DQ.page(),
           $('&lt;div style="position: absolute;"&gt;'));
ctrl.show();
ctrl.location(64, 64);
ctrl.text('Hellow, World!');
ctrl.size('10em', '2em');</pre>
<p>作成したコントロールを廃棄する場合は、<code>dispose()</code>メソッドを呼び出します。</p>
<pre>ctrl.dispose();</pre>
<h3>Controlの追加</h3>
<p>Control内へControlを追加する場合はコンストラクターで親Controlを指定します。</p>
<pre>var ctrl = new DQ.Control(DQ.page(),
                       $('&lt;div style="position: absolute;"/&gt;'));
...
var child = new DQ.Control(ctrl, $('&lt;div style="position: relative;" /&gt;'));
child.size('5em', '4em');</pre>
<h3>外観と振る舞いの分離</h3>
<p>先にも説明したようにコントロールの作成時に要素のIDを指定した場合、htmlで記述されている構造を保持したままControlを作成します。<br />
これもVisual Studioでの開発でGUIのレイアウトの編集とアプリケーションの振る舞いの実装を分離して作業することを想定しているためです。<br />
DQ.Controlから派生したFormコントロールとPanelコントロールを使用して例示します。<br />
この例ではclassでコントロールの種類を指定し、idは各コントロールのidとしてそのまま使用されます。</p>
<pre>&lt;div <span style="color: #0000ff;">class</span>="dq-form" <span style="color: #0000ff;">id</span>="form1"
     style="width: 300px; height: 240px;"&gt;
  &lt;div <span style="color: #0000ff;">class</span>="dq-panel" <span style="color: #0000ff;">id</span>="panel1"&gt;
  foo bar
  &lt;/div&gt;
&lt;/div&gt;
&lt;script type="text/javascript"&gt;
  var f1 = new DQ.UI.Form(DQ.page(), {
     <span style="color: #ff6600;">parseHtml</span>: <span style="color: #0000ff;">true </span><span style="color: #0000ff;"><span style="color: #ff0000;">//DOMツリーからControlを自動生成します。</span>
</span>  }, 'form1' );
  f1.<span style="color: #0000ff;">panel1</span>.dockStyle(DQ.UI.DockStyle.dockable); 
                      <span style="color: #ff0000;">//子Controlは親Controlの属性として追加されます。
</span>  f1.show();
&lt;/script&gt;</pre>
]]></content:encoded>
			<wfw:commentRss>http://plusb.jp/blog/?feed=rss2&#038;p=325</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>JavaScriptでメッセージのスクロール表示</title>
		<link>http://plusb.jp/blog/?p=150</link>
		<comments>http://plusb.jp/blog/?p=150#comments</comments>
		<pubDate>Wed, 10 Feb 2010 19:07:27 +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=150</guid>
		<description><![CDATA[ゲームのテキスト表示でよくあるスクロールするメッセージ表示を実現したい。 色々方法はあると思いますが、一文字づつDOMに追加していくか、テキストをsubstringで一文字ずつ長くしていきながら書き換えるかです。 以下に &#8230; <a href="http://plusb.jp/blog/?p=150">続きを読む <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>ゲームのテキスト表示でよくあるスクロールするメッセージ表示を実現したい。<br />
色々方法はあると思いますが、一文字づつDOMに追加していくか、テキストをsubstringで一文字ずつ長くしていきながら書き換えるかです。<br />
<span id="more-150"></span><br />
<span style="font-size: 80%">以下に記述するコードは<a href="http://jquery.com"/>jQuery</a>が必要です。</span></p>
<pre>
&lt;div id="box" /&gt;
&lt;script type="text/javascript"&gt;
var text ="漢字alpha0123456789;"
function show(length) {
  if (pos &gt;= text.length) {
    return;
  }

  $('#box').text(text.substring(0, length);
  setTimeout( function() { show(length + 1); }, 15.625 );
}

show(1);
&lt;/script&gt;
</pre>
<pre>
&lt;div id="box" /&gt;
&lt;script type="text/javascript"&gt;
var text ="漢字alpha0123456789;"
function show(pos) {
  if (pos &gt;= text.length) {
    return;
  }

  $('#box').append(text.charAt(pos));
  setTimeout( function() { show(length + 1); }, 15.625 );
}

show(0);
&lt;/script&gt;
</pre>
<p>軽くノーウェイトでベンチマークしてみましたが、それほどの差は無かったです。<br />
次によくあるメッセージのスクロール表示のキャンセル機能を考えてみます。<br />
まあ、これは単純にクリックなりキー押下なりでキャンセルフラグを設定すれば良いでしょう。</p>
<pre>
var text ="漢字alpha0123456789;"
var cancel = false;
function show(length) {
  if (pos &gt;= text.length) {
    return;
  }
  if(cancel) {
    $('#box').text(text); //全部表示して終了
  } else {
    $('#box').text(text.substring(0, length);
    setTimeout( function() { show(length + 1); }, 15.625 );
  }
}
$('#box').click(function() { cancel = true; });
show(1);
</pre>
<p>会話や文章の切れ目を意識してユーザーからのクリックを待機する方法について考えてみます。<br />
ここは難しいことを考えずに、一度にスクロール表示するテキストを一つの文字列として全体を配列で保持することにします。<br />
そして、ひとつのテキストのスクロール表示が終わるとユーザーからのアクション（クリック）があるまで待ち、アクションがあると次のテキストを再びスクロール表示します。</p>
<pre>
var data = ["first","second", "third"];

MessageBox = function(data) {
 this.content = $('#box');
 this.data = Array.apply(null, data); //配列のクローンを渡す。
 this.next();
 $('body').bind("click", this, this.click);
}
MessageBox.prototype = {
 sliding: false,
 clear: function() {
     this.content.text('');
 },
 next: function() {
     this.clear();
     this.text = thi.data.shift();
     slideText(1);
     var me = this;
     function slideText(length) {
          var text = me.text;
          if (me.cancel) {
              return;
          }
          if (length &lt; text.length) {
              me.sliding = true;
              me.content.text(text.substring(0, len));
              setTimeout(function () { slideText(length + 1); }, 15.625);
          } else {
              me.sliding = false;
          }
     }
 },
 click: function(e) {
   var me = e.data;
   if (me.sliding) {
      me.cancel = true; //キャンセルして現在のテキストを一括表示する。
      return false;
   }
   //次のテキストがあれば、スクロール表示する。
   if (me.data.length == 0) {
      $('body').unbind("click", me.click);
      me.clear();
    } else {
      me.next.apply(me);
    }
　  return false; 
 } 
}
</pre>
<p>このままでは前回表示したテキストが消えてしまいます。RPGでは、テキストを縦に流して行きたいかもしれません。<br />
また、会話の途中で選択肢を求めることもありますが、そこらへんについては割愛します。<br />
とりあえず一連の表示やコマンドに対応したコントロールの<a href="/dq/catalog/messagebox_rpg.html">デモ</a>を用意しておきました。</p>
]]></content:encoded>
			<wfw:commentRss>http://plusb.jp/blog/?feed=rss2&#038;p=150</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
