トップページ > 過去ログ > 記事閲覧
マルチスレッドを使うべきか否か
名前:零空 日時: 2011/12/27 03:51

はじめまして。私の技量不足で分からない事があるので質問させてください。 先日から、DXライブラリを利用してゲームを作ろうともがいています。 コマンド式のSLGにしようと思っています。 それは、碧の軌跡というゲームのシステムを真似しようと思っているのですが、  ※参考:下の動画の3:25〜6:00のあたりが分かりやすいです  http:/ダブリューダブリューダブリュー.youtube.com/watch?v=NQOatdh35Q0 このゲームでは自分のキャラのターンにコマンドメニューが出現します。 このコマンドを再現するだけならなんとかなったんですが、 コマンドを描画、更新している間も背後のキャラクターのアニメーションが 動き続けているのも再現したいんです。 それで、試行錯誤してみたんですが、なにやらプログラムがものすごい長さ かつゴチャゴチャになってしまったうえに動かなくなりました。 そこで、マルチスレッドを使おうと思っています。 メニューが必要なときだけメニュー描画、更新を行うスレッドを作ってしまえば よいのではないかと思ったからです。 ですが、マルチスレッドはあまり多用しないほうがいいとか、メンバ関数にする のが難しいとかあまりいい意見の書いてあるサイトとかがありませんでした。 この場合、マルチスレッドを使うべきなのでしょうか? 使うとしたら何が危険なのか、またDXライブラリでマルチスレッド内で機能が 制限される関数はあるんでしょうか? 長々とすみません。ご意見だけでも宜しくお願いします。 *余談ですが、NGワードにダブリューがあるのは使いづらいですね…

Page: 1 |

Re: マルチスレッドを使うべきか否か ( No.1 )
名前:Will 日時:2011/12/27 09:52

その考えはダメです。 DXライブラリは複数のスレッドから描画関数(DrawGraphとか)をコールしても良いつくりにはなっていないので、描画処理は一スレッドにまとめる必要があります。 そもそも、一つのウィンドウに対する描画を複数スレッドで処理しようとすることはシステム設計的におかしいです。 プレイヤーの入力処理中にCOMの思考ルーチンを別スレッドで走らせるためにマルチスレッド化するとかならわかりますけど。 > コマンドを描画、更新している間も背後のキャラクターのアニメーションが > 動き続けているのも再現したいんです。 ループ処理で描画処理順が 背景→キャラクラー(アニメーション)→コマンド→ScreenFlip となっていればよいだけのことですよ。
Re: マルチスレッドを使うべきか否か ( No.2 )
名前:弱音ハク 日時:2011/12/30 01:37

ご意見だけでもOKと言うことなので、気楽に便乗〜 零空さんのやりたいことはマルチスレッドを使わずともできると思います。 >> リングコマンドが表示されている間も キャラクターはアニメーションするけれど、 キャラクター達の行動順の判断用カウントや 魔法詠唱の為のカウント等はコマンド選択が完了するまでは 時間を進めて欲しくない。 << と言うことですよね? なら、コマンド選択中(リングコマンドが表示されている)の状態を格納した変数を用意して、 アニメーションの処理部ではその変数は特に確認せず処理を続け、 詠唱や行動順の時に使うカウントの処理を実行する前に その変数の状態を確認して進めるか、一旦止めるかを判断する。 こんな感じでいかがでしょうか。
Re: マルチスレッドを使うべきか否か ( No.3 )
名前:softya(ソフト屋) 日時:2011/12/30 15:31

DXライブラリでマルチスレッドを利用する場合はバックグラウンドでメモリに読み込みたい(DXライブラリのLoagGrpah()などは使えないので工夫が必要)とか、思考ルーチンが処理速度的に遅いのでマルチコアを積極的に使いたいと言った場合に限定されるべきだと思います。 状態遷移などの考え方を使えば、コマンド選択中もアニメーションさせることは可能です。 ここのやってはいけないに該当していないかチェックしてみてください。 「新・C言語 〜ゲームプログラミングの館〜 [DXライブラリ]」 ttp://dixq.net/g/h_11.html
Re: ( No.4 )
名前:零空 日時:2011/12/31 02:30

Willさん、弱音ハクさん、softyaさん、ご意見ありがとうございます。 やはり、マルチスレッドの使用は控えた方がいいようですね。 とりあえずコマンドを別スレッド化するのはやめます。 ただ、コマンドとは別なんですが >COMの思考ルーチンを別スレッドで走らせるとかなら について。 このゲームでは、必殺技を割り込み発動できるんです。 本家では敵は割り込みはしてきませんが、 私はどうしても実装したいと思っています。 この場合ルーチンを分けてマルチスレッド化するほうが良いのでしょうか? また、分けるならどういうイメージになるんですかね? こちらもご意見だけでもよろしくお願いします。
Re: マルチスレッドを ( No.5 )
名前:零空 日時:2011/12/31 02:37

ちょっと説明不足な気がしたので追記 自分のターンであろうがコマンド選択中であろうが実行中であろうが、 敵が割り込み処理を行うと、強制的に敵が即発動できるということです 最初にリンクを貼った動画でも、一瞬なので分かりにくいですが 最後らへんに割り込みをしているシーンがあります よろしくお願いします
Re: マルチスレッドを使うべきか否か ( No.6 )
名前:softya(ソフト屋) 日時:2011/12/31 10:37

「必殺技を割り込み発動できるんです」それをスレッドで実装する方が面倒です。通常シーケンスを分岐させるだけですので、マルチスレッドは考えなくて良いです。
Re: マルチスレッドを使うべきか否か ( No.7 )
名前:softya(ソフト屋) 日時:2011/12/31 10:55

実際の所ゲームと言うのは擬似的にマルチスレッドで動いているようなものですから速度的な理由がない限りマルチスレッドの出番はないと思ってもらったほうが良いと思います。 こういう考え方を理解すると、どうやって割り込み発動するか考えられるようになると思います。 「状態遷移プログラミング」 ttp://bit.ly/rscoc3
Re: マルチスレッドを使うべきか否か ( No.8 )
名前:零空(解決) 日時:2012/01/05 09:50

年始故返信が遅くなり申し訳ありません。 softya(ソフト屋)さん返信ありがとう御座います。 載せて頂いたリンク先等を見て勉強します。ありがとうございました。

Page: 1 |