過去の投稿記事 new!
・【画像】漫画でわかる外国人参政権
・東京電力のHPで停電状態が確認できたり(サービス再開!)
・戦国時代 ~ 江戸時代の徳川家康が熱かった
・vaio のバッテリは寿命が短いような気がする
・話題の Western Digital 製 WD20EARS を購入した
・C01LC をビックカメラで買ってきた
・2025年には空中都市が現実化?!
・【動画】わかりやすい「宇宙ひも理論」
・今世紀には「富士山噴火」「東海連動地震」「首都圏直下型地震」か?
・滅びた町、南浜町が Googleストリートビューで見れる

【 amazon 送料無料キャンペーン 】

バックリンクはご自由にどうぞ!     http://mfsocket.blogspot.com/feeds/posts/default?alt=rss リンク集 / ログイン

2007/06/03
バーチャルマシン/ゲームデザインについて

 
今回はバーチャルマシン内でのゲームデザインについてちょっとだけ
語ろうと思います。
 
大半の方は興味のない事だと思いますので、該当する人はご注意ください!
 
 
みなさんは ノンプリエンプティブマルチタスク というのはご存知でしょうか?
Windows 3.1 などのOSでも採用されていた手法です。
 
別名にすると「擬似マルチタスク」とも言います。
 
 
そうですね。
名前の通りまさに擬似マルチタスク環境を提供するシステムのことを言います。
 
これの一番の欠点は行儀の良くないアプリケーションがあると、
OS( バーチャルマシン )そのものが応答しなくなるという危険性を
秘めてています。
 
利点はプリエンプティブマルチタスクを実装するよりははるかに楽という
ことに付きるでしょう。
 
 
またプリエンティブでは膨大な実装による
動作上のオーバヘッドも考えられるのでスペックの低いシステム上では、
あまり現実的とは言えないと考えられます。
 
 
まぁ単に実装できる気がしないのもあるけどw
 
 
じゃあ擬似マルチタスク環境を選択( 実装 )する事によって発生する、
OSそのものを独占してしまうタスクとか実際あったらどうするの?って
考えられますよね。
 
それに関しては実はとても簡単な答えが出てるのです。
 
 
 
例えば新米スクリプターさんにCPUを返却する命令として、
これを書かないと必ずフリーズるよ?(※1)って指示するより、
そのシステムそのものを隠べいする方が、都合が良くなる場合があります。
 
※1
フリーズとは限りません。
そのタスク内処理が 「画面に反映されない」 ように見えるだけかもしれないし、一時的に他のイベントタスクが
止ったように見えるだけかもしれません。
 
 
以下の例を見てみましょう。
( ´д`) >例としてはあまり良くないな。。今度差し替えます。

// キャラクターのタスク( ★通常パターン★ ) ////////////////////////////
charTask()
{
        // Aというキャラクタの何か適当な移動&描画処理
        drawCharcter( "A.chr" );
        cpu_return();
 
         // Bというキャラクタの・・・
         drawCharcter( "B.chr" );
        cpu_return();
}
 
// キャラクターのタスク( ★マクロ パターン★  ) //////////////////////////
Event( charTask )
{
         DRAW_CHAR( "A.chr" );

         DRAW_CHAR( "B.chr" );

}

 
上の例ではキャラクター描画の後に 必ず cpu_return() というのが入ってます。
これは書く側としては、ゲームシステム自体を理解しないとどこに入れるべきか
という判断がつきません。
 
70%程度の理解のままでは、必ずバグコードを生成してしまってるでしょう。
 
 
マクロプログラミングは、それらをブラックボックス化する事ができる(※2)
ですね。マクロのメリットはコードの単純化、命名規則の単純化、とあるバグを
生む確率の完全なる削除、等など多数あります。
 
※2
すべてを隠しとおせるわけではない事もあります。
しかし、慎重になるべき個所を極端に減らす事が出来るのは間違いありません。
 
 
最低限のルールはもちろんあるけど、プログラマーじゃない方、または設計者
じゃない言わゆる並のプログラマーの方に、バグを生みやすい?内部ルールが
いくつも存在する環境で開発させるのは、正直良い案とは思えません
 
 
まぁ、奇麗事になっちゃうけど。
 
 
さて、今回の話はタスクシステムについて知らない方には全く意味不明なこと
だったと思います。
 
 
ゲーム開発内のアルゴリズムは色々とありますが、ゲーム設計ももちろん重要です。
 
もしこれからプログラマを目指そうという方がいましたら、下記のことが
できるレベルだと、採用してくれるゲーム会社はけっこうあるんじゃないかな?
 
・C/C++ なら関数ポインタを用いたタスクシステム。
・Java なら、仮想関数を用いたタスクシステム。( switch もあり )
 
 
もちろんプログラマってもっともっと覚えないといけない(※3)、事が山のように
あるので、上の言葉だけ知ってても仕方ありません。
 
※3
別にいけなくなくは無いよ。
スーパープログラマーになる為には、という意味で。
           ↓
ドラ○ンボール風に言うと、サイヤ人を超える者。
 
 
逆に自分の場合は、言葉は知らないけど内容は知っているということも
多いのですが。。というか「言葉はすぐ忘れる」のが正解かな?
 
普段から毎日、専門的用語は使いませんからね。。
 
 
しかし自他共に認めるスーパープログラマになるのは難しいねぇ。
 
まず自分でスーパープログラマと思えるレベルを考えると( 例えば実際の人
でもいい )、全く届きそうに無いw
 
 
う~ん、スーパープログラマーの定義を明確になると面白いそうだけど、
この定義を明確するのは難しいな。

0 コメント:

  • コメントには <b>, <strong>, <em>, <i>, <a> など一部の HTML タグを使用できます。