Google+

PASTEL ORBIT ゲームプログラマが語る / (旧Team Dyquem!)

本業はPS4やPS3等のゲームプログラマ。もう一つの本業である文筆と、ちょっと経済、SFドはまり体質を語る。Team Dyquemとか言ってるけれどもアプリは一人開発

パステル オービット
.
new

TeamDyquem

Dyquem

検索フォーム

Twitter

全記事表示リンク

最新記事

アクセスランキング

[ジャンルランキング]
コンピュータ
1147位
アクセスランキングを見る>>

[サブジャンルランキング]
プログラミング
208位
アクセスランキングを見る>>

QRコード

QR

Mail

アプリに関するご意見等は、下記メールフォームよりお問い合わせ下さい。
直接のご連絡は、team.dyquem[at]gmail.com にてお受け致します。

Your address:
Message:

スポンサーサイト
-------- --:--

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
rule

シリーズ記事まとめ

Aニュース、ガジェット通信 寄稿記事

『連載.jp』寄稿「ゲームプログラマが語る「プロ棋士に勝ったAIは、タクシー基本無料化をもたらす?」」
『Aニュース/ガジェット通信』寄稿「ゲームプログラマが語る ”買わない理由”がもたらす充足感と、開発者達の心理」」
『Aニュース/ガジェット通信』寄稿「ゲームプログラマが語る アップデート版に潜む開発者モラルハザード」
『Aニュース/ガジェット通信』寄稿「ゲームプログラマが語る ソフトやアプリと携帯ゲーム課金における経済行動学」
『Aニュース/ガジェット通信』寄稿「ゲームプログラマが語る。新しいゲーム機が定期的に生まれる理由」
『Aニュース/ガジェット通信』寄稿「ゲームプログラマが語る 楽しさの仕組み ゲームメカニクス」
『Aニュース/ガジェット通信』寄稿「ゲームプログラマが語る 3Dテレビとゲームの微妙な関係 その打開策」
『Aニュース/ガジェット通信』寄稿「ゲームプログラマが語る 無料アプリのビジネスモデルと舞台裏」
『Aニュース/ガジェット通信』寄稿「新発表ラッシュに見るクラウド大航海時代の幕開け」

■ゲーム制作初心者さん向け系

ゲームプログラマが語る。なんちゃってリードプログラマにはなるな!ゲーム造りで放棄してはいけない大切な事
ゲームプログラマが語る。今さら聞けないフレームレートに纏わる話。秒間60?16ミリ?
ゲームプログラマが語る。「浮動小数点」と商業レベルで上手に付き合う方法
「ゲームプログラマが語る。ゲーム制作初心者の方へ小ネタ「クォータービュー入門」」
「ゲームプログラマが語る。「正しい乱数」が彩る確率世界とエンターテイメント」
「iPhoneアプリ、ゲーム制作初心者の方へ小ネタ「線分と円の交差」」
「iPhoneアプリ作者より、ゲーム制作初心者の方へ小ネタ「2Dベクトル」」
「iPhoneアプリ作者より、ゲーム制作初心者の方へ小ネタを一つ」

「プロのゲームプログラマとして、ゲーム製作に関する書評を」シリーズ

ゲームプログラマが語る書評:「MMORPGゲームサーバープログラミング」を読んでみた
ゲームプログラマが語る書評:「ゲームプログラマになる前に覚えておきたい技術」を読んでみた
ゲームプログラマが語る書評:「ゲームエンジン・アーキテクチャ」を読んでみた

■個人でも出来る、マルチプラットフォーム開発関連

ゲームプログラマが語る。iOSゲームをWinマルチプラットフォーム開発・その4
ゲームプログラマが語る。iOSゲームをWinマルチプラットフォーム開発・その3
iPhoneアプリ作者が語る。マルチプラットフォーム化その2・アトミック型定義のススメ
ゲームプログラマが語る。iOSゲームをWinマルチプラットフォーム開発・その1

■リリースしました系

PASTEL-ORBIT/TeamDyquemアプリ第19弾。ローグライク決定版「隣人は魔王」をリリースしました。
TeamDyquemアプリ第18段。ご当地バトルRTS「埼玉クエスト」をリリースしました。近隣の県を滅ぼそう(*-_-*) 埼玉以外でも遊べます #47app
アプリ新作「ネコりす マカロン」をリリースしました
埼玉県ご当地アプリ、「タッチ the さいたま」をリリースしました #47app
アプリ新作「ひよこガーデン」をリリースしました
TeamDyquem新作。結構真面目なアクションパズル「ネコりす」リリース
iPhoneアプリ作者が、iアプリ「泡リス女子部 for iアプリ」をリリースしました
自作iPhoneアプリ改良版、「ネコがゴミのようだネ:アーケード」をリリースしました
iPhoneアプリ作者が、「まりも育成」for iモードをリリースしました
iPhoneアプリ新作 「ナタ・デ・ネコ」 をリリースしました
秋刀魚は関係ないけれど、新作「i-Wishbone」リリース
アプリ新作「ネコがゴミのようだ」。プロモ動画をアップしてみた
「泡リス 女子部」、販売開始
AppBankにまりも紹介記事が!

