- 1 名前:デフォルトの名無しさん mailto:sageteoff [2015/09/08(火) 15:26:10.41 ID:x6IFoIJM.net]
- 前スレ
peace.2ch.net/test/read.cgi/tech/1422445064/
- 231 名前:デフォルトの名無しさん mailto:sage [2015/10/05(月) 00:39:23.49 ID:IBdfcwn9.net]
- >ゲームの状況によって必要な処理って変化すると思うけど、
if文で分岐するか、もしくは共通な処理をまとめて state1_before(); common(); state1_after(); こんな感じではダメなんですかね? って構造化プログラミングの基本ですわね for( auto ptr: effects ){ ptr->task(); } タスクシステムを使わない場合でもこういうコードで明示的に呼び出すと思うのですが このときeffectsが空なら何も実行されないんで 自然と状況に応じてタスクの切り替えができると思うのですが >あとどの順で実行されてるか、どれくらいの時間かかってるかデバッグ表示を作るといい これってタスクシステム特有の問題? 処理時間はプロファイラを使えば分かるのでは
- 232 名前:デフォルトの名無しさん mailto:sage [2015/10/05(月) 00:57:39.30 ID:ZGRyV9RB.net]
- >>227
条件文の嵐になって読みにくくなりそうだが… そっちの方が読みやすいのであればタスクシステムを無理に使う必要はないのでは? あとプロファイラでリアルタイムに処理時間の表示とかできたっけ? 出来るんならそっちでいいんじゃないかな
- 233 名前:デフォルトの名無しさん mailto:sage [2015/10/05(月) 00:57:49.18 ID:vFVbTghW.net]
- >>227
何もダメじゃないけど?
- 234 名前:デフォルトの名無しさん mailto:sage [2015/10/05(月) 00:58:10.50 ID:IBdfcwn9.net]
- ゲームには沢山のオブジェクトが出てくるし、同じクラスのオブジェクトが
複数インスタンス化されたりもするので、どう考えても配列かリストか なんらかの形で管理しなければならないのは明白なので、これは分かるんです、当然です こういうデータ構造としてのゲームプログラミング設計はまずあると思います しかし、これに処理の実行順を管理するタスクシステムを組み込むとなると どうしてよいかわかりません ゲームオブジェクト=タスクとすると後々問題が出てくることは ちょっと考えれば直ぐに分かることなのでこの案は無しだと思います データ構造と制御構造を一緒に考えているからうまくいかないと考えられるので 完全に切り分けて単純に、関数・ラムダ=タスクとすると、今度はタスクのリストを動的に生成して プライオリティーで並べ替えて前から順番に逐次実行していくという 実に地味な展開になり、あまりメリットを感じません なぜならリストの前から順番にタスクを逐次実行していく動作は ソースコードの上から順番にプログラムを逐次実行しているのと本質的にそう変わりない気がするから こういった二元論ではなく、もっと中途半端な観点で設計をしないと タスクシステムは成り立たないように思え、とても難しいです
- 235 名前:デフォルトの名無しさん mailto:sage [2015/10/05(月) 01:03:34.84 ID:vFVbTghW.net]
- オブジェクト指向から始めると幸せになれると思う。
各オブジェクトに関して密な結合をしすぎている感があるから。
- 236 名前:デフォルトの名無しさん mailto:sage [2015/10/05(月) 01:05:38.48 ID:IBdfcwn9.net]
- >条件文の嵐になって読みにくくなりそうだが…
ある意味ではですよ、 クラスのインスタンスは大概は複数個生成されることがあり得るので リストか配列かで管理されると思うわけです std::vector<effect*> effects とか このときエフェクトの処理を実行するにはfor文を使うわけですよね エフェクトが一つもなければfor文の中は実行されないし、 エフェクトが有れば適切な処理がなされるわけですよね 普通に書いてもそういうプログラムになるので分岐とかはそんなに意識する必要が ないと思うのでした
- 237 名前:デフォルトの名無しさん mailto:sage [2015/10/05(月) 01:12:53.88 ID:IBdfcwn9.net]
- >>231
むちゃくちゃオブジェクト指向風にタスクシステムを考えると いわゆるアクターとか言われているような ゲームオブジェクト=タスク、といった古典的なものになりますが これは上手く行きようが無いと思うんです update呼び出し一回のワンパスですべての処理が終わるとも限りませんし そうするとupdate2、update3・・・どこまで必要? これに加えてプライオリティーによる処理順管理もあるので 処理順がマトリックスになって非常に煩雑なことになる これは完全に破たんした方法なのでよくないと思うんです こんな方法を考えた人はよほどアレだと思いますね
- 238 名前:デフォルトの名無しさん mailto:sage [2015/10/05(月) 01:27:53.04 ID:ZGRyV9RB.net]
- 難しく考えすぎなんじゃない?
ソースにだらだら書いた方が分かりやすいって規模ならそうした方がいい
- 239 名前:デフォルトの名無しさん mailto:sage [2015/10/05(月) 01:33:48.65 ID:IBdfcwn9.net]
- つまり、大規模になるとタスクシステムでなければ分りにくい、という事ですか?
- 240 名前:デフォルトの名無しさん mailto:sage [2015/10/05(月) 01:41:45.20 ID:ZGRyV9RB.net]
- タスクシステム以外にも選択肢はいろいろあると思うけど、
ソースにだらだら書いたのは分かりにくくなるよ
- 241 名前:デフォルトの名無しさん mailto:sage [2015/10/05(月) 10:10:06.67 ID:PWnbmIW0.net]
- 依存関係があるならツリーか何かにしたら良い。
大抵の場合の依存関係はどちらかがもう一方を所有している関係にあるだろうから、所有関係をツリーで表すのは理に適っている。 タスクシステムの利点はオブジェクト指向の多態そのもの。 多態が不要ならタスクシステムも不要。
- 242 名前:Office & Gamers ◆G144Hzgh2.0e mailto:アハ♪” uh huh [2015/10/05(月) 11:55:35.34 ID:gT+5Wa+A.net]
- 99BASIC&DarkBASICド安定時代。(アハ
>>78-84まで読み返してみようw 負け印は永久に。(>>203(笑))
- 243 名前:デフォルトの名無しさん [2015/10/05(月) 12:26:07.50 ID:2RLyGII5.net]
- C++にツリーないよね。
- 244 名前:デフォルトの名無しさん mailto:sage [2015/10/05(月) 12:30:17.18 ID:IlcRXKJi.net]
- std::set
つかなければ作ればいいかと
- 245 名前:デフォルトの名無しさん [2015/10/05(月) 12:39:34.81 ID:2RLyGII5.net]
- なんでsetなんだよ。
子ノードをvectorに格納とかもないと思う。
- 246 名前:デフォルトの名無しさん [2015/10/05(月) 12:44:23.60 ID:2RLyGII5.net]
- 良く考えたらここゲームのスレか。
>>241は取り消し。
- 247 名前:デフォルトの名無しさん mailto:sage [2015/10/05(月) 18:29:08.47 ID:IBdfcwn9.net]
- >>237
どうしてそう思うのですか? ゲームオブジェクトが、ただのコンポジションにとどまらず、親子関係を持つのは、 座標なんかのジオメトリーに親子関係を持たせたいからですよね それは分るのですが、今言っている依存関係はそういったものではなくて、処理順番の依存関係なんですが だから所有関係がどうこうも関係ないと思うのですが >タスクシステムの利点はオブジェクト指向の多態そのもの。 タスクシステムを使わなくても、ゲーム以外の一般のアプリも含めて 普通に多態を使っているようですが、そういった方法ではダメなんですか?
- 248 名前:デフォルトの名無しさん mailto:sage [2015/10/06(火) 02:48:34.43 ID:+MMTk5e6.net]
- 突き詰めて考え始めるとゲームが完成する頃にはおじいちゃんになってるぞ
適当なところで妥協するんだ
- 249 名前:デフォルトの名無しさん mailto:sage [2015/10/06(火) 03:07:38.27 ID:fYjaFdQo.net]
- >>243
無理してタスクシステム使う必要無いぞ 別の方法でも全く問題ない
- 250 名前:デフォルトの名無しさん mailto:sage [2015/10/06(火) 05:41:44.61 ID:fR2Oep+7.net]
- 別々の処理、ABCの実行順序が、
ABC, ACB, AABC のように、コロコロ変わるのなら、 タスクシステムの方がよい
- 251 名前:デフォルトの名無しさん [2015/10/06(火) 07:30:27.54 ID:xf5ET6YX.net]
- タスクシステムなんて関数を実行するenumrator渡してぐるぐる回すだけだろ。
好きにやれよ。 こんなんお前が何日も考えてる間に俺なら20分で実装終わるわ
- 252 名前:デフォルトの名無しさん mailto:sage [2015/10/06(火) 13:44:39.89 ID:f7gjBYhW.net]
- >>243
> それは分るのですが、今言っている依存関係はそういったものではなくて、処理順番の依存関係なんですが > だから所有関係がどうこうも関係ないと思うのですが 処理の依存関係の具体例が分からないから何とも言えない。今の段階では単に設計がクソなだけに思える。 処理順に依存関係があるなら、その実行順に責任を持つモジュールなりオブジェクトなりを用意したらいい。 ちなみに、 foreach node do update. foreach node check collision. foreach node solve events. のようにイテレーションを分割することで順序性を解決すべきところを登録時オブジェクトの制御でやろうとしてるとしたら間抜けすぎるが違うよね。 > 普通に多態を使っているようですが、そういった方法ではダメなんですか? タスクシステムという用語は便利でみんな使っているが、共通理解を得られる設計や実装はない。 普通に多態を使うだけでタスクシステムと名乗って構わないが、タスクシステムという名前を使わない方が建設的だ。 便利に多態を使っているなら用語の定義なんてこだわるのは時間の無駄。
- 253 名前:デフォルトの名無しさん mailto:sage [2015/10/06(火) 15:46:41.02 ID:23iFaTdX.net]
- タスクシステムで5年ぐらい損した
- 254 名前:デフォルトの名無しさん mailto:sage [2015/10/06(火) 21:35:50.37 ID:k9h8FU3j.net]
- foreach node do update.
foreach node check collision. foreach node solve events. ↑こうやって場当たり的にメソッドをどんどん増やしていくんですか? 場当たり的にゲームのメインループに手を加えてよいなら 各オブジェクトやインターフェイスのコレクションを列挙してアップデート っていう普通のアプリなんかに使われているような、ごく普通のプログラミングなんですが どうしてタスクシステムっていう名前なんですか?
- 255 名前:デフォルトの名無しさん mailto:sage [2015/10/06(火) 21:49:45.31 ID:v1UdlCe9.net]
- タスクシステムは誰もが普通だと思える程度に優れた手法だということです。
あまりに優れているから誰もが模倣して、そして一般化したのです。
- 256 名前:デフォルトの名無しさん mailto:sage [2015/10/06(火) 21:50:44.11 ID:k9h8FU3j.net]
- 当然コレクションも型や用途に合わせて複数本用意するわけですよね
それで各コレクションに対してループを使って更新していくという どこにもタスク(処理)の管理の要素がないんですが
- 257 名前:デフォルトの名無しさん [2015/10/06(火) 22:08:59.19 ID:xf5ET6YX.net]
- タスクには関数を渡すから型などどうでもよい。
なんか多態とか意味不明なことを言ってるのやつがいたが。 型を保持して特定のメソッドを回すのは日課として決まっている時。それ以外の偶発的な処理をタスクに任せる
- 258 名前:44 mailto:sage [2015/10/07(水) 12:55:11.95 ID:+M+nAnPF.net]
- タスクシステムってギャラクシアンで使われた(という噂がある)ぐらい古いものだから
基本概念のことなのかC++で実装したときの話なのか、など立地点を 合わせないと話が合わない
- 259 名前:デフォルトの名無しさん mailto:sage [2015/10/07(水) 17:37:02.71 ID:olmGB7G8.net]
- >>248のやり方だと
場当たり的にupdate1、update2、update3、って処理順を解決するための メソッドがどんどん増えていきそうだけど、これに加えてプライオリティー値での実行順の管理も有るから 処理順が二次元の表みたくなってスッキリしなくない? なんで二種類の方法を組み合わせて管理してるんだって言う 副変速機付きのミッションか!って 逆に>>253のやり方だと、単に関数の呼び出しを動的なリストに持ち直して 逐次実行することで管理しているわけだけど、 動的に管理する意味って有るの? 物事は出来る事ならなるべく静的に管理すべきだと思わない? どうしても動的な管理が必要な部分だけ的を絞って 被害を最小限に封じ込める形でライブラリ化したほうがよくない? 例えば描画はZソートの関係で処理の順番が入れ替わるけど 描画ライブラリに封じ込めてしまえば使う側は気にしなくても良いよね
- 260 名前:デフォルトの名無しさん mailto:sage [2015/10/07(水) 18:03:50.78 ID:olmGB7G8.net]
- タスク=関数みたいなもの、っていう立場なタスクシステムだとさ
タスクのリストは呼び出すべき関数のリストって感じになると思うんだけど その関数のリストって、CPUが逐次実行するわけだから、 ある意味ではプログラム的というか、ちょっとしたVMっぽいよね どうせなら「gotoタスク」とか「ifタスク」とか作って、 条件が満たされた場合は10個後ろのタスクにジャンプする、とかやってみたら? 高級言語にはif文なんかの制御文が始めから用意されているのに それを使わずにタスクのリストで制御構造付きのプログラムを表現するのwww不毛www でも結局はそういうことなんじゃないのかね
- 261 名前:デフォルトの名無しさん [2015/10/07(水) 22:52:44.18 ID:K9vCPUNu.net]
- >>255
全部そういう形式にしろとは言ってないし、パフォーマンスに関わる描画がなんか当然静的にしておいた方がいい。 つまり、好きにしろと言うことです。
- 262 名前:uy ◆revRDn.iQs mailto:sage [2015/10/08(木) 12:12:36.62 ID:vEe59M97.net]
- タスクシステムに実行順序?
は? え? は? タスクD 3 タスクA 1 タスクB Last タスクC 2 ↓ タスクE { タスクA,C,D } タスクB
- 263 名前:デフォルトの名無しさん mailto:sage [2015/10/08(木) 13:08:40.26 ID:vEe59M97.net]
- 結局タスクをツリー管理してないから意味不明なところで躓く
ツリーにしとけばこの手の問題はまとめて解決
- 264 名前:デフォルトの名無しさん mailto:sage [2015/10/08(木) 13:33:30.63 ID:vEe59M97.net]
- このスレやたらC++に拘るけどタスクシステムをスクリプト言語で書く事が
速度のボトルネックになるんですか? しかも今どき4コアあるんだから速度足りないならマルチスレッド活用したら良いじゃん 本当にお前らは4コア活用した上でさらに速度欲しくてC++なの?
- 265 名前:デフォルトの名無しさん mailto:sage [2015/10/08(木) 13:37:19.25 ID:APM/wiII.net]
- > ↑こうやって場当たり的にメソッドをどんどん増やしていくんですか?
場当たり的? 衝突がなかった場合の移動処理を行ってから、コリジョン判定を行って、その結果のイベントを処理する、という順序を明確にするのは基本設計の部類だろう。 そういう順序依存についてはそうやればいいし、ボスが生きている間だけ存在するエフェクトがボスの移動成分などを見るような場合はツリーにして所有者が責任を持つ形にしたらよい。 順序依存で問題が出る具体的なケースを出せよ。 お前の問題を出せ。 どうせお前が間抜けなだけだろうがな。 > どうしてタスクシステムっていう名前なんですか? 用語の定義なんてどうでもいい。 何の役にも立たない昔話が聞きたいなら教えてやる。
- 266 名前:デフォルトの名無しさん mailto:sage [2015/10/08(木) 14:10:18.58 ID:vEe59M97.net]
- 親タスクの子タスクとして作って
深さ優先探索で処理してくようにしとけば それで順序作れてる
- 267 名前:デフォルトの名無しさん mailto:sage [2015/10/08(木) 15:42:45.38 ID:ry26LUSI.net]
- まあ考えるの楽しいよね
- 268 名前:デフォルトの名無しさん mailto:sage [2015/10/08(木) 17:53:53.79 ID:jZEKLa+0.net]
- >>261
でも結局は超省略してかくと for( auto t : tasks ){ t->update1(); } for( auto t : tasks ){ t->update2(); } for( auto t : tasks ){ t->update3(); } ・・・ って事でしょ updateにはもうちょっと機能的な名前がついているかもしれないけど で、フレームワークみたく、メインループを肯定するわけでもなく 場当たり的にゲームに合わせて適当に改造するんでしょ どうせメインループ固定縛りをしないんだったら、こんな枠そもそも要らなくね? >ボスが生きている間だけ存在するエフェクトがボスの移動成分などを >見るような場合はツリーにして所有者が責任を持つ形にしたらよい。 これは意味分らんよね 整理整頓がなってない 所有権はオブジェクトの寿命に関連付いてるのが普通で、処理順の依存とは分けて考えたいね
- 269 名前:デフォルトの名無しさん mailto:sage [2015/10/08(木) 20:30:17.88 ID:viTJSHop.net]
- 関数を変数として扱えるJavaScriptなら
こう書ける コールバック地獄を解消するPromiseパターン qiita.com/progre/items/03626b7f4655007d8cb2
- 270 名前:デフォルトの名無しさん mailto:sage [2015/10/09(金) 00:00:20.35 ID:m6l+7vgz.net]
- ゲームなんか60FPSとかで周期実行してるんだから
ポーリングでいいんだよポーリングで 非同期で関数をコールバックさせたりする必要性無し ステータスをポーリングすりゃいい シンプルが一番
- 271 名前:Office & Gamers ◆G144Hzgh2.0e mailto:アハ♪” uh huh [2015/10/09(金) 04:43:17.31 ID:Ivu8fb1k.net]
- 99BASIC&DarkBASICド安定時代。(アハ
>>78-84まで読み返してみようw 負け印は永久に。(>>203(笑))
- 272 名前:デフォルトの名無しさん mailto:sage [2015/10/09(金) 07:25:02.38 ID:mhM1aSp5.net]
- 負けた奴が勝った奴に負けレッテル貼ってるのを見ると朝鮮人を思い出すな
事実と正反対のことでも言い続ければ通ると思ってる辺りチョンの思考回路そのもの
- 273 名前:デフォルトの名無しさん mailto:sage [2015/10/09(金) 09:00:21.40 ID:c3zPEaRS.net]
- 絡むなって
荒らしは基本スルーで
- 274 名前:デフォルトの名無しさん mailto:sage [2015/10/09(金) 10:23:24.01 ID:DN0emzyh.net]
- タスクシステムって複数人での開発を想定しないと優位性が見えてこない気がする
それもバージョン管理とか無しで
- 275 名前:デフォルトの名無しさん mailto:sage [2015/10/09(金) 11:29:23.00 ID:g7Yw+7KT.net]
- タスクシステムって状態を保存できたり
- 276 名前:Office & Gamers ◆G144Hzgh2.0e mailto:アハ♪” uh huh [2015/10/09(金) 12:49:36.23 ID:Ivu8fb1k.net]
- (>>203(笑))
- 277 名前:デフォルトの名無しさん mailto:sage [2015/10/09(金) 14:02:01.40 ID:IQeoxHql.net]
- タスクシステムで順序の依存関係で困る具体的な問題は存在しなかったということでよかろうか。
- 278 名前:Office & Gamers ◆G144Hzgh2.0e mailto:アハ♪” uh huh [2015/10/09(金) 19:22:36.03 ID:Ivu8fb1k.net]
- シグナルとセマフォ分かってんのか?w
- 279 名前:uy ◆EAQ94PCRPw mailto:sage [2015/10/09(金) 21:12:03.94 ID:a6l66mp2.net]
- ずっと昔にタスクで動いてるオブジェクトが
さらにオブジェクトを生成するタイミングで 順序依存が発生したけど それはほんの一瞬の出来事で、すぐにコードを最適化して順序関係なくした そこで止まってるレベルの話 実行順序が必要ならセマフォでも何でもいいけど 何らかの状態が変異するまでオブジェクト作った後も処理の待ち受けしていれば良いから 基本的には順序なんて関係ない 俺様フレームワークでは深さ優先探索のツリータスクが動いてるから オブジェクトがオブジェクトを生成した場合はフレームが一周する前に即そのオブジェクトの処理が行われる これを回避する為に、オブジェクトがオブジェクトを生成する"予約"というロジックを作り 今廻ってるフレームの一番最後にその処理を行う仕組みは保有されている ただこれを使うのはモンキーパッチレベルの後先考えないコードの時だけなんで 基本は順序を意識しないプログラミングが俺様フレームワークでは推奨されている
- 280 名前:Office & Gamers ◆G144Hzgh2.0e mailto:アハ♪” uh huh [2015/10/10(土) 12:45:56.69 ID:2iDQGRsE.net]
- 分かってないなw
- 281 名前:デフォルトの名無しさん mailto:sage [2015/10/10(土) 20:57:51.54 ID:wylVu18O.net]
- キュー入れて動かすような仕組み
- 282 名前:作れば
タスクシステム自体に順序決定するようなロジック混ぜなくても 実行待機とかは出来る はいわろ終わり [] - [ここ壊れてます]
- 283 名前:デフォルトの名無しさん mailto:sage [2015/10/10(土) 21:39:40.60 ID:wZWPBuKi.net]
- どうしてキューにいったん入れる必要性があるんですか?
普通に update1(); update2(); と並べて書いておけば、実行順は保障されますよ しかもソースコードを見るだけで呼び出し順番が明確に分るし
- 284 名前:デフォルトの名無しさん mailto:sage [2015/10/10(土) 22:06:18.91 ID:S/u4hkZt.net]
- 新しいupdate増えるたびに複数人で同じソース触ることになったり
時間計測などデバッグ機能もそれぞれに入れなきゃいけなかったり…
- 285 名前:デフォルトの名無しさん mailto:sage [2015/10/10(土) 22:10:02.16 ID:wZWPBuKi.net]
- >新しいupdate増えるたびに複数人で同じソース触ることになったり
それが管理というものでは?
- 286 名前:デフォルトの名無しさん mailto:sage [2015/10/10(土) 22:12:10.77 ID:S/u4hkZt.net]
- 管理が面倒になるって話ね
今はその面倒な部分はソフトがやってくれるけど、それでも積極的に同時編集しようとは思わないけど
- 287 名前:デフォルトの名無しさん mailto:sage [2015/10/10(土) 23:22:41.43 ID:/CcLyhWy.net]
- マルチスレッド
- 288 名前:デフォルトの名無しさん mailto:sage [2015/10/11(日) 10:59:02.63 ID:VUX4VOf2.net]
- for文を並列化すれば解決
- 289 名前:デフォルトの名無しさん mailto:sage [2015/10/12(月) 11:49:33.37 ID:j9MpNgGM.net]
- ある場所に1秒かけて移動してから
攻撃モーション みたいなのがスマートに出来ない。 あとそんな事のためにスレッド使うとか論外 競合を起こさないようにするのに神経使うし しょうもない事にスレッドを使うと性能が劣化する
- 290 名前:デフォルトの名無しさん mailto:sage [2015/10/12(月) 11:59:37.70 ID:DSHcQooM.net]
- だれもそんな物のためにスレッドを使うと主張している人は居ないと思うが
脳内で喧嘩しているの?
- 291 名前:デフォルトの名無しさん mailto:sage [2015/10/12(月) 12:17:01.78 ID:j9MpNgGM.net]
- >>285
>>282
- 292 名前:デフォルトの名無しさん mailto:sage [2015/10/12(月) 12:51:35.74 ID:T+LPxSwN.net]
- >>284
それを今どうやっているのかを説明した方がよいと思います。 そうすれば、それよりスマートさで劣ると思われる方法しか思いつかない人が、 自身の案を披露して恥をかくことも無いでしょうし、議論がよりスマートになります。
- 293 名前:デフォルトの名無しさん mailto:sage [2015/10/12(月) 13:36:54.11 ID:MLQvCbgC.net]
- 別にコルーチンの代わりにスレッド使ったって構わないよ。キャンセルのことを考えなければきれいに書けるよ。
性能?そんなことすらスマートにできない低能が気にすることじゃねーよ。 競合?そのレベルの奴はシングルスレッドのタスク間だって競合おこしてるだろ。 つーかそんなのスクリプトでやる範囲であって、スマートもクソもあるか。
- 294 名前:デフォルトの名無しさん mailto:sage [2015/10/12(月) 16:29:54.73 ID:5mz5YVLA.net]
- ほら、こういうのが湧くだろ。
- 295 名前:デフォルトの名無しさん mailto:sage [2015/10/12(月) 19:33:08.84 ID:DSHcQooM.net]
- >>286
別にマルチスレッドを君が>>284で書いているような事に使うとは誰も言ってないんじゃないの? コルーチンの代わりにマルチスレッドを使うとは誰も言ってないんじゃないの? 君の妄想なんじゃないの?
- 296 名前:デフォルトの名無しさん [2015/10/13(火) 01:22:25.52 ID:oWNbGZiL.net]
- C++の例外を使わない理由って何ですか?
- 297 名前:デフォルトの名無しさん mailto:sage [2015/10/13(火) 12:13:43.33 ID:rBIejIYx.net]
- >>291
急に別の場所に飛ぶから new等で確保したリソースの解放漏れがよく起きるとか Android NDKでは例外サポートがあると少しサイズが増える
- 298 名前:291 mailto:sage [2015/10/14(水) 13:33:01.39 ID:50q6rhZA.net]
- >>292
ありがとうございます。
- 299 名前:デフォルトの名無しさん mailto:sage [2015/10/14(水) 19:30:52.63 ID:6Kq6UyDK.net]
- >>290
> 別にマルチスレッドを君が>>284で書いているような事に使うとは誰も言ってないんじゃないの? 大丈夫か? 言ってないから、使ってもいいと書いたんだろ? > コルーチンの代わりにマルチスレッドを使うとは誰も言ってないんじゃないの? 大丈夫か? 使うと思ってたら使ってもいいとか書かないだろ? > 君の妄想なんじゃないの? それで君の精神の健康が保てるならそれでいいよ。 一秒かけて移動してから攻撃モーションだろ? コルーチンならきれいに書けるだろ。284もそれはわかっててスレッドは論外、って言ったんだろ。 普通はキューやスクリプトでやるところだが、スレッドをコルーチンのように動作するように実装してもいい。 のどこが妄想なのかね。 >>291 例外を使わない人が多いのは、業界的にまだノウハウが十分にないから。 現状では、例外安全なプログラムを隅々まで徹底する面倒が、メリットを上回らない。 >292 のリソース漏れは例外安全でないプログラムの具体例。 C++の例外は、レギュラーケースとイレギュラーケースをそれぞれ明示できるし、それぞれをまとめて書くことができる。 素晴らしい機能だが、大域脱出以外の用途はまだこなれているとは言い難い。 サイズが増えるのはその通り。 ついでに、try 節の出入りでジャンプテーブルのメンテで少し処理速度を食う。 今時そんなのを気にする環境は少ないとは思うけど。
- 300 名前:デフォルトの名無しさん mailto:sage [2015/10/14(水) 20:32:14.16 ID:oRHV6ndY.net]
- だから、誰もマルチスレッドをコルーチンの代わりに使うとは言ってないんじゃないの?
>>282は単に「マルチスレッド」ってつぶやいているだけじゃないですか どうして急に>>284みたいな話が出てくるの?君の勝手な妄想じゃないの? たとえば、 コルーチンは言ってしまえばスタックとレジスタを退避したものに過ぎないので コルーチン自体をどのスレッドで実行するかは、呼び出し側の自由だ だからコルーチンを4つ位の複数のスレッドで、入れ替わり立ち代り並列実行する事は可能 あくまで例えばの話だけど、その意味で「マルチスレッド」と書き込まれていたのだとしたら 別にコルーチンとマルチスレッドは競合するわけでもないし >>284はファビョってるだけってことになる それともコルーチンとか全く関係なく、単にタスクをマルチスレッドで並列実行したいってだけの話かもしれないし、 その可能性が高いわけだが、その場合も >>284は ファビョってるだけってことになる >あとそんな事のためにスレッド使うとか論外 って書いてるけど、「そんな事」は君の妄想でしかなく、元のレスには何も書かれていない
- 301 名前:デフォルトの名無しさん mailto:sage [2015/10/14(水) 20:49:16.61 ID:oRHV6ndY.net]
- 単に「マルチスレッド」とだけボソッと書き込まれただけなのに(>>282)
それに対する返しが>>284っておかしいだろ >そんな事のためにスレッド使うとか論外 と書かれているが、「そんな事」を勝手に想定して決め付けているが 元のスレはあくまで>>282で、何に使うとも書かれてないのに 勝手に何に使うか決め付けて、「そんなことのために使うとか論外」とか言うのって 意味分からないんだわ >>284にはアンカーが無いから、どの発言に対する返答なのか分からなかったから 「誰もそんなことかいてないのでは?」と返したら>>286が帰ってきたので それで>>284は>>282に対する返答だということが判明したので >>290を返したわけだが
- 302 名前:デフォルトの名無しさん [2015/10/14(水) 23:17:43.54 ID:kP0Tau7M.net]
- 向こうのサーバーにデータが保存されるスマホゲームでも、
ユーザー名とかパスワードとか設定する画面がなくて、 インストールするだけでいきなり始められるやつが多いじゃないですか。 あれってどうやってユーザーを識別してるのでしょうか。 初回起動時に自動でセッションIDみたいなものを生成して、以後はそれを使ってサーバーにアクセスしてるのでしょうか。 もし主流となっているやり方を知ってる方がおられたらご教示ください。
- 303 名前:Office & Gamers ◆G144Hzgh2.0e mailto:アハ♪” uh huh [2015/10/15(木) 04:38:35.16 ID:Jccv1z2n.net]
- 電話番号読み出して固有IDにしてるんじゃないかなw
- 304 名前:デフォルトの名無しさん [2015/10/15(木) 05:57:12.26 ID:mFol4PYI.net]
- iOS/Androidで端末を識別するIDまとめ
iridge.jp/blog/201404/4836/ iOSでの端末固有識別子の話。 quesera2.hatenablog.jp/entry/2014/03/03/001232
- 305 名前:297 mailto:sage [2015/10/15(木) 12:43:40.47 ID:M0AzxYXX.net]
- >>299
ありがとうございます。 貼っていただいたリンクを読んでみたところ、IDFVが一番良いように見えました。 ただ、異なるベンダー間で同じ端末かどうかを識別する前提で書かれていましたので、 特にそういった目的を持たない場合は初回起動時に自分でIDを生成してもよいのかなと思いました。 ありがとうございました。
- 306 名前:デフォルトの名無しさん mailto:sage [2015/10/15(木) 19:45:25.53 ID:J9V5fg8t.net]
- >278
そこじゃねえ 順序が必要な"特殊なタスク"の話な 生成した後のタスクに対してキューを入れるって事だ そのキューっていうのはメッセージプロシージャのイベントドリブンのメッセージキューと同じ だから生成順序は気にせずに生成して、的確なタイミングで処理を実行するまでは待機モード
- 307 名前:デフォルトの名無しさん mailto:sage [2015/10/15(木) 19:49:57.61 ID:J9V5fg8t.net]
- function taskA() {
switch $MESSAGE[:taskA].shift() { case :メッセージ1 then function1() case :メッセージ2 then function2() case :メッセージ3 then function3() else default() } }
- 308 名前:デフォルトの名無しさん mailto:sage [2015/10/15(木) 20:13:59.75 ID:whFEoHyO.net]
- >だから生成順序は気にせずに生成して、的確なタイミングで処理を実行するまでは待機モード
auto t = new task(); //生成順は気にせず作成 //的確なタイミングで処理を実行するまでは待機モード t->func1(); //的確なタイミング、的確な順番で実行 t->func2(); t->func3(); これじゃダメなんですか?
- 309 名前:デフォルトの名無しさん mailto:sage [2015/10/16(金) 02:05:45.13 ID:h7keHbl8.net]
- >>303
それやるならt1->func(), t2->…じゃね?
- 310 名前:Office & Gamers ◆G144Hzgh2.0e mailto:アハ♪” uh huh [2015/10/16(金) 02:08:16.77 ID:5hhImPo+.net]
- つ _beginthread(proc1, 0, (void*)0);
つ _beginthread(proc2, 0, (void*)0); つ _beginthread(proc3, 0, (void*)0);
- 311 名前:デフォルトの名無しさん mailto:sage [2015/10/16(金) 13:30:47.26 ID:CYEljn+R.net]
- >>303
理解力の欠片もねーな 順序が必要になるのはタスク同士が相互に干渉し合う場合、 複数のタスクでメソッドで処理順序が行きかうようなコード 処理順序のイメージは↓これ taskA = new Task taskB = new Task taskA->func1() taskB->func1() taskA->func2() taskB->func2() ただ実際のソースコードはどうなってるかていうと↓ function taskA { ... self.func1() ... self.func2() } function taskB { ... self.func1() ... self.func2() } taskAから"taskB->func1"なんて呼び出さないだろ だからtaskAからtaskBのfunctionを呼び出すタイミングを知らせる為に>>302のキューが必要 これで理解できなかったらプログラミングやめて農家でもやってろ
- 312 名前:デフォルトの名無しさん [2015/10/16(金) 15:14:26.00 ID:IFBmV22h.net]
- 農家なめんな
合理的に設計されたプログラム言語と違って 自然相手だから難しい ピログラミングすらできない奴に農家は無理
- 313 名前:デフォルトの名無しさん mailto:sage [2015/10/16(金) 15:42:38.34 ID:l04muiBk.net]
- ____
/ \ /\ キリッ . / (ー) (ー)\ <「『ピログラミング』すらできない奴に農家は無理」 / ⌒(__人__)⌒ \ | |r┬-| | \ `ー’´ / ノ \ /´ ヽ | l \ ヽ -一””””~~``’ー?、 -一”””’ー-、. ヽ ____(⌒)(⌒)⌒) ) (⌒_(⌒)⌒)⌒)) ____ /_ノ ヽ、_\ ミ ミ ミ o゚((●)) ((●))゚o ミ ミ ミ <だっておwww /⌒)⌒)⌒. ::::::⌒(__人__)⌒:::\ /⌒)⌒)⌒) | / / / |r┬-| | (⌒)/ / / // | :::::::::::(⌒) | | | / ゝ :::::::::::/ | ノ | | | \ / ) / ヽ / `ー’´ ヽ / / | | l||l 从人 l||l l||l 从人 l||l バンバン ヽ -一””””~~``’ー?、 -一”””’ー-、 ヽ ____(⌒)(⌒)⌒) ) (⌒_(⌒)⌒)⌒))
- 314 名前:デフォルトの名無しさん mailto:sage [2015/10/16(金) 16:07:57.94 ID:4XmsRPEG.net]
- pmokyかよ
- 315 名前:デフォルトの名無しさん mailto:sage [2015/10/16(金) 17:27:56.84 ID:TDfNRPC3.net]
- >>306
>処理順序のイメージは↓これ >taskA = new Task >taskB = new Task >taskA->func1() >taskB->func1() >taskA->func2() >taskB->func2() 処理順のイメージと言っていますが、セミコロンがないことを除けば、これは実際に
- 316 名前:ョくC++のコードですね
イメージ通りにコードが記述できるのであれば、何よりのことで、それでよいじゃないですか なにより処理の流れが明確で、誰が読んでも何がどの順に処理されるか、誤解しようの無い素晴らしいコードです キューなんかなくても貴方は可読性の高い素晴らしいコードを今まさに書けたということです 他人に説明することをへて、自分自身の考えが整理され、長い思考の迷路を、やっと脱出できたわけです おめでとう! [] - [ここ壊れてます]
- 317 名前:デフォルトの名無しさん mailto:sage [2015/10/16(金) 17:32:08.38 ID:TDfNRPC3.net]
- キューに突っ込んで遅延実行なぞ、やろうと思えば誰でも出来る、下の下
出来てもあえてしないのがオトナというもの 誰も得しないから
- 318 名前:デフォルトの名無しさん mailto:sage [2015/10/16(金) 17:41:42.73 ID:V6wsfDsv.net]
- ずっと読んでるけど何をもめているのかイマイチわからん
俺はプログラマ向いてないのかね
- 319 名前:デフォルトの名無しさん mailto:sage [2015/10/16(金) 19:07:16.78 ID:zQFx3mzu.net]
- >>295
> だから、誰もマルチスレッドをコルーチンの代わりに使うとは言ってないんじゃないの? だから誰も言ってねえって 294 で書いただろ。 >>296 何で 286 と 俺(288) が同じだと思ったんだ? 289 は正しく理解しているようだが。 つーか、ちょっと前に FF VII の ATB はどうやるのかとか言ってた質問の仕方を知らない礼儀知らずの素人が、妄想のタスクシステムを dis ったり 284 を書いたりしてるんじゃねーの?
- 320 名前:デフォルトの名無しさん mailto:sage [2015/10/16(金) 20:05:20.00 ID:TDfNRPC3.net]
- お前こそ大丈夫か?
>何で >>286 と 俺(>>288) が同じだと思ったんだ? 289 は正しく理解しているようだが。 そりゃおまえ、俺が>>286当てに>>290(俺 ちゃんと>>286へのアンカー付き)を書き込んだら お前が>>294で>>290(俺)へのアンカー付きで返答したからだろ 逆にお前が>>286じゃなくて>>288なら、俺の>>286宛の返信(>>290)に どうしてお前(>>294)は俺へのアンカー付きで、内容まで引用して、返信してきたんだ? 俺はお前に話しかけてないことになるし、お前を否定も何もしていないことになるのに 何で急に絡んできたんだ?意味不明なんだが 真性アスペか?
- 321 名前:デフォルトの名無しさん mailto:sage [2015/10/16(金) 20:38:26.24 ID:V6wsfDsv.net]
- お前らプログラマだろ?
もう少し体裁整えて読みやすく書き込めよ
- 322 名前:デフォルトの名無しさん mailto:sage [2015/10/16(金) 20:41:12.59 ID:wirZWZnZ.net]
- た、体裁・・・
- 323 名前:デフォルトの名無しさん mailto:sage [2015/10/16(金) 20:44:34.19 ID:TDfNRPC3.net]
- 流れを書くと
・「マルチスレッド」とだけ書き込まれる(>>282) ・意味不明の>>284 ( >そんなことの事のためにスレッド使うとか論外 ) が書き込まれる 「そんな事」を勝手に自分で決め付けて、勝手に批判しているのが意味不明なので ・俺が>>285を書き込む ( >だれもそんな物のためにスレッドを使うと主張している人は居ないと思うが・・・ ) ・すると意味不明の>>284から>>286が返される ・やっぱり意味不明なので、意味不明さん(>>286)宛てに、俺が>>290を書き込む 俺の一貫しているところは、>>284(意味不明さん)の「そんな事のために」は何なんだという事 誰も言ってないのに、自分で「そんな事」を勝手に想定して、勝手に否定しているのが意味不明だということ 問題は>>294で、>>294は>>284(意味不明さん)とは全くの別人だという しかし>>294の内容を読んでもらえばわかるが、他人宛の俺の返信を自分宛と勘違いしたかのような内容になっている 彼が>>294で言う「言ってないから、使ってもいいと書いたんだろ?」の「書いた」は自身の書いた>>288 の事らしいが、 俺は彼が>>288を書き込んだ事について、ノーリアクションだったのに、まるで俺が彼が>>288を書き込んだ事を否定したかのように、 「言ってないから、使ってもいいと書いたんだろ?」といちゃもんを付けられても会話が繋がってない以前の問題
- 324 名前:デフォルトの名無しさん mailto:sage [2015/10/16(金) 20:46:14.03 ID:V6wsfDsv.net]
- 単なるプログラマなら問題ないのかもしれん
が、ゲームという範疇からして「魅せる」力が足りなさそうなのが 文面から滲み出ている・・・
- 325 名前:デフォルトの名無しさん mailto:sage [2015/10/16(金) 20:46:41.73 ID:vRj9Qm+Y.net]
- 流れはまったく追っていないが
> ・「マルチスレッド」とだけ書き込まれる(>>282) > ・意味不明の>>284 ( >そんなことの事のためにスレッド使うとか論外 ) が書き込まれる > 「そんな事」を勝手に自分で決め付けて、勝手に批判しているのが意味不明 この悲しい暴走列車的展開はインターネッツ初期から いろんな掲示板で発生している悲劇でもあった スタート地点から不毛っていう悲しみ
- 326 名前:デフォルトの名無しさん mailto:sage [2015/10/16(金) 20:50:50.23 ID:TDfNRPC3.net]
- 三行で書くと、俺が他人宛に返信した書き込みを、まるで自分への返信であったかのようにファビョって書き込んだ奴がいたということ>>294
彼は、「言ってないから、使ってもいいと書いたんだろ?」と自身が書き込んだ理由を何故か俺宛にアピールしているが、 俺は彼の発言>>288にたいして、何も言ってない
- 327 名前:デフォルトの名無しさん mailto:sage [2015/10/16(金) 21:04:58.54 ID:TDfNRPC3.net]
- >>319
前半が良く有る流れなのは分かるが、流れがややこしくなったのは>>294のせい >>294は>>288らしいのだが、俺は>>288について何も言ってないのに、要するに彼を相手にしていないのに いきなり他の人宛への俺の書き込みに対して、まるで自分の宛てであったかのように返信してきた アンカーを打っていなければ俺のミスだが、ちゃんとアンカーを打っていたので誰宛への書き込みだったかは分かったはず しかも終いには、「何で 286 と 俺(288) が同じだと思ったんだ?」と煽ってくる始末 自分が俺の>>286宛への返信に、さも自分宛の返信であったかのように返答してきておいて、この返し
- 328 名前:デフォルトの名無しさん mailto:sage [2015/10/16(金) 21:08:18.59 ID:+G3m5iUJ.net]
- >>310
君がC++しか出来ないチンパンっぽいから わざわざC++チンパンジーにも理解可能なC++ライクなコードにしてやったんだよ 君はもうプログラミングやめたほうが良いね センスないね
- 329 名前:デフォルトの名無しさん mailto:sage [2015/10/16(金) 21:21:02.47 ID:+G3m5iUJ.net]
- 大体こういう話題って完成してる奴にとっては早々触れるような根幹設計じゃないのに
未だに悩んでる奴ってゲーム1個も作った事ない学生か何か 一般的なオブジェクト指向やってて最終的に行きつく先はメッセージプロシージャなんだから 黙って作っとけよチノパン
- 330 名前:デフォルトの名無しさん mailto:sage [2015/10/16(金) 22:40:22.90 ID:TDfNRPC3.net]
- それで、どうしてキューのようなものが必要なんですか?
自身が書いているように >処理順序のイメージは↓これ >taskA = new Task >taskB = new Task >taskA->func1() >taskB->func1() >taskA->func2() >taskB->func2() これで良いのでは? 誰が読んでも、とても読みやすいし、まさに理想じゃないですか、ゴールと言えます ゴールが見えたわけですから、この状態をなるべく維持しつつ、または維持できるように、全体の設計をすればよいのでは? 仮に一部の処理をキューで動的に管理しなければならなくなったのなら、 まぁそういうことも処理内容によっては有るでしょうが、理想の状態から遠ざかってしまうので残念で仕方ないですし 2chで嬉しそうに書き込むことではないと思うのですが・・・
- 331 名前:324 mailto:sage [2015/10/17(土) 00:32:37.34 ID:XvNYZLvx.net]
- 当然、纏めるべく所は纏めたりしますし、
多態やコンテナやループと言った武器も使いますよ しかし、基本は>>324のように処理順が明確で分かりやすいコードが 原点であり終着点と言うことです 手続き型言語は元々そういう風に作られているわけです その良さをなるべく損なわないように設計すべきで、腕の見せ所ですね
|

|