ゲームライブラリ作成記1

アバター
lriki
記事: 88
登録日時: 14年前

ゲームライブラリ作成記1

投稿記事 by lriki » 14年前

まずはこのライブラリは何たるかを整理してみようと思います。
企画書の推敲みたいな感じで。


まずはコンセプト。なにゆえこのライブラリを作るのか。

  1.ゲーム開発をリリースまでサポートしていきたい!
  2.市販のゲームみたいな「気遣い」を作るためのサポートをしたい!
  3.せっかくのゲーム制作、楽しく作ってもらいたい!基本的にややこしさはダメ。


1と2についてはゲームを遊んでくれた方が「あー、なんかそれっぽい!」と感じて
くれるような、ゲームシステム以外の作法(遊びやすさみたいな)の部分。

例えばユーザーさんにとって、エラーが発生したときに表示されるメッセージが「xxのxx行目で~」とか、
開発者が見るための情報なんていらないのです。ちゃんと「申し訳ありませんが終了いたします」でいくべき。
可能であれば「ドライバの動作を確認~」とか「ファイアウォールの設定を~」とか、
プレイヤーさん自身で解決できるような方向を示してあげる。
1は、その辺の対応。

2に関しては、主にゲーム中の動作です。
フレームレート安定化だったり、画面遷移のフェードイン、アウト、トランジション。
シャドウとかのエフェクトが重いときにはそれを切るかどうか選べるとか、
描画オブジェクトの範囲、数の制限とか、PCゲームによくある設定。
あとはローディング等々。

3は、動的に確保するリソースの管理等、とにかくストレスを少なくすることです。
公開する全てのリソースクラスはスマートポインタで管理!解放処理?なにそれおいしいの?
他にも、例えば効果音をひとつ、さらっと再生したい時に 音声を作成→再生→止まったら解放
なんて手順をユーザー自身がやらないといけないなんていうのはよろしくない。
この辺は関数にファイル名だけ渡して再生するという方法も用意したいところ。
あと、画像一枚表示するのに何十行も書かないといけないなんてのもよろしくない。
1行!1行だよ!new したら後は勝手に描画します。Zソートもサポートします。


まぁとりあえずなにを目標にするのかと言いますと…

  有償の作品を作るのでない限り、一番重要な資源は制作者のモチベーションだと考えます。
  自分の考えたゲームシステムを作るのは楽しいですが、システム以外の、
  「プレイヤーさんへの気遣い」の部分を作るのは結構大変です。
  このライブラリはその部分を補い、制作者がシステムの構築に没頭できるような
  サポートを目標とします。

要約

  ワンランク上の作品作りをお手伝いしますにゃん!

意訳

  くらす ゆあげぃむ ころん ぱぶりっく あいとぉぉぉぉっ!ゆうきとぉぉぉぉぉっ!!きぼうぅぅぅぅぅぅッッ!!!ガッガッ
  ・・・・・・! せみころん。


・・・大体どのライブラリも目指しているところでしょうか・・・?



以下、一応企画書みたいなものをぺたんこ。めちゃくちゃ簡単ですけど。。

-----------------------------------------------

◆ライブラリ名

  LightNote (略 LNote)


◆コンセプト

  ワンランク上の作品作りをお手伝いしますにゃん!


◆主な特徴

  ・全面的に参照カウントでリソースを管理。解放忘れ等を防ぎます。

  ・ゲームに必要と思われる機能を広く実装していきます。
    ゲームオーディオ、キーコンフィグ、スレッドを使ったリソースの非同期読み込み等。
    例えば、音声の再生では「音声の再生」というひとまとまりではなく、
    「BGMの再生」「効果音の再生」等、再生方法も指定できるようにします。

  ・例外処理は基本的にライブラリ側で持ち、発生時にはできる限り丁寧に対応。えれがんとに着地します。


◆ターゲットユーザー

  ・C++ のクラスまでは何とか使える人
  ・関数ライブラリではなく、クラスライブラリを使いたい人
  (オブジェクト指向の勉強をしてみたい的な)
  ・シェーダプログラムの勉強等、ちょっと上を目指してみたい人


◆プラットフォーム

  WindowsXP 以上 32/64bit
  DirectX9 以上


◆サンプルコード ( 画像を一枚表示させる )

CODE:

	#include 
using namespace LNote;
using namespace LNote::Accessor;

// ライブラリの初期設定を行う関数
// ( lnMain() が始まる前に呼ばれる )
void lnConfig( LConfig config_ )
{
	config_.setFrameRate( 30 );		// 例 フレームレートを 30 にする
}

// エントリーポイント
int lnMain()
{
	// 画像ファイル "Chara.png" を読み込んでテクスチャ
	// ( DXライブラリのグラフィックスにあたるもの ) を作る
	LTexture tex = LTexture::create( "Chara.png" );
	
	// 作ったテクスチャを使って、スプライト ( 透明な板みたいなもの ) を作る。
	// ここまでの2行で画面に画像が表示される
	// ( DXライブラリの DrawGraph のような関数をメインループの中で呼ぶ必要は無し。 )
	LSprite sprite = LSprite::create( tex );
	
	// メインループ
	do
	{
	
	// 更新処理。この中で全てのスプライトが自動で描画され、決められたフレームレートに
	// なるように FPS を調整し、プログラムを終了するべき時は false を返す
	} while ( Framework.update() );
	
	// ※ Framework は LNote::GlobalAccessor 名前空間内のグローバル変数です。
	//    使わない場合は LFramework::getInstance() で取得します。
	
	return 0;
}
  ちなみに main() または WinMain() から始める方法も提供していきます。
  lnMain() を使う利点は、関数が始まった時点で初期化処理が完了していて
  ウィンドウも出ていることです。


◆備考

  最後まで作ってから公開するのではなく、キリのいいタイミング、あるひとまとまりが
  でき上がった時点で、逐次ライブラリ及びサンプルを公開していきます。

-----------------------------------------------

イメージ的にはDXライブラリをゲーム寄りにラップしたクラスライブラリって感じになるかなぁ・・・。

コメントはまだありません。