いちばんやさしいゲームの作り方

文系の人でも、数理学がわからない人でもゲームプログラミングをマスターできるブログ

関数をリスト構造にして実現するタスクシステムではなく、 CPU のレジスタを操作してマルチスレッドのごとく動くタスクシステムの実装を見ました。いやぁ、面白い、というかすごいです。

たとえば、「キャラクターを1フレームに1ドットずつ 100 ドットだけ右へ動かす」という場合、次のように書いてしまう失敗が多くあります。

for (int i = 0; i <100; i++) {
  // ループの中で書いて良いの?
  // ここ、1フレーム中に 100 回呼ばれるよ?
  theChar->moveToRight();
}

これはたいていの場合失敗です。これを実行すると1フレームで 100 ドット右に動いてしまいます。メルマガの読者の方はすでにご存じですよね。しかし、マルチスレッド系はこれで大丈夫です。実際は同期を取るため何らかの関数を挟む必要がありますが、かなり頭で考えているイメージとソースコードが近くなりますよね。

// このループを抜ける頃には 100 フレームくらいかかってるんじゃないかな?
for (int i = 0; i <100; i++) {
  theChar->moveToRight();
  wait(); // ←ほかのタスクと同期(こいつだけ早く終わるのを避ける)
}

しかしながら、これを書いた人は「これを使うにはそれなりの知識が必要になると思う」とのこと。確かに生まれながらにしてシングルスレッド脳の私には扱えません。

Comments

soramame
2009/02/26 22:56:40

それはコルーチンっすよ
自分も最近知って使いまくってます
ファイバーとかマイクロスレッドとも言うらしい

Byerkut
2009/02/28 00:44:02

> soramame さん

おお、これが噂のコルーチンですか!
名前しか知りませんでした…
あと、ファイバーとかマイクロスレッドというのは初めて聞きます。
ゲームに応用できそうですね。

Contributions




Trackback URL

メルマガ登録・解除
 
挫折不可能!初級ゲームプログラミング完全マニュアル
RSS track feedいちばんやさしいゲームの作り方 カウンター
ブログSEO対策:track word あわせて読みたい SEO STATUS