<?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; DisplayObjectContainer</title>
	<atom:link href="http://www.game-create.com/archives/tag/displayobjectcontainer/feed" rel="self" type="application/rss+xml" />
	<link>http://www.game-create.com</link>
	<description>文系の人でも、数理学がわからない人でもゲームプログラミングをマスターできるブログ</description>
	<lastBuildDate>Tue, 08 Jun 2010 01:28:47 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>ja</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>継承ツリーが長くならないようなアプローチが必要かも</title>
		<link>http://www.game-create.com/archives/1995</link>
		<comments>http://www.game-create.com/archives/1995#comments</comments>
		<pubDate>Thu, 23 Jul 2009 16:15:01 +0000</pubDate>
		<dc:creator>Byerkut</dc:creator>
				<category><![CDATA[オリジナルゲーム制作]]></category>
		<category><![CDATA[ActionScript]]></category>
		<category><![CDATA[DisplayObjectContainer]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[MovieClip]]></category>
		<category><![CDATA[クラス]]></category>
		<category><![CDATA[継承]]></category>

		<guid isPermaLink="false">http://www.game-create.com/?p=1995</guid>
		<description><![CDATA[Flash アニメーションが作りやすくて、なんとかこの作りやすさを C++ でもと参考にしてゲームを作っているのですが、やはり継承ツリーの長さが気になります。

ゲームの基本的な要素である Sprite と Flash  [...]]]></description>
			<content:encoded><![CDATA[<p>Flash アニメーションが作りやすくて、なんとかこの作りやすさを C++ でもと参考にしてゲームを作っているのですが、やはり継承ツリーの長さが気になります。</p>
<p><span id="more-1995"></span></p>
<p>ゲームの基本的な要素である Sprite と Flash の基礎的な要素である MovieClip までの継承ツリーを見てみると次のようになります。</p>
<table class="style-1">
<caption>MovieClip の継承関係（上が基底クラス）</caption>
<tr>
<th>Object</th>
<td>全てのオブジェクトの祖。</td>
</tr>
<tr>
<th>EventDispatcher</th>
<td>イベントを受け取ったり、送出したり、ラジバンダリできるようになる。</td>
</tr>
<tr>
<th>DisplayObject</th>
<td>Flash ムービーとして表示するのに必要な情報が管理できるようになる（大きさとか座標とか回転度とか不透明度とか）。</td>
</tr>
<tr>
<th>InteractiveObject</th>
<td>マウスやキーボードに反応できるようになる。</td>
</tr>
<tr>
<th>DisplayObjectContainer</th>
<td>DisplayObject をツリー状に内包できるようになる。知らなかったけどゲームを作るのに便利なパターンらしい。</td>
</tr>
<tr>
<th>Sprite</th>
<td>実際に Flash ムービーの画面に表示できるようになる（これより前の表示関連のクラスは抽象クラス）。</td>
</tr>
<tr>
<th>MovieClip</th>
<td>タイムラインを持った Sprite 。これなくして Flash はないが、 Flash なくしてこれはない、というのは言い過ぎ。</td>
</tr>
</table>
<p>長いです。そして、表現する物によっては要らない機能もあります。たとえばダッシュして巻き上げた砂のエフェクトなんかがイベントを送出したり受け取ったりできる必要はありません。ゲームによってはひとつひとつの表示オブジェクトが入力を受け付ける機能が不要になることも多いかと思います。</p>
<p>インタフェースによる代表的な実装を持つオブジェクトへの委譲などで、ひとつひとつのオブジェクトを軽量化できないか検討が必要のようです。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.game-create.com/archives/1995/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>親の特性を引き継ぎたくない場合はエラーにするしかないのか？</title>
		<link>http://www.game-create.com/archives/1430</link>
		<comments>http://www.game-create.com/archives/1430#comments</comments>
		<pubDate>Thu, 19 Mar 2009 10:55:18 +0000</pubDate>
		<dc:creator>Byerkut</dc:creator>
				<category><![CDATA[オーサリングツール]]></category>
		<category><![CDATA[ActionScript]]></category>
		<category><![CDATA[DisplayObjectContainer]]></category>
		<category><![CDATA[Loader]]></category>
		<category><![CDATA[オブジェクト指向]]></category>
		<category><![CDATA[クラス]]></category>
		<category><![CDATA[継承]]></category>

		<guid isPermaLink="false">http://www.game-create.com/?p=1430</guid>
		<description><![CDATA[オブジェクト指向は難しいです。

クラスを継承して特化する流れの中で、親の持っていた特性が用途にマッチしなくなることがあるのですが、この機能を封印するためにはエラーを起こすしかないのでしょうか。
たとえば ActionS [...]]]></description>
			<content:encoded><![CDATA[<p>オブジェクト指向は難しいです。</p>
<p><span id="more-1430"></span></p>
<p>クラスを継承して特化する流れの中で、親の持っていた特性が用途にマッチしなくなることがあるのですが、この機能を封印するためにはエラーを起こすしかないのでしょうか。</p>
<p>たとえば ActionScript の Loader なんかが良い例です。 Loader は DisplayObjectContainer を継承しているので表示ツリーを構成できるはずなのですが、これをやると例外が飛びます（ Loader の中にはひとつだけ表示オブジェクトを内包できればいいので追加や削除ができる必要はないということ）。こういう対処がベターなのか、それとも設計に問題があるのか疑問に思います。</p>
<p>私のようにスキル不足の人間でも恩恵を受けられる、「軟弱オブジェクト指向」とかあるとありがたいと思います。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.game-create.com/archives/1430/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>ActionScript4.1 にはコレクションが増えているらしいですよ</title>
		<link>http://www.game-create.com/archives/1376</link>
		<comments>http://www.game-create.com/archives/1376#comments</comments>
		<pubDate>Sun, 01 Mar 2009 09:07:58 +0000</pubDate>
		<dc:creator>Byerkut</dc:creator>
				<category><![CDATA[オーサリングツール]]></category>
		<category><![CDATA[ActionScript]]></category>
		<category><![CDATA[C++]]></category>
		<category><![CDATA[DisplayObjectContainer]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[STL]]></category>
		<category><![CDATA[コレクション]]></category>

		<guid isPermaLink="false">http://www.game-create.com/?p=1376</guid>
		<description><![CDATA[コレクションというのは配列や可変長配列、リストやハッシュやマップやスタックといったデータを保存するデータ構造のことです。クラスで実装されています。…と、まぁ、 Java や C# をお使いの方にはおなじみのものです。 C [...]]]></description>
			<content:encoded><![CDATA[<p>コレクションというのは配列や可変長配列、リストやハッシュやマップやスタックといったデータを保存するデータ構造のことです。クラスで実装されています。…と、まぁ、 Java や C# をお使いの方にはおなじみのものです。 C++ では STL がそれに近いです。</p>
<p><span id="more-1376"></span></p>
<p>ActionScript もクラスのインスタンスを参照で持つタイプの言語ですので、ゲームなんかを作る場合、オブジェクトを自分が扱いやすいコレクションに入れておくと便利です。 DisplayObjectContainer だけに入れてしまうと、名前かインデックス（添え字）かオブジェクトの参照値でしかアクセスできなくなりますのでかなり不便です。</p>
<p>ただ、 ActionScript はバージョンが上がるたびにプログラマには優しくなりますが、デザイナーの方には意地悪になるような気がします。これでいいのでしょうか。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.game-create.com/archives/1376/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>DisplayObjectContainer が持っている子 DisplayObject を取得するメソッドのいろいろ</title>
		<link>http://www.game-create.com/archives/419</link>
		<comments>http://www.game-create.com/archives/419#comments</comments>
		<pubDate>Wed, 09 Jul 2008 12:06:35 +0000</pubDate>
		<dc:creator>Byerkut</dc:creator>
				<category><![CDATA[オーサリングツール]]></category>
		<category><![CDATA[ActionScript]]></category>
		<category><![CDATA[DisplayObject]]></category>
		<category><![CDATA[DisplayObjectContainer]]></category>
		<category><![CDATA[Flash]]></category>

		<guid isPermaLink="false">http://www.game-create.com/?p=419</guid>
		<description><![CDATA[DisplayObjectContainer が持っている子 DisplayObject を取得するためのメソッドには DisplayObjectContainer::getChildAt() メソッドと Display [...]]]></description>
			<content:encoded><![CDATA[<p>DisplayObjectContainer が持っている子 DisplayObject を取得するためのメソッドには DisplayObjectContainer::getChildAt() メソッドと DisplayObjectContainer::getChildByName() があります。</p>
<p><span id="more-419"></span></p>
<p>DisplayObjectContainer::getChildAt() メソッドはコンテナのインデックス（番号）から子供を検索して返すのに対して、 DisplayObjectContainer::getChildByName() メソッドはコンテナに格納されている DisplayObject の名前から子供を検索して返します。</p>
<p>また、もし DisplayObject への参照が手元にあるようであれば DisplayObjectContainer::getChildIndex() メソッドを使うことで、格納されたコンテナ内のインデックス（番号）を取得することができます。格納場所へのインデックス（番号）を把握しておくと後々便利です。</p>
<p>ただ、私の予感なんですけど、おそらくオブジェクトの一覧は別のコンテナに保存しておいた方が良いと思います（ Array クラスとかで良いです）。…というのも DisplayObjectContainer クラスはコンテナとしては提供されているメソッドが少なすぎますし、削除するのに結局参照が必要になるためです。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.game-create.com/archives/419/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Flash 版スパロボに光明が！</title>
		<link>http://www.game-create.com/archives/255</link>
		<comments>http://www.game-create.com/archives/255#comments</comments>
		<pubDate>Wed, 13 Feb 2008 14:52:12 +0000</pubDate>
		<dc:creator>Byerkut</dc:creator>
				<category><![CDATA[オーサリングツール]]></category>
		<category><![CDATA[DisplayObjectContainer]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[スパロボ]]></category>

		<guid isPermaLink="false">http://www.game-create.com/?p=255</guid>
		<description><![CDATA[先日 Loader の DisplayObjectContainer クラス関連メソッドがオーバーライドされていて、オーバーレイプログラミングみたいなことができないとお伝えしましたが、なんとかなりそうです。

なんと L [...]]]></description>
			<content:encoded><![CDATA[<p>先日 Loader の DisplayObjectContainer クラス関連メソッドがオーバーライドされていて、オーバーレイプログラミングみたいなことができないとお伝えしましたが、なんとかなりそうです。</p>
<p><span id="more-255"></span></p>
<p>なんと Loader に content というプロパティがあって、読み込んだ swf への参照を持っていると言うことがわかりました。こいつにアクセスすれば DisplayObjectContainer クラス関連メソッドをアクセスできること請け合いです。</p>
<p>本当は試してから記事を書きたかったのですが、仕事に追われて無理でした。ごめんなさい。でも Loader::content に swf の参照が入るところまでは確認しました。セキュリティドメインが一致していれば変数も参照できましたしメソッドもコールできました。</p>
<p>かなりドキムネです。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.game-create.com/archives/255/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>外部の SWF ファイルを読み込む</title>
		<link>http://www.game-create.com/archives/239</link>
		<comments>http://www.game-create.com/archives/239#comments</comments>
		<pubDate>Tue, 29 Jan 2008 13:38:05 +0000</pubDate>
		<dc:creator>Byerkut</dc:creator>
				<category><![CDATA[オーサリングツール]]></category>
		<category><![CDATA[ActionScript]]></category>
		<category><![CDATA[DisplayObjectContainer]]></category>
		<category><![CDATA[Flash]]></category>

		<guid isPermaLink="false">http://www.game-create.com/?p=239</guid>
		<description><![CDATA[外部の SWF ファイルを読み込むためには次の手順を踏みます。


ファイルの url から、新規 URLRequest オブジェクトを作成します。
新規 Loader オブジェクトを作成します。
URLRequest  [...]]]></description>
			<content:encoded><![CDATA[<p>外部の SWF ファイルを読み込むためには次の手順を踏みます。</p>
<p><span id="more-239"></span></p>
<ul>
<li>ファイルの url から、新規 URLRequest オブジェクトを作成します。</li>
<li>新規 Loader オブジェクトを作成します。</li>
<li>URLRequest インスタンスをパラメータとして渡し、Loader::load() メソッドを呼び出します。</li>
<li>DisplayObjectContainer オブジェクト内で DisplayObjectContainer::addChild() メソッドを呼び出します。</li>
</ul>
<p>コードにするとこんな感じです。</p>
<div class="hl-surround" ><div class="hl-main"><pre><span class="hl-reserved">var </span><span class="hl-identifier">request</span><span class="hl-default">:</span><span class="hl-identifier">URLRequest</span><span class="hl-default"> = </span><span class="hl-reserved">new </span><span class="hl-identifier">URLRequest</span><span class="hl-brackets">(</span><span class="hl-quotes">&quot;</span><span class="hl-string">http://www.[yourdomain].com/externalSwf.swf</span><span class="hl-quotes">&quot;</span><span class="hl-brackets">)</span><span class="hl-default">;
</span><span class="hl-reserved">var </span><span class="hl-identifier">loader</span><span class="hl-default">:</span><span class="hl-identifier">Loader</span><span class="hl-default"> = </span><span class="hl-reserved">new </span><span class="hl-identifier">Loader</span><span class="hl-brackets">()
</span><span class="hl-identifier">loader</span><span class="hl-default">.</span><span class="hl-identifier">load</span><span class="hl-brackets">(</span><span class="hl-identifier">request</span><span class="hl-brackets">)</span><span class="hl-default">;
</span><span class="hl-reserved">this</span><span class="hl-default">.</span><span class="hl-identifier">addChild</span><span class="hl-brackets">(</span><span class="hl-identifier">loader</span><span class="hl-brackets">)</span><span class="hl-default">;</span></pre></div></div>
<p>こちらも非常に簡単になりました。</p>
<p>使いどころがわからないかもしれませんが、スパロボを Flash で作ろうとしたときに戦闘デモの読み込みに使えるかなと思っています。ゆくゆくは誰でも戦闘デモを作れるようにしてみたいです。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.game-create.com/archives/239/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>ライブラリにあるムービークリップシンボルを ActionScript から生成する</title>
		<link>http://www.game-create.com/archives/234</link>
		<comments>http://www.game-create.com/archives/234#comments</comments>
		<pubDate>Thu, 24 Jan 2008 15:54:20 +0000</pubDate>
		<dc:creator>Byerkut</dc:creator>
				<category><![CDATA[オーサリングツール]]></category>
		<category><![CDATA[ActionScript]]></category>
		<category><![CDATA[DisplayObjectContainer]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[MovieClip]]></category>

		<guid isPermaLink="false">http://www.game-create.com/?p=234</guid>
		<description><![CDATA[ライブラリにあるムービークリップシンボルを ActionScript から生成するためには次の手順を踏みます。


ライブラリから対象のシンボルを選び、コンテキストメニューの「リンケージ」を選択する
「 ActionSc [...]]]></description>
			<content:encoded><![CDATA[<p>ライブラリにあるムービークリップシンボルを ActionScript から生成するためには次の手順を踏みます。</p>
<p><span id="more-234"></span></p>
<ol>
<li>ライブラリから対象のシンボルを選び、コンテキストメニューの「リンケージ」を選択する</li>
<li>「 ActionScript に書き出し」にチェックを入れる</li>
<li>「最初のフレームに書き出し」にチェックを入れる</li>
<li>インスタンスを作る</li>
<li>生成したいムービークリップ中で DisplayObjectContainer::addChild() メソッドを呼び出す（引数にインスタンスを渡す）</li>
</ol>
<p>４と５の具体的なコードはこんな感じです。</p>
<div class="hl-surround" ><div class="hl-main"><pre><span class="hl-reserved">var </span><span class="hl-identifier">obj</span><span class="hl-default">:</span><span class="hl-identifier">SampleMC</span><span class="hl-default"> = </span><span class="hl-reserved">new </span><span class="hl-identifier">SampleMC</span><span class="hl-brackets">()</span><span class="hl-default">;
</span><span class="hl-identifier">obj</span><span class="hl-default">.</span><span class="hl-identifier">x</span><span class="hl-default"> = </span><span class="hl-number">100</span><span class="hl-default">;
</span><span class="hl-identifier">obj</span><span class="hl-default">.</span><span class="hl-identifier">y</span><span class="hl-default"> = </span><span class="hl-number">100</span><span class="hl-default">;
</span><span class="hl-reserved">this</span><span class="hl-default">.</span><span class="hl-identifier">addChild</span><span class="hl-brackets">(</span><span class="hl-identifier">obj</span><span class="hl-brackets">)</span><span class="hl-default">;</span></pre></div></div>
<p>この方法ですと、ちと警告が出てしまうのですが、とりあえず MovieClip がこんなに簡単に生成できるようになったよ！という情報でした。昔の苦労が嘘のようですね。</p>
<p>2008/01/27 追記：<a href="http://www.game-create.com/archives/237">警告を消す方法</a>をアップしました。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.game-create.com/archives/234/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

