- 1 名前:名前は開発中のものです。 mailto:sage [2009/02/19(木) 02:21:01 ID:k4ODtuXP]
- タスクシステムについての議論、相談、質問、雑談などのスレです
part4 pc11.2ch.net/test/read.cgi/gamedev/1233459490/ part3 pc11.2ch.net/test/read.cgi/gamedev/1226199100/ part2 pc11.2ch.net/test/read.cgi/gamedev/1196711513/ part1 pc11.2ch.net/test/read.cgi/gamedev/1173708588/ ・タスクと呼ばれる実装は、非常に多岐に渡ります 古典タスクシステムについての話題は「>>2」と明示してください そうでない場合はカスタム版タスクであることを明示してください ・人を憎んで言語を憎まず
- 461 名前:名前は開発中のものです。 mailto:sage [2009/03/02(月) 19:57:05 ID:VFyVP2iT]
- まだごった煮言ってるのかw
なにも進歩ないなw
- 462 名前:名前は開発中のものです。 mailto:sage [2009/03/02(月) 20:14:04 ID:iymFeNpw]
- キャストするクラスのヘッダーだけでいいだろ?
全部は必要なくね
- 463 名前:ID:EEKBitmg mailto:sage [2009/03/02(月) 20:44:58 ID:0jBbfc+e]
- >>444-445
C型なのかな。肝炎みたいだね。「おまえの場合は脳炎だろ」とか言われそうだけど 助教授に言われたことがある 『例えばお前が作ってるゲームなんてものは技術的には枯れた要素技術の集合体であり CASEツールで機能分析すれば、その大半は汎用のコンポーネントを結合したものとして 表現される。』と 『開発工程全体を見たとき、お前はおそらく遊び・面白さの部分を煮詰める反復作業に 時間の多くを費やしているのだろう。ならば、ワークフロー・データフローの設計も そこを優先するだろ常識的に考えて。与えられてる状況(道具、人、時間、etc)にあわせて 構造化設計すれば、最終的な結論はH**は神言語となる。わかったな?』 私は心を打たれた。この人はC型のようなE型のようなH型だ 助教授はいわゆるベーマガ世代というものらしい。本人に言わせれば『PIOとかRAMとかテクノ(何とか)を 知らないようなガキにベーマガ世代とか言われるとイラっと来る』ということらしいけど、まぁとにかく そういう世代らしい 助教授にタスクシステム(>>2)のページを見せた。反応は「組み込みシステムを劣化猿真似してるのか」 みたいなかなり淡白なものだった 『ワークRAMが少ないゼッパチマシンでこんな贅沢な組み方してたのか?』 『70年代にこれやってたって本当か?』『メガドラとか16ビットのアーケードゲームの話じゃないのか?』 と聞き返された。そんなことは厨の俺が知るはずもないし答えられるはずもなかったから 「だってこの人(LogicianLordの人)がギャラクシアンはこうだって言ってるからそうなんじゃないすか><」 と知能障害・思考停止な返事をしたら『ふーん。あっそう』と言われた むかつく。誰か教えて
- 464 名前:ID:EEKBitmg mailto:sage [2009/03/02(月) 21:27:36 ID:0jBbfc+e]
- 『当時は毎月、目を皿のようにしてマイコン雑誌を読み漁ったが"タスクシステム"なんて言葉は見た記憶無いな』
『俺にとっては雲の上のプロプライエタリな世界だったから。そういうプロの世界の隠語なのかな。』 『しかし30年以上経過して陳腐化したからって吹き出物みたいに今更出てきても仕方ないだろこんなもの』 『PCでさえベクトルプロセッサ化したビデオチップにマルチコア化したCPUが普及した現代においてこんな一本道の 逐次処理コードを使ってたんじゃハードは遊び放題だな。お前らのゲームボーイ(←DSのことらしい)で使ってるテクか』 『ステートマシンの逐次処理用の優先度付きキューを手作りしてたのか。今ならboostか次期C++標準のライブラリ から出来合えのコンテナでも引っ張ってくればいいんじゃないの。あと、機能分析すればこの実装になる必然性はない』 『型システムを否定している。コンパイラによる最適化を阻害してる。自作ジャンプテーブルで条件分岐は高速化される という先人のチョイテク・豆知識を天下り式に真似ているのではないか。それは太古の簡素なCPUアーキテクチャに 依存した公式に過ぎない。定理ではない』 『くだらない話をふってないで、お前は早く課題レポートを提出しなさい』 うぜぇオヤジだ
- 465 名前:名前は開発中のものです。 mailto:sage [2009/03/02(月) 23:57:02 ID:j9iR0+6m]
- >>464
> マイコン雑誌 この辺の単語の使い方に、世代を感じるなぁ。
- 466 名前:名前は開発中のものです。 mailto:sage [2009/03/03(火) 00:35:53 ID:RAMjL7VZ]
- テクポリは最初技術系の雑誌だったんだね
アダルトゲーム雑誌になってからしか知らないや
- 467 名前:名前は開発中のものです。 mailto:sage [2009/03/03(火) 00:54:38 ID:nTxu8UVE]
- >>463-464
何…?このポエム 今もタスク進化系が使われ続けてる現実を前にして 現実逃避してるのかな?
- 468 名前:名前は開発中のものです。 mailto:sage [2009/03/03(火) 01:06:03 ID:gnPoJpgi]
- ID:N5eJa8sNはタスクシステムを使うとタスクシステムに全部のheaderをincludeしなければ
ならなくなるとか言っていた例の基地外だろ。 こんな低脳がアンチタスカーだから、アンチはみんな頭がおかしいと思われるんだ。 こんな奴、プログラマですらないので、この板から出てけよ。
- 469 名前:名前は開発中のものです。 mailto:sage [2009/03/03(火) 01:43:30 ID:e/qFL/0J]
- >>467
シーングラフはタスクシステムの外国版(笑) タスクシステム改(笑) タスク進化系(笑) 出るわ出るわ。怪しげな僕んちのソフトウェアアーキテクチャ発展史 萎びた僻地で密教みたいにひっそりやってきた「俺んちのベストプラクティス」 そいつがお前にとってのプライスレスなのはわかるけどな 何の具体的な情報も開示せずに世間に認知してもらおうなんて考えちゃダメ 世の中そんなに甘くない 公にされず標準化もされないド田舎・ローカルのソフトウェアアーキテクチャや ベストプラクティスと自認している者は、何の資料も出せない状態で世間の前で 顔真っ赤にして反論したりしない。黙ってる。そこを分かれ。出てくんな。みっともねー 幾つだよお前。誰だよ 反論するならお前の言うタスク進化系って奴が世間に認知される ソフトウェアアーキテクチャ、ベストプラクティスとなるよう、きちんと文書にして 発表すべきだ 現在、世間の前に出てるタスクシステムに関する文献の中で唯一 書いた人間の出自が現場出身であることが垣間見えるのは秀和の 逆引きゲームプログラミングだけ。これを超えるものをお前が書けばいい
- 470 名前:名前は開発中のものです。 mailto:sage [2009/03/03(火) 01:50:47 ID:e/qFL/0J]
- >>468
あー、やっぱあいつだよな ヘッダーがどうのとか言い出した瞬間にイカ臭かったもんな
- 471 名前:名前は開発中のものです。 mailto:sage [2009/03/03(火) 02:03:06 ID:nTxu8UVE]
- >>469
>ベストプラクティスと自認している者は、何の資料も出せない状態で世間の前で アンチじゃなくてもあんな原始的な仕組みをベストプラクティスと自認している人はいないと思うぞ。 あぁ、アンチって実はタスクシステムに過度に期待してる人たちなのかもね。 「こんな自分でもタスクシステムが理解できたらゲームが作れる…」って。 だから資料出せ、教えろ、説明しろってうるさいのか。
- 472 名前:名前は開発中のものです。 mailto:sage [2009/03/03(火) 02:09:19 ID:e/qFL/0J]
- >あぁ、アンチって実はタスクシステムに過度に期待してる人たちなのかもね。
>「こんな自分でもタスクシステムが理解できたらゲームが作れる…」って。 >だから資料出せ、教えろ、説明しろってうるさいのか。 今度はアンチは実は信者論か。がんばるねー アクロバティックな発想に翻弄されちゃうねー 生ゴミの臭いを好き好んでかぎ回るのは信者なんだけど アンチは臭いものは臭いんだからとっとと捨てればー? とアドバイスしてあげてる分まだ常識があるねー
- 473 名前:名前は開発中のものです。 mailto:sage [2009/03/03(火) 02:22:24 ID:e/qFL/0J]
- ま、タスカーは大人しくサンドバッグにされてろってこった
今更開陳したところで世間に八つ裂きにされるのが目に見えてるからな 俺は絶対に晒さない。何年も前に廃棄したゴミアーキテクチャだから とっくに葬り去ってお墓に入れたものをわざわざ引っ張り出して晒す なんてマゾっけたっぷりの趣味は無い
- 474 名前:名前は開発中のものです。 mailto:sage [2009/03/03(火) 02:37:34 ID:gnPoJpgi]
- ポエマーもいらねーから出てってな
- 475 名前:名前は開発中のものです。 mailto:sage [2009/03/03(火) 02:42:58 ID:e/qFL/0J]
- DSLポエマーと間違われるとは光栄だねー
タスクシステムを叩く材料が不足したら呼んでね。補給してあげるよ アンチ応援してるよ。あーねみー。ばいばーい
- 476 名前:名前は開発中のものです。 mailto:sage [2009/03/03(火) 02:53:26 ID:eCcH4IzT]
- 顔まっかなのはお前だろうに
- 477 名前:名前は開発中のものです。 mailto:sage [2009/03/03(火) 02:57:23 ID:eCcH4IzT]
- >俺は絶対に晒さない。何年も前に廃棄したゴミアーキテクチャだから
>とっくに葬り去ってお墓に入れたものをわざわざ引っ張り出して晒す >なんてマゾっけたっぷりの趣味は無い 要するに、お前は過去の自分と戦ってるのか? お前の暗い過去を皆に押し付けないで欲しい。
- 478 名前:名前は開発中のものです。 [2009/03/03(火) 07:34:27 ID:NIkO1+LI]
- ヘッダー全部インクルードしないと必要なときに必要なものが呼び出せないから
タスクシステム使ってるなら総合ヘッダーに全部インクルードしてあると思うよ 仮に必要なものだけだとしても関連をもったものは全部インクルードしてやる必要があるから この構造で作ったら切り離すのは容易じゃないよ
- 479 名前:名前は開発中のものです。 [2009/03/03(火) 07:50:27 ID:NIkO1+LI]
- それと関連をすべてタスクにするとか嘘ついてるけど
ポインタの保持を関連タスクに強制するうえ パラが一つでも必要になったらタスクを新しく作らなければならない 折角、ごった煮にした意味がまるでないけどそれでいいの? だんだんタスクなんて作らないほうがいいって結論になりそうで俺は満足だけどね
- 480 名前:名前は開発中のものです。 mailto:sage [2009/03/03(火) 08:19:58 ID:gnPoJpgi]
- >>478
お前が頭がおかしくて、プログラムの組めないド素人なのはよくわかったから もうこの板に来んな
- 481 名前:名前は開発中のものです。 mailto:sage [2009/03/03(火) 08:53:25 ID:HSt7mZci]
- >>478
んなこたない アンチな俺でも同意できる箇所が見当たらない
- 482 名前:名前は開発中のものです。 mailto:sage [2009/03/03(火) 10:09:41 ID:T2e1Wx7e]
- 一番要らない子なのはウンコちゃんだろう。
全レス内容無しってのが凄い。
- 483 名前:名前は開発中のものです。 [2009/03/03(火) 12:43:55 ID:NIkO1+LI]
- じゃヘッダー無しでどうやってキャストしてんだよ
まあ、これは無理でしょ タスク信者が必要な分だけインクルードしてるなんて考えられないから ごった煮を表現するために総合ヘッダー絶対あるだろ だからタスク信者の書くソースは分離できない さらにタスク信者は引数使えないから総合ヘッダーにグローバル変数の塊もあるだろうし 奴らのソースはカプセル化なんて不可能と言っていい テンプレートは使いたがるくせにオブジェクト指向は欠片もわかってない
- 484 名前:名前は開発中のものです。 mailto:sage [2009/03/03(火) 13:04:10 ID:gnPoJpgi]
- >>483
> ごった煮を表現するために総合ヘッダー絶対あるだろ ない。お前はOOPの基本すらわかっていない。もう死んで。
- 485 名前:名前は開発中のものです。 mailto:sage [2009/03/03(火) 13:09:30 ID:fc1Nudsp]
- >>483
なんでそこでテンプレートがでてくるのか理解できない 総合ヘッダにグローバル変数ときたら次はマクロだろ
- 486 名前:名前は開発中のものです。 mailto:sage [2009/03/03(火) 13:11:42 ID:HSt7mZci]
- >>484
OOPは関係ないだろ…
- 487 名前:名前は開発中のものです。 mailto:sage [2009/03/03(火) 13:11:56 ID:UVBLimNu]
- >>483
>総合ヘッダー その発想は無かったwwwwwwwww お前のコーディングすごいなwwwwwwwwwww
- 488 名前:名前は開発中のものです。 mailto:sage [2009/03/03(火) 13:14:20 ID:HSt7mZci]
- >>484
携帯からだったから483よく読んでなかったぜ すまんこ >>483 根拠の無い話ばかり並べても叩かれるだけ
- 489 名前:名前は開発中のものです。 [2009/03/03(火) 18:22:34 ID:NIkO1+LI]
- いいやあるね
少なくともごった煮をデータベースとか言ってた馬鹿のソースには確実にあるね そもそもそいつは制限や型を言語の進化の過程でできたものという認識がまったくなかった タスク信者の大半がこんな奴ら 関連をタスクにするなんて言ってるけど 関連クラスとどうやってやりとりする気なんだよ グローバル変数かポインタの保持くらいしかないだろ また、無駄に問題が増える(笑) 使わないって選択肢は選べないのかね
- 490 名前:名前は開発中のものです。 [2009/03/03(火) 18:25:01 ID:NIkO1+LI]
- カプセル化もわからないから自機のクラスに弾の処理書いちゃうんだよ
お前等馬鹿は
- 491 名前:名前は開発中のものです。 [2009/03/03(火) 18:29:59 ID:UVBLimNu]
- >>489
>>490 レスを二つにしてカプセル化したつもりですかwwww
- 492 名前:名前は開発中のものです。 mailto:sage [2009/03/03(火) 18:34:43 ID:gnPoJpgi]
- >>489
こんな馬鹿、久しぶりに見た。 悪いこと言わないから、OOPの基礎から勉強しなおしなよ。
- 493 名前:名前は開発中のものです。 [2009/03/03(火) 18:57:02 ID:NIkO1+LI]
- ムリムリ
タスク信者の組み方じゃ絶対分離なんて不可能 グローバルインスタンスホルダーが絶対にある
- 494 名前:名前は開発中のものです。 mailto:sage [2009/03/03(火) 19:09:12 ID:gnPoJpgi]
- >>493
仮想関数すら知らなさそうだな。本当、生きてて恥ずかしくないか?
- 495 名前:名前は開発中のものです。 [2009/03/03(火) 19:19:33 ID:NIkO1+LI]
- 仮想関数?
いまの話題と全く関係無いけど頭おかしいの? 弾クラスで自機クラス呼んだら自機クラスのヘッダーが必要になるんだぜ 基底クラスじゃ自機クラス呼べないんだぜ もしかしてしらなかった?
- 496 名前:名前は開発中のものです。 mailto:sage [2009/03/03(火) 19:22:49 ID:gnPoJpgi]
- >>495
> 弾クラスで自機クラス呼んだら自機クラスのヘッダーが必要になるんだぜ 呼ぶ必要なんか全くないんだが。ほんと、馬鹿だよね。
- 497 名前:名前は開発中のものです。 [2009/03/03(火) 19:27:56 ID:NIkO1+LI]
- でも、呼んでるんでしょ?
だからタスクシステムに固執してるんでしょ? 嘘はよくない(笑)
- 498 名前:名前は開発中のものです。 mailto:sage [2009/03/03(火) 19:31:36 ID:gnPoJpgi]
- >>497
本当、馬鹿すぎて泣ける。 ソース書いてみな。俺が添削してやるから。
- 499 名前:名前は開発中のものです。 [2009/03/03(火) 19:38:27 ID:NIkO1+LI]
- は?
俺はごった煮とかやってる馬鹿なタスク信者をぶん殴ってるところなんだよ 俺がなんのソースをだすんだよ 日本語大丈夫かよ(笑) ああ、頭悪いのか それじゃしょうがないな
- 500 名前:名前は開発中のものです。 mailto:sage [2009/03/03(火) 19:42:26 ID:gnPoJpgi]
- >>499
だからお前の糞タスクシステムのソースを出せと言ってるんだ。 全タスクのヘッダをincludeしているところを書き直してやる。
- 501 名前:名前は開発中のものです。 [2009/03/03(火) 19:58:25 ID:NIkO1+LI]
- は?
俺、タスクシステムなんて使わないんだけど? だいたいソース書きたきゃ自分で書けよ 仮想関数とか明らかにズレた話題だしてる格下のお前の相手なんかしなきゃいけないんだよ
- 502 名前:名前は開発中のものです。 mailto:sage [2009/03/03(火) 20:10:55 ID:gnPoJpgi]
- >>501
仮想関数わかってないのお前。 > タスク信者が必要な分だけインクルードしてるなんて考えられないから > ごった煮を表現するために総合ヘッダー絶対あるだろ 何度でも言うが、そんなものはないし、そんなことをする必要すらない。 まあ、このスレでわかってないのお前だけだろうから、俺はもう帰る。 基地外の相手してても仕方ないんでな。
- 503 名前:名前は開発中のものです。 mailto:sage [2009/03/03(火) 20:38:10 ID:fQh6ZhSe]
- 俺も基底クラスに仮想関数つくってそれ呼び出せば、いちいち総合ヘッダーなんて必要ないと思う。
- 504 名前:名前は開発中のものです。 [2009/03/03(火) 21:24:23 ID:NIkO1+LI]
- は?仮に基底がゲームオブジェクトだとして自機特有の処理はどうやって呼ぶんだよ
まさか全部ゲームオブジェクトにもたせんの?(笑) ああ、お前等のごった煮ってそこまで腐ってんだ
- 505 名前:名前は開発中のものです。 mailto:sage [2009/03/03(火) 21:37:48 ID:fQh6ZhSe]
- ああ凄いな。凄まじいなID:NIkO1+LIは。
とりあえず総合ヘッダー(笑)については、必要ないことを分かったかい? まずはそこからだ。
- 506 名前:名前は開発中のものです。 mailto:sage [2009/03/03(火) 21:39:53 ID:I1ftq204]
- ぬるぽ
- 507 名前:名前は開発中のものです。 mailto:sage [2009/03/03(火) 21:48:44 ID:gnPoJpgi]
- >>504
お前は、OOPの基本がわかってない。 腐ってんのはお前の頭。
- 508 名前:名前は開発中のものです。 mailto:sage [2009/03/03(火) 21:54:48 ID:gnPoJpgi]
- アンチタスカーって、なんで ID:NIkO1+LI みたいな OOPすらまともに使いこなせない
糞野郎ばっかりなんだろうかね・・
- 509 名前:名前は開発中のものです。 mailto:sage [2009/03/03(火) 21:57:27 ID:fQh6ZhSe]
- さすがのアンチタスカーの俺も擁護できん。
同じPG職なら陰口叩かれてもいいレベル。
- 510 名前:名前は開発中のものです。 mailto:sage [2009/03/03(火) 22:01:20 ID:I1ftq204]
- ID:NIkO1+LI
2009年ゲ製痛い(ノ∀`)ニュース第1位確定だな。 道理でアンチタスク厨とは、マトモな会話が成り立たないわけだ。
- 511 名前:名前は開発中のものです。 [2009/03/03(火) 22:11:53 ID:NIkO1+LI]
- は?
どうせ総合ヘッダーよんでんだろ そうじゃなきゃごった煮の意味ないもんな 悔しかったら総合ヘッダー無しでプログラム組んでみろよ データベースなんだろデータベース(笑)
- 512 名前:名前は開発中のものです。 mailto:sage [2009/03/03(火) 22:14:31 ID:fQh6ZhSe]
- アンチタスカーは、タスクシステムを使って知ったうえで、叩くべきだわ。
使ったこともないのに想像だけで総合ヘッダーや癒着云々と否定しているのは滑稽すぎるわ。
- 513 名前:名前は開発中のものです。 [2009/03/03(火) 22:16:25 ID:NIkO1+LI]
- ハイハイ、自機のソースから弾のソースを取り払ってから言ってね
- 514 名前:名前は開発中のものです。 mailto:sage [2009/03/03(火) 22:21:10 ID:AybnbhgS]
- 大昔ポケコンでシューティングを作ってた時は
敵ワークx16 弾ワークx16 とか固定長バッファを用意して、使用中フラグのビットマップで管理して動かしてた ワークエリア内にポインタを書いてリストや仮装関数を実現するには500kHz程度クロックのCPUには重荷だった 今はもうゲームとして動いてるならなんでもいいやって感じ
- 515 名前:名前は開発中のものです。 mailto:sage [2009/03/03(火) 22:41:02 ID:I1ftq204]
- >>511
総合ヘッダー(笑)って何だよ! 総合病院にでも診てもらってこい。 C++入門者未満のくせに、デカイ顔してノイズ垂れ流しやがって。 タスクシステムを語るには20年早いわ。
- 516 名前:名前は開発中のものです。 mailto:sage [2009/03/03(火) 23:02:20 ID:Gs0swA+H]
- main.h に extern 使いまくりで
どこからでも #include "main.h" をすればコンパイルは通る 分割コンパイルの意味の分かっていないバカのやることだよ ええ そうですよ 私の講師がそうだったように・・・
- 517 名前:名前は開発中のものです。 [2009/03/03(火) 23:13:28 ID:KhkzCgZ3]
- アンチタスカーだが俗に言うタスクシステムみたいな仕組みを
C++で実現している ソース晒そうか?
- 518 名前:名前は開発中のものです。 mailto:sage [2009/03/03(火) 23:28:24 ID:UfdUZfM/]
- j
- 519 名前:名前は開発中のものです。 mailto:sage [2009/03/03(火) 23:37:31 ID:UfdUZfM/]
- 仮想関数と総合ヘッダの話は
本元のクラスでなくて、抽象クラスを、includeするということ? /*総合.h もしくはそれの#include*/ class IHoge : public ITask { virtual SomeFunc() = 0; }; /*Hoge.cpp*/ class CHoge: public IHoge { SomeFunc(); }; ということ? 多分、総合ヘッダといった人は、IHogeを抜いて考えていたと思う もしくは、それでもIHogeを利用するところからIHogeが見えないといけないジャンという ことを言いたかったのかも タスクとマルチコアとかの関連っぽい記事を発見したので張っとく 理解はしていないので、賢い人解説して そして建設的な話をして www.gamasutra.com/view/feature/3941/sponsored_feature_designing_the_.php?page=1
- 520 名前:名前は開発中のものです。 mailto:sage [2009/03/03(火) 23:38:58 ID:UfdUZfM/]
- 戻り値書き忘れたけれど、突っ込まないで
- 521 名前:名前は開発中のものです。 mailto:sage [2009/03/03(火) 23:47:42 ID:YUVx5SHc]
- >>519
タスクと言う言葉を軽々しく使わないで下さい
- 522 名前:名前は開発中のものです。 [2009/03/03(火) 23:52:38 ID:NIkO1+LI]
- >>519
馬鹿はどっかいけよ
- 523 名前:ID:EEKBitmg mailto:sage [2009/03/04(水) 00:02:09 ID:vv/UkwCS]
- 厨房見参
総合ヘッダーさん(ID:NIkO1+LI)と引数さんは同じ人だと思うが、まぁそれはそれとして 総合ヘッダーさんはCodeZineの記事に出てくるようなタスクシステムのことを言ってるんだろ? CodeZineの記事を書いた人は俺と同い歳くらいの学生さんだと思う。叩くつもりはないが グチャグチャに絡み合ってる反面教師的なコードとしてはなかなか秀逸だなーと思う task.hに 自機、敵機、自機の弾、敵機の弾 狙い撃ち、爆発、自機の制御、敵の出現制御 ステージ制御、ライフバー管理、スコア管理、タイトル画面、ゲームオーバー画面 といったTaskEx派生クラス全ての宣言をまとめてぶちこんでいる で、例えば自機弾クラスのソースコードの中を見る。まず先頭でtask.hをインクルードしている 次に自機弾クラスの当たり判定メソッドの中を見る。こいつの中では int 敵数=GetCount(ENEMY); // 敵の数よこせ (循環リストを総舐め) for(int i=0;i<count;i++){ 敵クラス *task=(敵クラス*)GetTask(ENEMY , i ); //i番目の敵よこせ (ヒットするまで循環リストを舐める) … } という感じで 『"グローバルインスタンスホルダー"の検索結果 3 件中 1 - 3 件目』 に対して、『敵を全部くれ』と要求して、敵クラス型にキャスト(static_cast)している 循環リストを舐めまくりでびびった。HSPでこんなコード組んだら重くて普通に死ねる C/C++を使うメリットを遺憾なく発揮してると思った
- 524 名前:名前は開発中のものです。 mailto:sage [2009/03/04(水) 00:18:28 ID:43lD+2sK]
- >>523
アンチだけれども、別にごった煮にして、 全てをなめるような実装にしなくてもいい気がする 最初から型ごとにリストを持ってそれごと返せばいい訳だし ヘッダに全部宣言を入れていたのも、サンプルとしてそうしていただけで、 ヘッダが必要な個々の実装でincludeさせてそこでキャストさせればいい そうすると、型ごとリストへ割り振りは、本当の型で判断できないので 別の情報で型を識別させるようにして型ごとリストを持たせればいいのでは? タスクシステムに入れる時に型名を文字列で渡すとか ここらへんは、タスクシステムの弱点ではない気がする 何回も語られているけれど、本当の弱点は、 静的に片付くものをわざわざ動的にして問題を複雑にしている点だと思う 素人考え?
- 525 名前:名前は開発中のものです。 mailto:sage [2009/03/04(水) 00:23:18 ID:w8Rwmagw]
- > 静的に片付くものをわざわざ動的にして問題を複雑にしている点だと思う
意味がわからない。例えば?
- 526 名前:名前は開発中のものです。 mailto:sage [2009/03/04(水) 00:31:05 ID:mN9/jFMx]
- >>524
それなら、最初からふつーにメンバ変数で持たせて終わりじゃない? class Scene { Player player_; Enemies std::list<Enemy> enemies_; ... };
- 527 名前:名前は開発中のものです。 mailto:sage [2009/03/04(水) 00:40:31 ID:43lD+2sK]
- >>525
静的というのは、シーンクラスのメンバもしくはそのメンバに 自機、敵機、自機弾、スコア管理、ステージ制御などを階層を持たせて 配置しているということ 動的というのは、(少なくともインターフェイス越しには)ごった煮の グローバルなリストから個々のインスタンスが勝手に互いを参照し合って どうも統制が取れてなさそうに見えないこと 上の静的でも崩壊させることができるけれど、上手く設計すれば問題は起こらないはず で、ごった煮はその問題をただ先延ばしにしてしまっているようなイメージを持っている だからアンチ >>524 そう。そう思う。 だからアンチ
- 528 名前:名前は開発中のものです。 mailto:sage [2009/03/04(水) 00:48:30 ID:43lD+2sK]
- >>どうも統制が取れてなさそうに見えないこと
どうも統制が取れているように見えないこと
- 529 名前:名前は開発中のものです。 mailto:sage [2009/03/04(水) 02:40:49 ID:hHE159vF]
- >>448 の者だが、
タスク進化系がいまだにコンシューマゲーム開発の現場で生き残っているのは単純に無駄が無いから、ってのも理由の一つ。 スーファミからPS1へ、PS1からPS2へ、PS2からPS3へ移行するたびに、こんな大量のメモリ使い切れん、と思ったものだが なぜかマスター寸前の修羅場になるといつもメモリも速度も足りなくなりチューニングに明け暮れる日々が続く。 これはメモリ128Kのスーファミ時代から256MBのPS3まで、コンシューマ開発では変わらん定例行事。 そして常にメモリとコードの無駄を減らす圧力にさらされるんだけど、タスクみたいに毎フレーム相当数呼ばれる処理に 無駄が見つかると真っ先に削られる。 この修羅場では「可読性が…」とか「OOP的に…」なんて甘い理由よりも少しでも軽量なコードで動かすことが優先される。 で、PS3時代にもタスク進化系が生き残ってる、というわけだね。 仮想メモリつんでてスペックはユーザ毎にばらばらのPC環境では特定ハード向けにガリガリにチューニングなんて意味ないので PC環境でしか作ったことの無い人間には理解できんだろうけど、 コンシューマ開発や組み込み系とみたいに固有のハード性能を120%使い切る開発スタイルではよくあること。
- 530 名前:名前は開発中のものです。 mailto:sage [2009/03/04(水) 02:55:00 ID:43lD+2sK]
- >>529
なるほど。全くコンシューマーを知らないけれど、説得力がある では潤沢過ぎる程のメモリと、無限の演算能力がもしあったとしたら 喜んでタスクシステムは棄て去る?
- 531 名前:ID:EEKBitmg mailto:sage [2009/03/04(水) 03:04:13 ID:vv/UkwCS]
- ありえない仮定を持ち出すとかスゲェな
厨だけどさすがにこれは真似できないな お前は凄い。俺は頭痛がしてきた。寝る
- 532 名前:名前は開発中のものです。 mailto:sage [2009/03/04(水) 03:13:07 ID:43lD+2sK]
- 突込みがあったので補足。
>>530は、タスクシステムが貧困な環境で使えるという>>529に対して、 ならば、十分豊かな環境だったらそうではないのか?という質問。 無限〜は *話を簡単にするため* の誇張した表現。
- 533 名前:名前は開発中のものです。 mailto:sage [2009/03/04(水) 03:29:05 ID:hHE159vF]
- >>530
無限のメモリと無限の演算能力があったら…? それでも小規模なアクションゲーム系1人で作るならタスク進化系の管理システム使うと思う。 タスク系は下手に使うとバグの温床になるけど使いどころを間違えなければ便利だし。 まぁこれは慣れの問題なので、この手のゲームならこの手法で…とかだいたいやり方の想像つくし タスク系固有のバグで苦しんだ結果、バグの温床にならない作り方が出来るようになってるから、ってのもある。 慣れた人間にとっては開発効率いいんだよね、あれ。 まぁでも新人込みのプログラマ数十人で大規模オンラインゲームを作る、とかならたぶん違う方法取るけどね。
- 534 名前:名前は開発中のものです。 mailto:sage [2009/03/04(水) 04:55:07 ID:ll33Ou9u]
- >>533
無限の資源があってもリスクと教育コスト考えれば結局C++使うだろうねー 無限の納期と無限の人材があるなら・・・遊んで暮らすだろうなー
- 535 名前:名前は開発中のものです。 mailto:sage [2009/03/04(水) 05:47:21 ID:kXQL8zXx]
- タスクシステムってソースがタスクなわけで
プロセスがタスクじゃないのね ではマルチプロセス対応というのは真っ赤な嘘になるわけだ
- 536 名前:名前は開発中のものです。 mailto:sage [2009/03/04(水) 06:56:53 ID:m+X+Qg7j]
- >>527
タスクシステムはsingletonじゃねぇぞ。 タスクのなかに別のタスクシステムをcompositionで配置してタスクを 階層化できるが、お前本当にOOPわかってんのか?
- 537 名前:名前は開発中のものです。 [2009/03/04(水) 07:31:28 ID:NGMxgsfO]
- そんなの全く意味がないじゃん
だいたいそんなのやるならはじめから分けてもてよ
- 538 名前:名前は開発中のものです。 [2009/03/04(水) 07:34:46 ID:NGMxgsfO]
- 並列化はどう考えても嘘
並列にするなら少なくとも並列にするデータは分けないと動かない ごった煮でできるわけない
- 539 名前:名前は開発中のものです。 mailto:sage [2009/03/04(水) 08:44:10 ID:mN9/jFMx]
- >>529
メモリ使用量の大半を占めるのはテクスチャ・モデル・モーションなどのデータで、 CPU使用時間の大半を占めるのはヒット判定や AI 処理。 いわゆるゲームオブジェクト (プレイヤーとか) で多少削ったところで、誤差にもならない。
- 540 名前:名前は開発中のものです。 mailto:sage [2009/03/04(水) 08:48:07 ID:m+X+Qg7j]
- >>537
> そんなの全く意味がないじゃん そんなこたあ、ない。
- 541 名前:名前は開発中のものです。 mailto:sage [2009/03/04(水) 08:49:26 ID:2ryo6+k/]
- 数人で作るレベルなら擬似タスクでいいよ。
でもそれを超えると破綻すると思う。
- 542 名前:名前は開発中のものです。 mailto:sage [2009/03/04(水) 08:49:27 ID:m+X+Qg7j]
- >>538
阿呆すぎて泣ける。 前スレ510のプログラム、あれ並列化できないの? 本当に1行でもプログラム書けるの? タスクシステム使わなくていいから、前スレ510のプログラム、並列化してみなよ。
- 543 名前:名前は開発中のものです。 mailto:sage [2009/03/04(水) 08:51:55 ID:m+yO0HqN]
- >>508
彼を養護してるアンチはいないようだが そこまでして印象操作したいの?
- 544 名前:名前は開発中のものです。 mailto:sage [2009/03/04(水) 08:52:16 ID:m+X+Qg7j]
- >>526
> それなら、最初からふつーにメンバ変数で持たせて終わりじゃない? そのメンバ変数が指しているオブジェクトが生きていることを誰がどうやって保証するんだ?
- 545 名前:名前は開発中のものです。 mailto:sage [2009/03/04(水) 08:54:00 ID:m+X+Qg7j]
- >>543
このスレのアンチタスカーのレベルが総じて低すぎる。 タスクシステムに限らずフレームワークなんて、使える範囲で使えばいいだけのことなのに 完全否定する奴は完全肯定する奴と同罪で、頭おかしい。
- 546 名前:名前は開発中のものです。 mailto:sage [2009/03/04(水) 08:55:29 ID:mN9/jFMx]
- >>542
> 前スレ510のプログラム、あれ並列化できないの? そもそも、あれは名前がタスクなだけで、>>2 と設計全然違うけど。 いずれにせよ、データに依存性があり並列化はできない。 > m_vx = m_vx*m_m/(m_m+Star2.m_m) + Star2.m_vx*Star2.m_m/(m_m+Star2.m_m); > m_vy = m_vy*m_m/(m_m+Star2.m_m) + Star2.m_vy*Star2.m_m/(m_m+Star2.m_m); たとえばこのコード、複数の Star インスタンスの m_vx, m_vy を同時に読み書きしている。 複数スレッドで走らせた場合、値が保障できなくなる。
- 547 名前:名前は開発中のものです。 mailto:sage [2009/03/04(水) 08:57:09 ID:m+yO0HqN]
- >>545
> 完全否定する奴は完全肯定する奴と同罪で、頭おかしい。 つ鏡
- 548 名前:名前は開発中のものです。 mailto:sage [2009/03/04(水) 09:08:31 ID:mN9/jFMx]
- >>544
526のコードは、ポインタではなく実体で持たせているから、保障も何も要らんと思うが。 いずれにせよハンドルクラス (整数値とインスタンスの対応付け) は用意したほうが 便利だが、その場合でもプレイヤー・敵は別の ID 体系にしておくな。 たとえば、最大 2 プレイヤー同時プレイ可能なゲームで、プレイヤーに向かって 進む敵を作りたい場合。 class PlayerID { int id_; friend class Scene; }; class EnemyID { int id_; friend class Scene; }; class EnemyEnv { virtual ~EnemyEnv() {}; virtual PLAYER_ID GetNearestPlayer(ENEMY_ID enemy_id) const = 0; virtual Vec3 GetPlayerPos(PLAYER_ID player_id) const = 0; }; class Scene : public EnemyEnv { Player player_[2]; std:::list<Enemy> enemies_; public: void Update() { player_.Update(*this); enemy_.Update(*this); } virtual PLAYER_ID GetNearestPlayer() const { ... } virtual bool GetPlayerPos(PLAYER_ID player_id, Vec3* pos) const { // 実際には、ここで player_id.id の値チェックを行い、生存していなかったら false 返す *pos = player_[player_id.id_].GetPos(); return false; } } void Enemy::Update(EnemyEnv& env) { PLAYER_ID player_id = env.GetNearestPlayer(this.GetID()); Vec3 pos = env.GetPlayerPos(player_id); // あとは pos に向かって自分の位置を調整 }
- 549 名前:名前は開発中のものです。 mailto:sage [2009/03/04(水) 09:09:02 ID:m+X+Qg7j]
- >>546
> たとえばこのコード、複数の Star インスタンスの m_vx, m_vy を同時に読み書きしている。 その言い方は不正確だし、並列化の本質をわかっていない。 そのコード、そもそも元コードがすこしおかしいのだが、タスクシステムを使おうと使うまいと Starオブジェクトの集合から任意の2体を取り出して、その振る舞いを書きたいとする。 foreach(var star1 , star2 in stars) { star1.m_vx = star1.m_vx*star1.m_m/(star1.m_m+Star2.m_m) + Star2.m_vx*Star2.m_m/(star1.m_m+Star2.m_m); star1.m_vy = star1.m_vy*star1.m_m/(star1.m_m+Star2.m_m) + Star2.m_vy*Star2.m_m/(star1.m_m+Star2.m_m); } } これは、次のようにかきかえる。 foreach(var star1 , star2 in stars) { star1.m_vx_new = star1.m_vx*star1.m_m/(star1.m_m+Star2.m_m) + Star2.m_vx*Star2.m_m/(star1.m_m+Star2.m_m); star1.m_vy_new = star1.m_vy*star1.m_m/(star1.m_m+Star2.m_m) + Star2.m_vy*Star2.m_m/(star1.m_m+Star2.m_m); } foreach(var star in stars) { star1.m_vx = star1.m_vx_new; star1.m_vy = star1.m_vx_new; } これは、コリジョン判定とそれに対するアクションを切り離すときもそう。 これをきちんと切り離しておかないと並列化できない。 前スレでコリジョン判定は並列化できないとか言ってた馬鹿がいたけど、アクションを切り離さないから出来ない。
- 550 名前:名前は開発中のものです。 mailto:sage [2009/03/04(水) 09:11:17 ID:mN9/jFMx]
- >>549
その指摘は正しいが、前スレ 510 を使うかどうかとまったく無関係だよね。 タスクとやらを使ったから並列化できるようになるわけじゃないし、並列化が 楽になるわけでさえない。 けっきょく、同じ労力を咲く必要がある。
- 551 名前:名前は開発中のものです。 mailto:sage [2009/03/04(水) 09:11:22 ID:m+X+Qg7j]
- >>548
> いずれにせよハンドルクラス (整数値とインスタンスの対応付け) は用意したほうが そんなものあえて作る意味があるか?boost::weak_ptrで済むだろ。 そもそも、548のソースは典型的なタスクシステムで記述するよりはるかに複雑なんだが、 あんたは、タスクシステムの否定派なのか肯定派なのか何なんだ?
- 552 名前:名前は開発中のものです。 mailto:sage [2009/03/04(水) 09:15:37 ID:m+X+Qg7j]
- >>550
> タスクとやらを使ったから並列化できるようになるわけじゃないし、並列化が > 楽になるわけでさえない。 それは違うね。タスクシステムの側に並列化する部分を担当してもらう。 タスクシステムを使う側は、それを利用すればいいだけ。 タスクシステムは底辺の馬鹿プログラマが書かなくとも、別の、もっと優秀なプログラマが書けばいい。 並列化効率とか、メモリcacheとか、シェーダーに対するタスクの分配とか、そういうのを考慮して効率の いい並列化プログラムを書ける奴がな。 こうして、はじめてゲームの分業が成立するんだが。 あんたはちょっとはまともなプログラマに見えるが、大規模なゲーム開発に取り組んだことはないのか?
- 553 名前:名前は開発中のものです。 mailto:sage [2009/03/04(水) 09:17:40 ID:m+X+Qg7j]
- >こうして、はじめてゲームの分業が成立するんだが。
脱字。「ゲーム開発における分業」の間違い。 いま読み返したら549は >foreach(var star in stars) >{ > star1.m_vx = star1.m_vx_new; > star1.m_vy = star1.m_vx_new; >} ここ、左辺はstar1ではなくstarだ。ごめん。
- 554 名前:名前は開発中のものです。 mailto:sage [2009/03/04(水) 09:24:16 ID:mN9/jFMx]
- >>551
> そもそも、548のソースは典型的なタスクシステムで記述するよりはるかに複雑なんだが、 以前から同じようなコード例書いてるんだけどな。前スレ 748 とか。 ・コンポジションで良いじゃん ・規模が大きいプログラムだと、どのタイミングで何が呼ばれるか、変更されるかが 分かることが重要。 この例だと Enemy::Update 時には EnemyEnv 経由で Scene のメンバ関数が呼ばれる だけと確定する。Enemy::Draw みたいな処理があったときに、EnemyEnv const& 使うか 別のクラスを用意するかは要検討(場合による)。 > そんなものあえて作る意味があるか?boost::weak_ptrで済むだろ。 スクリプトと連携するときに楽 boost::shared_ptr 使ってるとは限らない 別に weak_ptr 使える場合には、使えば良いと思うけど。
- 555 名前:名前は開発中のものです。 mailto:sage [2009/03/04(水) 09:25:22 ID:mN9/jFMx]
- >>552
> タスクシステムの側に並列化する部分を担当してもらう。 名前がタスクシステムなだけで、前スレ 510 とも >>2 ともまったく違う設計・実装について 語ってるということで FA?
- 556 名前:名前は開発中のものです。 mailto:sage [2009/03/04(水) 09:26:54 ID:m+X+Qg7j]
- 結局、並列化の本質は>>549なんだ。もう少し抽象化して書けば、こう。
foreach(var star1 , star2 in stars) { star1の新しく情報を書き込む領域 ← star1とstar2相互計算によって得る。 } foreach(var star in stars) { starの新しく情報を書き込んだ領域をcommitする。 } で、これをタスクシステム側に並列化する部分を受け持ってもらう。 例えば>>546であれば、次のように書けば上のプログラム(>>549)と等価になる構文を用意する。 foreach_parallel (var star1 , star2 in stars) { star1.m_vx = star1.m_vx*star1.m_m/(star1.m_m+Star2.m_m) + Star2.m_vx*Star2.m_m/(star1.m_m+Star2.m_m); star1.m_vy = star1.m_vy*star1.m_m/(star1.m_m+Star2.m_m) + Star2.m_vy*Star2.m_m/(star1.m_m+Star2.m_m); } このとき、左辺は、shadow(m_vx_new , m_vy_new ) に対してアクセスしていて、実際はforeachを抜けてから foreach(var star in stars) { star.m_vx = star1.m_vx_new; star.m_vy = star1.m_vx_new; } これが実行される。この仕組みをタスクシステム側に提供してもらう。これなら簡単に並列化できる。 ゲームで使うコリジョン判定などはたいていこのように並列化できる。
- 557 名前:名前は開発中のものです。 mailto:sage [2009/03/04(水) 09:31:11 ID:m+X+Qg7j]
- >>555
> 名前がタスクシステムなだけで、前スレ 510 とも >>2 ともまったく違う設計・実装について > 語ってるということで FA? 並列化とタスクシステムとは直交する概念だから、例えば>>2のタスクシステムを並列化することも出来るし 前スレ510のタスクシステムを並列化することも出来る。 どちらかと言えば、前スレ510のほうが>>2よりはある型のオブジェクト集合のうち任意の2体に対する 振る舞いが書けるのでその部分が並列化する価値が高いだけのこと。 そもそも、タスクに対して列挙したり、任意の型の2体を取り出したりする仕組みがどこにもない状態で 並列化なんて出来ないだろう。 俺がタスクシステムと呼んでいるのは、最低限、タスクシステムと名がつくなら、タスクに対する基底 クラスが存在して、それくらいの機能はあるんじゃねーの?と思うからだ。
- 558 名前:名前は開発中のものです。 mailto:sage [2009/03/04(水) 09:32:48 ID:m+X+Qg7j]
- >>554
>> そんなものあえて作る意味があるか?boost::weak_ptrで済むだろ。 >スクリプトと連携するときに楽 ふむ、それならok。
- 559 名前:510 mailto:sage [2009/03/04(水) 11:11:12 ID:5viq5cgM]
- >>556
shadowのアイデアもーらい。 transaction( hoge )//shadow初期化 { task2_parallel( hoge, hoge ) { _hoge1.x += hoge2.x;//例えば、変数の頭にアンダーバーがついていたらshadowとか。 //rollback;//ロールバックも出来るよ } task_parallel_end; } commit;//shadowコミット あと、何か頭が統合ヘッダ?の人が来てたみたいだけど、 アップロードしたプログラムのヘッダファイルがごった煮だったのは 単にサンプルプログラムだったからだ。
- 560 名前:510 mailto:sage [2009/03/04(水) 11:23:44 ID:5viq5cgM]
- shadowは書き込みさきより参照元の方が良いな。
- 561 名前:名前は開発中のものです。 mailto:sage [2009/03/04(水) 11:43:23 ID:4u8TV8ZG]
- >>557
>俺がタスクシステムと呼んでいるのは、最低限、タスクシステムと名がつくなら、タスクに対する基底 >クラスが存在して、それくらいの機能はあるんじゃねーの?と思うからだ。 あー、やはりな。以下の内容は煽り抜きだから気を悪くしないでくれ 結局これはローカル用語の解釈を巡る相違でしかない 例えばウチの社内ではあんたの解釈を振りかざしても 意思疎通はうまくいかないだろう ここでは色んな名無しが俺定義・俺解釈のローカル用語を 公衆の場に持ち出して一人相撲してる。あんたもそう タスクシステムは権威不在の定義不明瞭なローカル用語だ ということをまず再確認し、意思疎通を円滑にするために それぞれがより確かな一般的な計算機用語に換言する努力を すべきだ。でなければ、この実に不毛なすれ違いは無くならない
|

|