ゲームプログラマとして参加。ご当地47都道府県アプリプロジェクト #47app

□ビジネス系

ゲームプログラマが語るドコモiPhoneと、インフラから合法的に大金を抜くスキーム
ゲームプログラマが語る。秀丸エディタのビジネスモデル

■SFネタ系

ゲームプログラマがSFを語る。意識はどこからやってきて、死んで、そして何処へ行く?
ゲームプログラマが語る。気の遠くなるスキもない程の、宇宙の話
iPhoneアプリ作者が語る。流れ星に馳せる真実
iPhoneアプリ作者が警笛。どこでもドアの使い過ぎには注意
iPhoneアプリ作者が語るSETI理論。異星人さんは何処!?


人気ブログランキングへ
comments(-)|trackback(-)|スポンサー広告|--------_--:--|page top

ゲームプログラマが語る。iOSゲームをWinマルチプラットフォーム開発・その4
2011-05-16 13:40



それは幾ら何でも性急に過ぎるのでは無いでしょうかとの苦言に舞う、早くも初夏の装い関東平野。
日差しと気温を気にした服装で外出すれば冷や雨。寒いかと思えば初夏。
そこら辺りを歩くカニも、壁をグーで殴りだすレベルでは御座いますが皆様如何お過ごしでしょうか。
世界で一番エビが嫌い。TeamDyquemで御座います。皆様こんにちは。

最近アレですよ。
かなり久しぶりにスターウォーズをEP1より観なおしているのですけれども、
10年近くも前の映画とは思えない程の美しいCG。色褪せない壮大なストーリー。
世界中を魅了した作品が彩るその世界観に時間を忘れて浸っておりましたが、
フォースがドラえもんのポケット並に万能過ぎて集中出来ません。
あの力のもたらす影響が気になりすぎて、いずれ、
キャベツの値段暴落もフォースの力だと言われる事でしょう。

いや、大好きな作品です。


rule

さて、マルチプラットフォームネタ第4弾で御座いますが、
前回に引き続き、マルチにとどまらない抽象化ネタとしてエントリーを構成してみました。

以前のエントリー
ゲームプログラマが語る。iOSゲームをWinマルチプラットフォーム開発・その1
iPhoneアプリ作者が語る。マルチプラットフォーム化その2・アトミック型定義のススメ
ゲームプログラマが語る。iOSゲームをWinマルチプラットフォーム開発・その3

シリーズエントリーと致しまして、上記も併せてご覧頂けましたら幸いです。


親子関係」についてのよもやま話を一つ。
又それに留まらずエントリー末筆におきましては、
前回の可変長フレームレートネタとの融合への布石として締めくくりました。

なんだか、エントリータイトルがどんどんと本質から乖離している気がしないでもありませんが、
勢い重視という事でご容赦頂けましたらと思います。

さて。


rule
階層親子構造を抽象的に実装する

ゲームに限定された話ではありませんが、種々インスタンス群は場合により
階層的に管理する形がピタっとはまるケースが少なくありません。

ここで言う「階層化」とは所謂親子構造の事であり、
ゲーム寄りの技術として比較的一般的なものの一つに、
キャラクターのボーン構造等が挙げられるでしょう。
背骨や大腿骨、腕や指など、人体骨格構造をデータ化しキャラクターの姿勢を管理する
世界的にごく一般的な手法ですが、階層化を学ぶ上においては大変判りやすい例でありましょう。

例えば首の骨や腕の骨は、背骨の「子供」という位置付けであり、
背骨が移動すれば、首や腕は自動的にそれへ追従されるという親子関係が形成されています。
また、首と腕の関係も重要であり、この二者は背骨の子という関係において共通しており、
つまり「兄弟」として表現する事が可能です。
実際のコード実装においても、「兄弟」として管理する為の幾つかのメソッドに包括されます。


コーディング技術というよりは寧ろ概念的な話ではありますが、
この「階層化」の歴史は非常に古く、また用途も多岐に渡り、
ゲーム設計という観点に限らず、広く大変に重要な技術であります。

