ゲームにおけるデータ構造・クラス設計・パターン2at GAMEDEVゲームにおけるデータ構造・クラス設計・パターン2 - 暇つぶし2ch■コピペモード□スレを通常表示□オプションモード□このスレッドのURL■項目テキスト141:名前は開発中のものです。 08/07/06 23:15:17 bOQhFRQW >>140 めんどくさいのは、シーン遷移よりキャラクターの状態遷移だよな。仕様変更が わりと発生しがちな部分だし。 142:名前は開発中のものです。 08/07/06 23:34:33 NhLrwJLQ >>141 同感だ そういう箇所に擬似コルーチンを使ってる 前はState使ってたが、あれは追加には強いが変更に弱いな、複雑になって死んだ 単純ならそのまま状態変数で適当に書いてもいいが コルーチンのほうが書いてて楽しいな 143:名前は開発中のものです。 08/07/06 23:47:58 bleemPMj 状態が変わる時は自滅させてから、見た目同じで中身は別の敵オブジェクトを生成するとか。 144:名前は開発中のものです。 08/07/07 00:57:38 FUQ1BpEu >擬似コルーチン 浅学な俺にコレについて詳しく 145:名前は開発中のものです。 08/07/07 04:37:03 ohkg3t4w >>144 以前けっこう調べた俺がコレについて詳しく コルーチン 並列実行をさせない(できない)スレッドのこと。外国人はコーディングの際 coro と略すこと多し。 メリットは、排他処理が不要、ネイティブスレッドに比べてコンテキスト切り替えが軽い(もちろん実装次第だが)。 デメリットは、切り替えタイミングをプログラマが指示する必要がある、CPUがデュアルコアでも恩恵が受けられない。 最近ゲーム関係でよく聞くようになったが、アルゴリズム的にはすんごく昔のクヌース本にも載っているらしい。 マイクロスレッド、協調的マルチスレッド、ファイバー(Windowsのみ)、などの言い方があるが、 ゲーム業界ではコルーチンが一般的かな? ネイティブスレッドではないので擬似的なスレッドと言えるが、「擬似スレッド」という呼び方は よく混乱を招くようなのでお勧めしない(後述するように、スレッドを擬似的に再現する手法は他にもある)。 Cで実装する場合は、たいてい手動でスタックポインタを切り替えることで実現する。 主な実装: アセンブリで実装:作成難度高、コンパイラ依存、移植性なし、使い手にもスキルが必要(スタック溢れ対策など) 大域ジャンプで実装:作成難度中、コンパイラ依存、やや制限がある スクリプトで実装:スクリプトのVM(例えばLuaやSquirrel)に任せる。使うのは簡単で制限も少ない 擬似コルーチン コルーチンっぽいことを擬似的にやること(を、>>141は言っているのだと思われる)。 主な実装: マクロで実装:作成難度低、移植性高い、制限多い、読み手には超分かりずらい 感じを掴むには、LuaかSquirrelでコルーチンを触ってみるのが一番手っ取り早いと思う。 以下は直接関係ないので、混乱するようなら読み飛ばして。 ・昔のMacOSやWindowsで言うところの「プリエンプティブでない」マルチタスクの仕組みは、コルーチンの親戚。 ・RubyやPythonのスレッドも、一般的な実装ではネイティブスレッドではなく擬似的なスレッドらしいが、 明示的にコンテキスト切り替えを行うわけではないのでコルーチンとは異なる。 Javaではこのような擬似的に実装したスレッドをネイティブスレッドに対してグリーンスレッドと呼ぶ。 次ページ最新レス表示レスジャンプ類似スレ一覧スレッドの検索話題のニュースおまかせリストオプションしおりを挟むスレッドに書込スレッドの一覧暇つぶし2ch