OSが管理するスレッドにおいてもこの概念は導入される事が多く、
例えばあるアプリケーション。そうですね、それが仮に家計簿ソフトであるとして、
メインウィンドウへ収支一覧が表示されており、これをメインスレッド。
その子供として金額入力ウィンドウ等が子供のスレッドとして駆動しているケースを仮定。
この場合、メインスレッドが一時停止されれば金額入力ウィンドウ等も停止
破棄されれば一族郎党抹殺よろしく、合理的に関連スレッドが全て破棄されます。
金額入力ウィンドウの更に子供として、「前借り」ボタンや「臨時出費」ボタンなど、
機能的に階層化した個別の要素を追加する事も勿論可能であり、
メインのスレッドにより何らかの事象にて「金額ウィンドウ」だけが一時停止されれば、
その配下にあり、本質的に「金額ウィンドウ」と同様に一時停止してほしい前借りボタン等は
自動的且つ能動的に一時停止されるという仕組みです。


ややお堅い実装の話になっておりますが、この技術はゲームとも非常に相性が良く、
例えば何らかのアクションゲーム等における、そうですね、
ステージの終わりの大きなボスを仮定しましょう。
シューティングゲームでもアクションでも構いません。自由に想像してみて下さい。

ボスは非常に大型で、プレイヤーを倒そうと執拗に攻撃してきます。
攻撃方法は多種多様ですが、彼のもつ攻撃方法の一つは「」を放つ事。
更に「手に持った剣」を振り下ろす強力な一撃を持ち、
もう一つの手に持った盾」をかざし、こちらの攻撃を防ぎます。


ここで、このボスについて親子構造を考えてみましょう。
冒頭のボーン構造における「背骨」にあたる部分。親子関係で言えば長老クラスの第一世代。
ボス本体はこれに当たります。ボス本体がまずは自由に動作できる個体であると考えます。

ボスから放たれる「弾」。
いきなりイレギュラーでありますが、この「弾」は本体と親子関係を持たない存在です。
放たれた瞬間より本体であるボスとの因果関係は消失し、
ここでは「直線的に飛ぶ」という独自の法則にのみ支配される独立した個体です。

次に「剣と盾」。もうお判りですね。
彼等がボス本体の「子供達」と位置づけられ、この二者は兄弟関係にあります。
剣と盾にはお互いを拘束する様な因果関係はなく独立して駆動する事が出来ますが、
同一の親を持っている点で共通しています。つまり兄弟です。
盾が破壊されようとも剣の威力になんら変わりはありませんが、
親であるボス本体が倒されれば一族郎党共倒れるという因果関係が結ばれています。

この様に管理する事のメリットは多大であり、
例えば剣の制御プログラムの中へ「親が動いたら、剣自身の座標を更新する」ですとか
「親が死んだら、剣自身も自分が死ぬプログラムを動作させる」、
例えばこの様なナンセンスなプログラムを書く必要から解放される事を含みます。

このコーディングの何処がナンセンスであるか。
それはつまり合理性という点に集約されるわけでありますが、
プログラムとは常に須く適者担当に妥当なモジュール設計を志すべきであり、
つまり、あるモジュールの仕事はそのモジュールだけが知っていれば良く
「親が死んだら自分はこうする」等の様な画一的その場処理はいずれ、
他者の状態を調べるというコード群の山を築く事になるでしょう。

こういった構造的な挙動は全て、統一した仕組みに組み込んでしまうという方針を立て、
剣のプログラムには剣だけの処理、例えば剣と地面の接触判定等に特化させる形がスマートであり、
剣自身の制御が不要になるタイミングを判定するのは、剣自身ではなく、
それが身を委ねているもう一つ大きな仕組み、つまり「親子関係システム」に黙って一任する
そういった形が合理的でありましょう。


rule
実装

さて、タイトルの通り本エントリーもマルチプラットフォームを元来視野においており、
その実装方法が大変重要になってまいります。

こういった概念的な仕組みというものは須く抽象的に実装するべきであり、
機種や環境に依存させない事が大切です。
本エントリーにて取り上げた「親子関係」。
実装方法はそれこそ多種多様な解釈があるかと思いますが、
ここでは、TeamDyquem的運用に沿った、実際に自分が使っているコード抜粋を紹介致します。



template< class T >
class THierarchy
{

public:

/// Initialize.
void Initialize()
{
mpParent = NULL;
mpSibling = NULL;
mpChild = NULL;
}

public:

/// 子供を追加
void AddChild( T* apParent, T* apTarget )
{
gAssert( apParent );
gAssert( apTarget );
gAssert( apTarget->mpParent == NULL );
gAssert( apTarget != apParent );
if( mpChild )
{
T** p = &mpChild->mpSibling;
if( *p )
{
// [p] を末端の兄弟へのポインタ迄進める
while( ( *p )->mpSibling )
{
p = &( ( *p )->mpSibling );
}
( *p )->mpSibling = apTarget;
}
else
{
*p = apTarget;
}
}else{
mpChild = apTarget;
}
apTarget->mpParent = apParent;
}

/// あるオブジェクトを一族から取り除く
void DetachFromParent( T* apSelf )
{
gAssert( apSelf, "apSelf is null" );
// 親が居る場合
if( mpParent )
{
// その親の直子が自分の場合
if( mpParent->mpChild == apSelf )
{
if( !mpSibling )
{
// 自分に兄弟が居なければ、その親の子は居なくなる
mpParent->mpChild = NULL;
}
else
{
// 自分に兄弟が居れば、その親の直子はその兄弟になる
mpParent->mpChild = mpSibling;
}
}
else
{
// 自分は、その親の直子の兄弟の場合
T** p;
{// 自分の一つ上の兄弟を探す
p = &mpParent->mpChild;
while( ( *p )->mpSibling != apSelf )
{
p = &( ( *p )->mpSibling );
}
}
// その兄弟の1つ下の兄弟を、自分の1つ下の兄弟にする
// ( 自分が末っ子だったなら、その兄弟が末っ子になる )
( *p )->mpSibling = mpSibling;
}
}
mpSibling = NULL;
mpParent = NULL;
}

/// 必須インターフェイス
public:

/// 子供を追加 (純粋仮想関数)
virtual void AddChild( T* apTarget ) = 0;

/// あるオブジェクトを一族から取り除く (純粋仮想関数)
virtual void DetachFromParent() = 0;

/// あるオブジェクト「のみ」を一族から取り除く (純粋仮想関数)
virtual void DetachSelf() = 0;

/// アクセサ
public:

/// Kinship ties.
T* pParent() const
{
return mpParent;
}

/// Kinship ties.
T* pSibling() const
{
return mpSibling;
}

/// Kinship ties.
T* pChild() const
{
return mpChild;
}
};

/// 階層構造化するクラスの定義は、こんなカンジで
class CTest :
public THierarchy< CTest >
{
public:
// 純粋仮想メソッドのオーバーライド
virtual void AddChild( CTest* apTarget ){ THierarchy< CTest >::AddChild( this, apTarget ); }
virtual void DetachFromParent(){ THierarchy< CTest >::DetachFromParent( this ); }
virtual void DetachSelf(){ THierarchy< CTest >::DetachSelf( this ); }
private:
char* mpSample;
};

/// 使用例
void Test( CTest* t )
{

// 兄弟が居れば呼ぶ
if( t->pSibling() ){
Test( t->pSibling() );
}

// 子供が居れば呼ぶ
if( t->pChild() ){
Test( t->pChild() );
}

}



全てを掲載するには長いコードでありましたので抜粋と致しましたが、
付加機能等は各自ご想像頂けたらと思います。


rule
さらなる発展。可変長フレームレートと親子関係の融合

以前のエントリー
→「ゲームプログラマが語る。iOSゲームをWinマルチプラットフォーム開発・その3

にてご紹介させて頂きました、可変長フレームレートによるアプリ時間進行管理。
この技術、及び本稿における親子階層。

この二者の融合は、更なる多大なメリットをもたらします。
次回は、この辺りのお話について触れてみたいと思います。



なんだか、エントリーがどんどんと長くなっている気がしなくもありません。
もう少し完結に書ければ良いのですけれど。。
これからも勢い重視にはなるやもしれませんが、お付き合い頂けましたら幸いで御座います。

堅っ!




関連記事
rule

シリーズ記事まとめ

Aニュース、ガジェット通信 寄稿記事

『連載.jp』寄稿「ゲームプログラマが語る「プロ棋士に勝ったAIは、タクシー基本無料化をもたらす?」」
『Aニュース/ガジェット通信』寄稿「ゲームプログラマが語る ”買わない理由”がもたらす充足感と、開発者達の心理」」
『Aニュース/ガジェット通信』寄稿「ゲームプログラマが語る アップデート版に潜む開発者モラルハザード」
『Aニュース/ガジェット通信』寄稿「ゲームプログラマが語る ソフトやアプリと携帯ゲーム課金における経済行動学」
『Aニュース/ガジェット通信』寄稿「ゲームプログラマが語る。新しいゲーム機が定期的に生まれる理由」
『Aニュース/ガジェット通信』寄稿「ゲームプログラマが語る 楽しさの仕組み ゲームメカニクス」
『Aニュース/ガジェット通信』寄稿「ゲームプログラマが語る 3Dテレビとゲームの微妙な関係 その打開策」
『Aニュース/ガジェット通信』寄稿「ゲームプログラマが語る 無料アプリのビジネスモデルと舞台裏」
『Aニュース/ガジェット通信』寄稿「新発表ラッシュに見るクラウド大航海時代の幕開け」

■ゲーム制作初心者さん向け系

ゲームプログラマが語る。なんちゃってリードプログラマにはなるな!ゲーム造りで放棄してはいけない大切な事
ゲームプログラマが語る。今さら聞けないフレームレートに纏わる話。秒間60?16ミリ?
ゲームプログラマが語る。「浮動小数点」と商業レベルで上手に付き合う方法
「ゲームプログラマが語る。ゲーム制作初心者の方へ小ネタ「クォータービュー入門」」
「ゲームプログラマが語る。「正しい乱数」が彩る確率世界とエンターテイメント」
「iPhoneアプリ、ゲーム制作初心者の方へ小ネタ「線分と円の交差」」
「iPhoneアプリ作者より、ゲーム制作初心者の方へ小ネタ「2Dベクトル」」
「iPhoneアプリ作者より、ゲーム制作初心者の方へ小ネタを一つ」

「プロのゲームプログラマとして、ゲーム製作に関する書評を」シリーズ

ゲームプログラマが語る書評:「MMORPGゲームサーバープログラミング」を読んでみた
ゲームプログラマが語る書評:「ゲームプログラマになる前に覚えておきたい技術」を読んでみた
ゲームプログラマが語る書評:「ゲームエンジン・アーキテクチャ」を読んでみた

■個人でも出来る、マルチプラットフォーム開発関連

ゲームプログラマが語る。iOSゲームをWinマルチプラットフォーム開発・その4
ゲームプログラマが語る。iOSゲームをWinマルチプラットフォーム開発・その3
iPhoneアプリ作者が語る。マルチプラットフォーム化その2・アトミック型定義のススメ
ゲームプログラマが語る。iOSゲームをWinマルチプラットフォーム開発・その1

■リリースしました系

PASTEL-ORBIT/TeamDyquemアプリ第19弾。ローグライク決定版「隣人は魔王」をリリースしました。
TeamDyquemアプリ第18段。ご当地バトルRTS「埼玉クエスト」をリリースしました。近隣の県を滅ぼそう(*-_-*) 埼玉以外でも遊べます #47app
アプリ新作「ネコりす マカロン」をリリースしました
埼玉県ご当地アプリ、「タッチ the さいたま」をリリースしました #47app
アプリ新作「ひよこガーデン」をリリースしました
TeamDyquem新作。結構真面目なアクションパズル「ネコりす」リリース
iPhoneアプリ作者が、iアプリ「泡リス女子部 for iアプリ」をリリースしました
自作iPhoneアプリ改良版、「ネコがゴミのようだネ:アーケード」をリリースしました
iPhoneアプリ作者が、「まりも育成」for iモードをリリースしました
iPhoneアプリ新作 「ナタ・デ・ネコ」 をリリースしました
秋刀魚は関係ないけれど、新作「i-Wishbone」リリース
アプリ新作「ネコがゴミのようだ」。プロモ動画をアップしてみた
「泡リス 女子部」、販売開始
AppBankにまりも紹介記事が!

ゲームプログラマとして参加。ご当地47都道府県アプリプロジェクト #47app

□ビジネス系

ゲームプログラマが語るドコモiPhoneと、インフラから合法的に大金を抜くスキーム
ゲームプログラマが語る。秀丸エディタのビジネスモデル

■SFネタ系

ゲームプログラマがSFを語る。意識はどこからやってきて、死んで、そして何処へ行く?
ゲームプログラマが語る。気の遠くなるスキもない程の、宇宙の話
iPhoneアプリ作者が語る。流れ星に馳せる真実
iPhoneアプリ作者が警笛。どこでもドアの使い過ぎには注意
iPhoneアプリ作者が語るSETI理論。異星人さんは何処!?


人気ブログランキングへ

Theme:プログラミング
Genre:コンピュータ

comments(0)|trackback(0)|プロが語るゲーム開発|2011-05-16_13:40|page top

トラックバック


この記事にトラックバックする(FC2ブログユーザー)

コメントの投稿

非公開コメント

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。