タスクシステム総合スレ part4
■ このスレッドは過去ログ倉庫に格納されています
0001名前は開発中のものです。
2009/02/01(日) 12:38:10ID:rVEgp4cMpart3 http://pc11.2ch.net/test/read.cgi/gamedev/1226199100/
part2 http://pc11.2ch.net/test/read.cgi/gamedev/1196711513/
part1 http://pc11.2ch.net/test/read.cgi/gamedev/1173708588/
0627名前は開発中のものです。
2009/02/15(日) 00:20:01ID:/3SpaYGWみんな俺だけ仲間はずれにして、泣くぞ
>>625
前に同じこと書いたけど>>2にはメリットデメリットが書いてないし
そのときも誰もメリットデメリットを教えてくれなかったし
推測しろという、不親切過ぎるだろ
補えって言うくらいだから、使ってる人は知ってるんでしょ?メリットデメリットを
まさか知らないで使っているわけないよね
誰でもいいからタスクシステムの
メリットとデメリットを教えてください
いじわるしないで教えてください、お願いします
0628名前は開発中のものです。
2009/02/15(日) 00:24:05ID:h/ugUohbメリットデメリット→相対的な話
0629名前は開発中のものです。
2009/02/15(日) 00:28:19ID:/3SpaYGWA.ハハン、自分で考えろ
……俺はどうすればいいんだろう
0630名前は開発中のものです。
2009/02/15(日) 00:28:29ID:pf6wVUPlお前が一行もプログラムの書けないポエマーなのは十分わかったから、もう出てこなくていいよ
0631名前は開発中のものです。
2009/02/15(日) 00:34:23ID:kIY9LVp/メリット、デメリットを出せって奴は俺もいるぜ
0632名前は開発中のものです。
2009/02/15(日) 00:38:02ID:h/ugUohbアドバンテージ云々って話にはならんだろ
0633名前は開発中のものです。
2009/02/15(日) 00:45:37ID:kIY9LVp/タスクシステムしか知らんの?
0634名前は開発中のものです。
2009/02/15(日) 00:47:57ID:/3SpaYGW>アドバンテージ云々って話にはならんだろ
DSL
タスクシステムがフレームワークに類するのかどうかわからないけど
フレームワークはいくつかある
比較対照はたくさんあるけど
タスクシステムの基本的な事がわからないのでなんとも言えない
それに比較対照がなくても、大きいメリット一つぐらいはわかりそうなものだが
Q.タスクシステムのメリットとデメリットを教えてください
A.ハハン、自分で考えろ
なんだかこのやりとりが気に入ったw
0635名前は開発中のものです。
2009/02/15(日) 00:53:32ID:Oer16jPuboost::protoでevalできるものは全てDSL(*)って言えるし、さらに(*)すらDSLの一部だぞ
0636名前は開発中のものです。
2009/02/15(日) 00:55:04ID:h/ugUohb比較対象として出してみ。
そうすればメリット、デメリットの話もできるだろう。
0637名前は開発中のものです。
2009/02/15(日) 01:01:58ID:/3SpaYGWDSLのメリットとデメリットはわかる
色々あるなら全部比較対照にすればいいから
比較してタスクシステムのメリットとデメリットを教えてもらいたい
>>636
タスクシステム的発想というものがさっぱりわからないけど
DSL
0638名前は開発中のものです。
2009/02/15(日) 01:14:37ID:20MV6lUe・メリット:なんだこんな簡単な仕組みでゲーム作れるんじゃん。やっぱりな。これなら自分でも覚えられるぞ! とか、
おれのSTG(もどき)が動いた! といったあたりまでゲーム製作が推進可能となる
・デメリット:わりと最悪の部類に入る設計思想でした。もう一歩も先に進めません。という時期が来る
ベテラン(?)
・メリット:デバッガとか周辺ツールが便利らしい
・デメリット:デバッガとか周辺ツールを自分で作るらしい。あと、抽象化を見極めるワザが必要らしい。
タスクシステムに設計パターンとしてのメリットは無いね。
Byアンチ
0639名前は開発中のものです。
2009/02/15(日) 01:19:05ID:h/ugUohbDSLとやらと比較したいんだったら、自分で比較作業やればいいじゃないか。
それを他人にさせようとするなよ。
ただしタスクシステム批判するなら、根拠となる比較作業結果を明示する。
0640名前は開発中のものです。
2009/02/15(日) 02:50:31ID:FA9cfUTD> 『ローカル用語だな。公衆の場で何の事前説明もなくタスクシステムとか語られても意味わかんねー 』
> 脳みそに染み渡った?質問どうぞ
つまりアンチタスクシステム厨というのは、自分にとって理解できないものに対して『俺は何が理解できて
いないか理解できていないぞ』と公衆の場で叫ぶキチガイと言うことか?
0641名前は開発中のものです。
2009/02/15(日) 03:05:29ID:kIY9LVp/http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8884.zip
どこか変わったか?w
っていうか糞わかりにくいコードだったからバグってるかもしれない
まあ、雰囲気だけ受け取ってくれ
どうせやるなら
自機、敵、弾の3種類のクラスがあって
弾は追尾機能(関連を作るため)がついてるほうがいいな
0642名前は開発中のものです。
2009/02/15(日) 08:39:51ID:OFTP7lcImainにwhileがあって中で星の数だけ処理をforで回す…と。
初心者がC言語習って最初に作るミニゲームとかはこーなるだろうなーと。
これでブラックホールとか自機とかさらに複数の要素が加わったら全部の要素をこのwhile内にハードコードで追加して巨大化していくのかな?
タスクシステムなら新しい要素をタスクに登録するだけで、スクリプトとかから動的に要素を増減できるけど。
さらに、ゲームだとタイトルとかコンフィグとか、デモとか、ボーナスステージとかステージ毎に違う仕掛けがあるケースはどう書くのかな?
一個のメインループの中にswitchとかで切り分けて無理やり全部詰め込む?
それとも全ての要素の組み合わせごとにメインループを分ける?
…ってことは見苦しいからやりたくない、って思ったプログラマがタスクシステムを作ったんだけどね。
タスクならメインループは一個。タイトルやゲームも要素の増減もタスクで処理可能。
頑張って非タスク作るって、結局アンチはその程度のことも分かってないプログラマだった、という証明になってるんだが…
まぁ、たまたまこのアンチのレベルが低いだけで、まさか全部のアンチがこんなレベルのプログラマじゃないよな?
0643名前は開発中のものです。
2009/02/15(日) 08:49:10ID:5MvrWTvYオレも最初そう思ったw
Squirrel可愛いよSquirrel
タスクからSquirrel呼んじゃうよ(まあ俺はタスク使わんけど)
んで、まじめにDSLという(Java/Ruby界隈中心に広まった?)言葉の定義を調べてみたが、
どうやら外部DSLはSquirrelやLua、XML、JRuby、Groobyのようないわゆる組み込み言語を指すらしい
で、内部DSLというのはyacc/bisonやboost::lambda、Lispのマクロ機能、
アスペクト指向トランスレータに見られるような言語自体のメタ的拡張手法を指すようだね
煽るつもりはないが、内部DSLがゲームのなにを解決するのか分からないなあ
しかもタスクの問題範囲と競合してるようにも見えない
どういう風にゲーム開発に活用しているんだろう?モナディウスとか?
>>642
売り言葉に買い言葉なのは分かるが、安全なところから他人のコードを叩くなよ
0644名前は開発中のものです。
2009/02/15(日) 09:32:34ID:pf6wVUPlまあ、アンチの代表格が、510のプログラムさえ読めなかった低脳ポエマーだったことが発覚したので仕方ないんじゃね?
あと説明責任君とか。510のプログラム見てわからないなら、プログラマを語るなと言いたいんだが。
0645名前は開発中のものです。
2009/02/15(日) 10:15:31ID:kIY9LVp/だから、こんなサンプルじゃそーゆーのを俺がどう書くのかわかんねーだろ?w
だから、自機、敵、弾のサンプルのがいいって言ってるのに
0646名前は開発中のものです。
2009/02/15(日) 10:21:59ID:OFTP7lcIならこのサンプル出す意味無いんじゃね?
タスクシステムの比較対象にすらなってないし。
0647名前は開発中のものです。
2009/02/15(日) 10:25:34ID:kIY9LVp/ホント、その通りなんだけど
それは>>510にしかわからないw
0648名前は開発中のものです。
2009/02/15(日) 10:30:58ID:/3uMAyPp単純で読みやすい。
whieループの中の「〜タスク」は別関数に切り出して欲しいが。
こんな簡単な問題をなんで変なマクロでくくって、ややこしくするのかが理解できん。
>>510タスクシステムが理解できないのではなく、
簡単な問題をわざわざ複雑に解く理由が分からんと言っている。
事実、>>641のコード量は>>510の半分程度になってるだろ。
0649名前は開発中のものです。
2009/02/15(日) 10:32:18ID:/3uMAyPp0650名前は開発中のものです。
2009/02/15(日) 10:39:55ID:hUQv8RGuDSL具体例出してくれてありがとう。よく分かったよ。
Squirrelな俺にとってはいつのまにか外部DSL派だったわけね。
スクリプトにタスク概念入れると処理の一貫性や可読性やらの諸問題で、
タスク使わない派に戻りました。今のところコルーチンでFAな感じ。すげえし読みやすい/書きやすいよ。
もしコルーチンで記述できない/処理が重い問題にぶち当たればタスクに戻るよ。その辺は柔軟に考えている。
ゲームっつっても、小規模STGなのか大規模RPGなのか、2D/3Dなのかネットワーク対応/非対応なのかにもよって変わってくるだろうし
理論と実践は異なるってことだよだな。銀の弾丸は無いよ。
各自好きなの使えばいいじゃん。
0651名前は開発中のものです。
2009/02/15(日) 10:44:27ID:kIY9LVp/こんなんじゃ納得できないと思うな奴等w
結局オブジェクトも1種類しかないし
種類が増えたときにごった煮が役に立つを思ってる奴等でしょ?w
なんで>>510なんかに飛びついてたのかわからないけどw
0652名前は開発中のものです。
2009/02/15(日) 10:45:34ID:OFTP7lcIそれは庭いじりしか知らない人がハサミで十分だから
ノコギリの必要性が理解できないと言ってるのと同じ。
サンプル規模のプログラムでタスクシステム使うのは庭いじりにノコギリ使うようなものだが
>>642 のような実際のゲーム規模では必ず遭遇する問題にはタスクシステムかそれに変わる何らかのシステムが無いと
こんなベタ組みじゃやってられんよね、ということだ。
0653名前は開発中のものです。
2009/02/15(日) 10:52:37ID:kIY9LVp/絶対、かわんねぇよ
だって書かなきゃいけない処理って決まってるじゃん
書かなきゃいけない処理の一覧書き出して
タスクシステムで書かなくてよくなる処理を○でもつけてみろw
自機、敵、弾ってあってそれぞれが関係するなら
自機x敵、自機x弾、敵x弾の関連の処理は絶対に省略できないってw
アフォでもわかるべ〜w
冷静になって考えてみろよw
0654名前は開発中のものです。
2009/02/15(日) 10:58:26ID:OFTP7lcI>タスクシステムで書かなくてよくなる処理を○でもつけてみろw
タスクシステムは書かなきゃいけない処理を書かなくてもよくするためのものじゃないぞ。
そもそもそんなシステムは無いだろ。
関係するオブジェクトの増減やゲームの状態推移を統一した扱いにできて便利、ぐらいのもの。
自機、敵、弾だけで完結できるほどシンプルなサンプルレベルのなら使わなくてもいいんでない?
0655名前は開発中のものです。
2009/02/15(日) 10:59:18ID:pf6wVUPl抽象化するコストって、TaskSystem自体は再利用できるんだから、たくさんゲームを作るなら
ゼロに近づいていくんだが。
まさかあんたは一本だけゲームを作って一生を終えるつもりか?
0656名前は開発中のものです。
2009/02/15(日) 11:08:15ID:kIY9LVp/>タスクシステムは書かなきゃいけない処理を書かなくてもよくするためのものじゃないぞ。
>関係するオブジェクトの増減やゲームの状態推移を統一した扱いにできて便利、ぐらいのもの。
はぁ?じゃ、何がメリットなんだよw
さっさと言えよ
とりあえず>>510のサンプルなんてなんの役にも立たないってわかった?
目的もなく動いたって無駄なんだよ
ホント馬鹿だな
無駄、呼吸してること自体が無駄
>>510のサンプルに飛びついてたゴミはすべて無能
>自機、敵、弾だけで完結できるほどシンプルなサンプルレベルのなら使わなくてもいいんでない?
だから、そういうだろwお前等w
>>510のサンプルはなんの意味もねーって言ってるのに
わかんねぇかなぁw
0657名前は開発中のものです。
2009/02/15(日) 11:14:35ID:hUQv8RGu>自機x敵、自機x弾、敵x弾の関連の処理は絶対に省略できないってw
処理が似たり寄ったりなら、そこはクラスの「抽象化」の一言で済むんじゃない?
タスクの範疇じゃないでしょ。タスクについて勘違いしてるよ〜
0658名前は開発中のものです。
2009/02/15(日) 11:14:44ID:OFTP7lcI>はぁ?じゃ、何がメリットなんだよw
>>642 でタスク使えばこーかける、ってのが出てるけど。
これじゃ理解できないかな?
まぁ、メリットデメリットが理解できないなら使わなければいいだけなんだが。
誰か君にタスク使うよう強要してるの?
0659名前は開発中のものです。
2009/02/15(日) 11:16:56ID:kIY9LVp/うーん?
何?言ってることさっぱりわからない
苦し紛れに意味わかんないこと言わないでよw
0660名前は開発中のものです。
2009/02/15(日) 11:19:37ID:hUQv8RGuGoFのデザインパターンとか、その辺から見てみるといいよ。
あくまでタスクは状態遷移のためのもので、データの抽象化等とか根本的に違うっしょ。
0661名前は開発中のものです。
2009/02/15(日) 11:20:48ID:kIY9LVp/えーだって結局>>510のサンプルはなんの意味もなしてないわけでしょ?
あのソースにあれこれ言ってた人はどこ行ったの?
0662名前は開発中のものです。
2009/02/15(日) 11:22:49ID:OFTP7lcIタスクシステムの実装の一例として
>>641のサンプルよりは意味があるんでない?
0663名前は開発中のものです。
2009/02/15(日) 11:24:37ID:kIY9LVp/おいおい>>641は>>510がなんの意味もなくね?っていうのを表現するために作ったんだぜ
んでそれは納得できた?YES?orNO?
0664名前は開発中のものです。
2009/02/15(日) 11:29:11ID:hUQv8RGu従来のタスクよりは、可読性について大幅に改善していると思うよ。
今までのタスクは処理が飛びまくるから目で追うのが大変だったからね。
0665名前は開発中のものです。
2009/02/15(日) 11:33:51ID:OFTP7lcI>>510 タスクシステムを使ったサンプル(実装例として意味ある)
>>641 何も使ってないサンプル(実装例として意味無い)
だけの話でしょ…
というか、タスクシステムごとき単純な考え方を煽りじゃなく本当に理解できないとしたら
プログラマとしてどーかと思うぞ。
0666名前は開発中のものです。
2009/02/15(日) 11:34:44ID:/3uMAyPp扱う問題が巨大になったとき、>>510版と>>641版でどれほどの差が出るかなんだが。
なんかあるの?
単にタスクシステムの分だけオーバーヘッドになってるように見えるんだけど。
>>510を使えば使うほど何らかのコストが浮くのかな?
一体何がラクになるのだ。
どんな問題を解決しているのだ。
もともと制御部っていうのは本質的に複雑だから再利用は難しい。
汎用的にすればするほど中身がなくなっていく部分。
「ドラクエ風ゲームエンジン」「横シューエンジン」「スト2風格ゲーエンジン」「アンリアル風エンジン」
ここまで的を絞って3〜4本量産してようやくペイするってところじゃないか。
マルチスレッドに注目したMTフレームワークなんかは、デバッグのしやすさや移植しやすさも売りにして抽象コストをキッチリ回収している。
実行環境/開発環境として、実行/開発において誰もがぶち当たるありふれた問題を一手に引き受けて解決している。
単にforループで済む部分を別のやり方でやって偉ぶっているわけではないので混同しないようにな。
>>510
これはHOW。結局タスクシステムはどの問題を解決しているのか。
ただのforループ以上の何があるんだ。ただのforループに勝ってるのか。
そうでないならforループを使うほうが遥かに良い。単純明快説明不要でコスト0だ。
>>620
「ここに処理を書けば自動で並列化できますよ」
まず、何がどう自動なんだか分からない。
実のところ、何も自動化されていない。
0667名前は開発中のものです。
2009/02/15(日) 11:35:19ID:pf6wVUPlお取り込み中のところ横からで済まないが
>>641 のソースだが、明らかに元のソースより読みにくい。
forがロジック部に出てきてるのだとか、null判定してcontinueしているのとか
Starの空きを探す部分だとか。
結局、
・もし事前に510のタスクシステムが存在していてこの開発コストが0だと見なせるなら、
641のコードのほうが工数が多いのは明らか。
・もし事前に510のタスクシステムが存在していてこの開発コストが0だと見なせるなら、
が成り立たないなら641の書き方でいいんじゃね?とは思うけどな。
0668名前は開発中のものです。
2009/02/15(日) 11:36:30ID:kIY9LVp/で?>>510と>>641は大して変わらないソースになったけど
これがオブジェクトの種類が増えていくとどう変わる?って展望があるのかな?
そーゆーことが言いたいなら少なくともそういう色の出てるソースじゃないと意味ないよね?
つまり、この時点では>>510はなんの意味もない、そういうことだよね?
0669名前は開発中のものです。
2009/02/15(日) 11:37:31ID:kIY9LVp/>>>641 のソースだが、明らかに元のソースより読みにくい。
なんか言い出しちゃったよw
0670名前は開発中のものです。
2009/02/15(日) 11:39:29ID:OFTP7lcI明確なデメリットがあるからアンチとか
他にもっといい方法があるからアンチ
ってわけじゃなく
そもそも経験不足でメリット・デメリットや使いどころが想像つかないけど
他の人は理解してて悔しいからアンチ
って感じにしか見えん。
自分の好みに合わないなら使わなきゃいいだけなのにねぇ…
0671名前は開発中のものです。
2009/02/15(日) 11:40:50ID:pf6wVUPl> 「ドラクエ風ゲームエンジン」「横シューエンジン」「スト2風格ゲーエンジン」「アンリアル風エンジン」
> ここまで的を絞って3〜4本量産してようやくペイするってところじゃないか。
そう簡単な話じゃないんだ。
これは現場の俺から言わせてもらえれば、
エンジンを作ったり設計したりしてるのは賢い連中なのよ。
それぞれのゲームを作ってるのはもっと質の悪い、単価の安い、なんと言うか・・まあ、皆まで言わすな。
だから、プログラムのうち、難しい部分と簡単な部分とを切り分けて、難しい部分を賢い連中に
担当させるのは、理にかなってるんだよ。
0672名前は開発中のものです。
2009/02/15(日) 11:41:22ID:5MvrWTvY組み込みスクリプトには2種類のメリットがあると思う
1.フレームをまたいだ継続処理の記述が平易にできる
コルーチンがもてはやされるけど、実はコルーチンでなくても
コンテキストを保ったままフレームをまたげる実装であれば良い
そういう意味では目新しいものではなく、今までも各社独自でこのようなスクリプト実装は行っていた
2.データをソースコードの外部に出すことができる
Game Programing Gems1巻で最初に触れられるのがこれ(データ主導設計)
今風に言うとXMLよりJSONだよね的な話だが、もちろんコレも新しいものではない
こうして見ると、結局コルーチンもデータ主導設計もDSLと同じで、
それと意識されることなく昔から使われていた手法だよね
考え方に名前を付けるのは必要なことだけど、普及しはじめるとHYPE化するのはどうしてなんだろう
みんな銀の弾丸が欲しくてHYPEに踊らされすぎなんじゃないか?
#もちろん"タスクシステム"もHYPEであり、タスク厨はそれに踊らされ、アンチはそれを嫌うクセに別のHYPEに群がるんだ
0673名前は開発中のものです。
2009/02/15(日) 11:42:11ID:hUQv8RGuわざわざ>>510から戻した理由がわからん……。
0674名前は開発中のものです。
2009/02/15(日) 11:43:39ID:pf6wVUPlいや、比較のためだろう。
俺は、>>641 はそういう意味ではいい仕事したと思うよ。
0675名前は開発中のものです。
2009/02/15(日) 12:01:12ID:hUQv8RGuなかなか深い観点だ。恐れ入った。
業界人じゃないから昔の話とか全然わからんけど、色々と工夫していたみたいね。
いまからゲームを作るのであれば、コルーチンで書く書かないはスクリプターのセンスに任せるとして、
データの外部化については正直必須だと思うんだ。
その辺をしっかり作っておけば、準汎用で使いまわしが便利な資産になる感じだと思ってる。(完全に汎用ではないけど)
HYPE化はしかないんじゃない?
タスクに代わる実装には選択肢が多々あるから、
1択に絞れる(1択に絞れる方法が存在する)のならそれに依存したいとおもうのは仕方ない。信仰宗教と代わらんね。
0676名前は開発中のものです。
2009/02/15(日) 12:19:02ID:D0niLPLq作るゲームの規模や種類によっても違ってくるだろうし、
万事での最善も最悪も無さそうだ。
実際にある程度の規模のゲーム作って
議論してるやつがどれだけいるか知らんがなあ。
0677名前は開発中のものです。
2009/02/15(日) 12:32:22ID:20MV6lUe1000行程度から5000行程度ならタスクシステム導入でもなんとかやりすごせる
30000行程度ならタスクシステムは糞。完全に開発ストップ。 >>641 的に書くとこから再出発。
100000行程度、、、組んだこと無い
>>641 よりタスクシステム導入した方が良いとかいうやつ、30000行以上のもの書いたことあるのか?
また話変わるぞ?
そんな小手先の技術じゃどうにもならなくなる時が来るはずなんだが
なぜそこまでたどり着かないのか不思議
0678名前は開発中のものです。
2009/02/15(日) 12:44:56ID:fgsPvXPGタスクシステム以前に設計が糞なだけだろ
0679名前は開発中のものです。
2009/02/15(日) 12:45:47ID:20MV6lUe>>620
0680名前は開発中のものです。
2009/02/15(日) 12:47:31ID:20MV6lUeタスクシステムは設計の範疇にいれないんだwww
設計じゃないならなんなんだよwww
0681名前は開発中のものです。
2009/02/15(日) 12:47:49ID:hnmq8yzx自分も同人で50Kオーバーの作品を作ったことあるけど、
総ステップと、タスクが使えるかどうかは、>>670と全く同じ考え。
タスクシステムは歪みがこの程度のサイズで出てくる。
行数で、手法を変えるというよりも、タスクでやるのが、無理になってくる。
0682名前は開発中のものです。
2009/02/15(日) 12:48:40ID:hnmq8yzx0683名前は開発中のものです。
2009/02/15(日) 13:03:59ID:pf6wVUPl3万行って、ソースで言えばたったの1MBぐらいだろ?
10万行規模のソースのあるプロジェクトに関わったことがないって、どこの弱小ゲームメーカーだよ。
ちょっとした規模の商用ゲームなら、ライブラリの一部だけでも3万行ぐらいあるだろうに。
タスクシステムに限らんが、使うに値するところには使えばいいんだ。
まあ、たいていのゲームは大規模になってくると、そのゲームに特化したエンジンにせざるを得ないので
汎用的で使い回しの利く部分は減っていくのは仕方ないが。
0684名前は開発中のものです。
2009/02/15(日) 13:08:21ID:hUQv8RGuタスクシステムは規模が大きくなるにつれ処理を追うことが困難になりやすい。
(そのためにタスク管理やタスク監視のデバッグメニューを実装する必要も出てくる)
そんな中>>641に戻すのも手だが、それなら初めから組み込みスクリプト使うかな。自分なら。
0685名前は開発中のものです。
2009/02/15(日) 13:39:19ID:h/ugUohbCGエフェクトのハードコーディングを避ける目的に使うくらいじゃねえの?
ある程度、個々のタスクの動作の選択肢が限られているからこそ、
>>2をより一層抽象化できるというか。
タスクシステムの動作原理を継承しているよな。
0686名前は開発中のものです。
2009/02/15(日) 13:48:09ID:OFTP7lcI決して見やすいソースでは無かったけど、不可能では無いわな。
ゲームのモード用メインループタスク階層。敵や味方のオブジェクト用タスク階層。
メニューシステムタスク階層とか、分割統治方式で使ってたが。
他にはswitch/caseの状態を階層化して管理してる某ステップ方式とかも見たことあるが
どれも規模が大きくなると悲惨なことには変わりなかったなぁ
ただ >>641 は何のシステムも無しに力技でベタに作ってく方法だから、そもそもタスクが使えんほど
大きなコードではまったく話にならんよ…
0687名前は開発中のものです。
2009/02/15(日) 13:59:12ID:hUQv8RGu例えばLuaの適用ゲームはこんな感じ。
http://en.wikipedia.org/wiki/Lua_(programming_language)#Applications
どの程度使ってるのかは、ゲーム内によって異なるので定かではないが、
CEDECでスクエニの中の人が発表していた内容では、
WiiのFFCCというゲームの開発ではSquirrelを使っていて、
コード比はプログラム3割スクリプト7割だってさ。
0688名前は開発中のものです。
2009/02/15(日) 14:10:51ID:h/ugUohb参考になりました
0689名前は開発中のものです。
2009/02/15(日) 14:19:19ID:kIY9LVp/それは意図が全然違うじゃん
スクリプトは処理を企画に渡せるってだけでしょ?
書かなきゃいけない処理はまったく変わらない
スクリプトを話題に出してる時点で意味不明
0690名前は開発中のものです。
2009/02/15(日) 14:20:50ID:h/ugUohbスクリプトだと中間言語経由になるから、高速な相互影響処理には向いてないよね。
>WiiのFFCC
FC世代RPGの厚化粧版か。
>コード比はプログラム3割スクリプト7割
プリミティブな次元では従来のゲームからの変革はなし。
VFXだけ肥大といったところか。
タイトルの詳細をチェックしていないので、テキトーなこと言ってるけど
結局、タスクシステムは必要ってことだ。
0691名前は開発中のものです。
2009/02/15(日) 14:26:13ID:hUQv8RGu減ったりも増えたりもしない。
まずは、フレームワークとスクリプトを完全に分けます。
で、スクリプト言語の持っているコルーチンに頼って、
スクリプト実装者がゴリゴリ書く。
仕事も責任も分担できる。オススメです。
0692名前は開発中のものです。
2009/02/15(日) 14:26:58ID:FA9cfUTDムリになってくるってことだろ?
0693名前は開発中のものです。
2009/02/15(日) 14:27:13ID:kIY9LVp/じゃあ、この場所で出す話題として適切なの?どうなの?
それともその話題はタスクシステムのメリットデメリットに直結するものなの?
ちゃんと考えて発言してよ
0694名前は開発中のものです。
2009/02/15(日) 14:30:08ID:hUQv8RGuJITがあるよ。x86なら公開されてる。必要なら個人で実装すればいいけど、敷居は高いかな。
速度を稼ぐ必要があるのならCに戻すことも考慮されている。
Luaならここかな。http://luajit.org/
0695名前は開発中のものです。
2009/02/15(日) 14:34:20ID:hUQv8RGu俺の考えは、アンチタスク派で、
タスク派がコード量でプログラムが肥大化して可視性が悪いよというのであれば、スクリプト使え
ってこと。
ちゃんと考えて発言してないように見えるかい?
0696名前は開発中のものです。
2009/02/15(日) 14:43:31ID:FA9cfUTDjikiについての関数は当然別々に書くんだよな? 違うの?
0697名前は開発中のものです。
2009/02/15(日) 14:55:33ID:OFTP7lcI今後ゲーム開発はスクリプト使う方向に行くだろうし、
それ自体は賛成だけど
タスクシステムの上にスクリプトが乗っかるのか、スクリプトの上にタスクシステムを構築するのか、って感じで
スクリプト自体はタスクシステムの有無とはまた違う話だよね。
間接的にデータ駆動でコード中の複雑性が減ってタスクシステムでもコード見通しがよくなるね、という程度の話なのかな?
まぁネイティブコードの量は減るから見通しは良くなりそうだけど、スクリプトの分量が増えると
ネイティブコードと中間コードの二系統をメンテする手間で結局あまり変わらない気もする…
0698名前は開発中のものです。
2009/02/15(日) 15:03:18ID:kIY9LVp/処理よっては別になるかもわからんねぇ
敵のパーツを奪って武器・装甲を強化するタイプの自機と
経験値蓄積型のパワーアップをするタイプの自機ぐらいの違いがあると
もうプログラム自体共通部分を探すほうが難しいぐらいになるかもしれんし
まあ、仕様によるかな?
何が来てもいいように別にしておくのがいいな
もし、共通部分があったとしてもたかが数箇所(自機分)でしょ?
0699名前は開発中のものです。
2009/02/15(日) 15:03:19ID:hUQv8RGuスクリプトだけでタスクは乗らないです。
どっちも載せたりすると直感的に分かりづらくなる。
フレーム間をまたぐ処理の場合は、コルーチン(いわゆる協調スレッド、ファイバー、マイクロスレッド)を使います。
>まぁネイティブコードの量は減るから見通しは良くなりそうだけど、スクリプトの分量が増えると
>ネイティブコードと中間コードの二系統をメンテする手間で結局あまり変わらない気もする…
これは同意です。1人で実装するとなると2倍手間になりそうですが、そこは明確な作業分担でできるってことで。
スクリプトのメンテはスクリプトの動的ロードを実装すれば、プログラム実行中でも即座に反映されるようになるから便利ですぜ
0700名前は開発中のものです。
2009/02/15(日) 15:04:07ID:hnmq8yzx>>696
ごめん。よくわからない 多分自分の理解力不足だけれど
タスクでもそうでなくても、jikiを別々には書かないかと。
タスクにした場合と壮でない場合で、その点に違いが出るの?
0701名前は開発中のものです。
2009/02/15(日) 15:13:38ID:OFTP7lcI>フレーム間をまたぐ処理の場合は、コルーチン(いわゆる協調スレッド、ファイバー、マイクロスレッド)を使います。
オブジェクトの粒度をどの単位にするかにもよるけど
例えば敵の弾一個一個につき協調スレッド、ファイバー、マイクロスレッド、のどれかの生成、破壊を繰り返すの?
そりゃパフォーマンス的に厳しいんでないかなぁ…
協調スレッド、ファイバー、マイクロスレッドのどれも普通のスレッドに比べればかなり軽いけど
タスクシステムの関数コール同等の負荷とは比べ物にならないぐらい重いし。
まぁ、十年後のPC環境なら全然問題ないレベルの負荷かもしれんが。
0702名前は開発中のものです。
2009/02/15(日) 15:20:18ID:FA9cfUTDじゃ、自機が変更されると言う仕様を実装すると、それぞれの機体別jikiをswitch〜caseで
分岐して呼び分けるわけ?
>700
じゃ、jikiの内部で、機体によって処理をswitch〜caseで分岐するわけ?
0703名前は開発中のものです。
2009/02/15(日) 15:22:52ID:hUQv8RGuコルーチンはスクリプト言語が実装してくれてるから、スクリプト内で使うんです。
(LuaやSquirrelがスクリプトの実行順に関して、協調型のスレッドをスタック型で内部実装してくれている)
コルーチンの生成にはちょっとコストが掛かるので、一度作ったら再利用して呼び出すことで無駄をなくしますね。
パフォーマンス的に厳しいデメリットに関しては、ネイティブ側で対応します。
(例えばSquirrelはC++のクラスをオブジェクトとして持つことも出来ます)
0704名前は開発中のものです。
2009/02/15(日) 15:24:03ID:FA9cfUTDスクリプト上のコルーチンの中から呼んでるC/C++関数の中でyieldしたい場合は?
0705名前は開発中のものです。
2009/02/15(日) 15:26:41ID:20MV6lUe擁護派 :本来スクリプト言語を適用すべき箇所に絞ってタスクシステムの導入可否の話をしている
アンチ派:本来ネイティブ言語を適用すべき箇所に絞ってタスクシステムの導入可否の話をしている
どちらもスクリプト言語を適用すべき箇所まで >>641 で組むとは考えてないだろうし、
どちらもネイティブ言語を適用すべき箇所までスクリプト化すべきとは考えてないだろう。
多分論点はここかな
論点1:「ゲームエンジン部分=ネイティブ言語の相互作用記述+スクリプト言語解釈部」は意見一致してるよね?
論点2:「個々のスクリプト→個々のタスク」というのも性能UPが必要ならありでは?
アンチはネイティブ言語を全廃してスクリプト言語に置き換えるべきとは言ってないと思うし、
擁護派はネイティブ言語の相互作用記述を分解してタスクに置き換えるべきとは言ってないと思う。
0706名前は開発中のものです。
2009/02/15(日) 15:26:41ID:hnmq8yzxまだ理解し切れていないのだけれど、
普通に継承使っては駄目ですか?
0707名前は開発中のものです。
2009/02/15(日) 15:28:05ID:kIY9LVp/どう変更されるかによるなぁ・・・
例えば、自機Aが後方に下がるシーンと自機Bが変わりに前方に出てくるシーンなんか入る日には
もうインスタンス2ついるわけだし操作がユーザにあるって点以外はすべてが別処理じゃね?
ペカっと光ってチェーンジ!でよくてもやっぱり変更が怖いから完全に別にオブジェクトだな・・・俺なら
0708名前は開発中のものです。
2009/02/15(日) 15:29:29ID:OFTP7lcIスクリプト内で対応しているコルーチンならコンテキストスイッチとか無いからパフォーマンスは大丈夫かもね。
でもそうなるとスクリプト管理オブジェ同士の依存関係が有る場合、状態取得とかで同期処理が必要になるが…
0709名前は開発中のものです。
2009/02/15(日) 15:31:07ID:FA9cfUTDいや、別にそれでいいけど、このスレに約一名C++ワカランチンが常駐してるから、最底辺にあわせて
判りやすいレベルで話した方がいいかと思って。
じゃ、共通部分をtemplateにしてvariantsをfactoryから作るようにして対応するんだ。
常道だよね、やっぱり。
0710名前は開発中のものです。
2009/02/15(日) 15:32:53ID:pf6wVUPlはじめてのCでも猫でもわかるでも読んで出直してくるべきじゃね?
0711名前は開発中のものです。
2009/02/15(日) 15:33:04ID:hUQv8RGuこうやって実装できなくないけど、実装しない方が良いと思う
http://www.chiark.greenend.org.uk/~sgtatham/coroutines.html
速度が必要でC++で実装しつつ、関数を途中で止めて戻す場面ってのがあまり思いつかないし、
スクリプト側でcoroできれば十分かと。
なので、スクリプトからC/C++関数へはサブルーチンのみと縛るべきかな。
もし必要になればそのときに考えます。
0712名前は開発中のものです。
2009/02/15(日) 15:34:28ID:kIY9LVp/そんなことして共通部分が共通でなくなっちゃったら大変だぜ
俺は継承はやらないほうがいい派
メンバで持つ派
0713名前は開発中のものです。
2009/02/15(日) 15:37:12ID:FA9cfUTDそんなのは結局、どこまでをまとめて一つのクラスにするかの問題だから、瑣末なことだよ。
作ったものを修正せずに済むとか思ってるほうが間違いだ。たとえメンバにしたとしても、
それを分離修正する必要があれば同じこと。
0714名前は開発中のものです。
2009/02/15(日) 15:38:45ID:hnmq8yzxあ、すまん 継承って軽く書いてしまったけれど、
自分も>>712と同じく、コンポジションとかいうの派
0715名前は開発中のものです。
2009/02/15(日) 15:39:48ID:hUQv8RGuそこが一番のネックですね。
スレッドは協調型のみですので普通のスレッドのような並列処理に関しては、
同期処理が保障されていないです。
(基本はシングルスレッドのみで実装しているので試してみたことがない)
並列可能なスクリプト言語は今後の課題ですね
0716名前は開発中のものです。
2009/02/15(日) 15:39:54ID:hnmq8yzx上の修正が末代まで来るのがやだから、集約使うのではないの?
0717名前は開発中のものです。
2009/02/15(日) 15:42:33ID:FA9cfUTD修正の手間はさほど変わらないよ。とくに機能を分離する場合はね。
0718名前は開発中のものです。
2009/02/15(日) 15:50:25ID:OFTP7lcIあれ?
>フレーム間をまたぐ処理の場合は、コルーチン(いわゆる協調スレッド、ファイバー、マイクロスレッド)を使います。
ってことはフレームをまたぐオブジェクトが複数ある場合は必然的に
並列処理が必要になるんだよね?
>並列可能なスクリプト言語は今後の課題ですね
となってしまうとその方法(コルーチン)では使い物にならないんじゃない?
結局、スクリプト使ったゲームで一部データ駆動されてるものも
オブジェクト単位ではタスクシステムなりに乗っかってスクリプトのupdate部分がオブジェクト数分定期的に呼ばれる
という実装なんじゃないかな。
でないとマルチスレッドの複雑性の問題をスクリプトが抱え込むことになるような…
0719名前は開発中のものです。
2009/02/15(日) 15:54:46ID:FA9cfUTD内部の状態変更要求を外から通知された場合、どう処理するかが問題。
実行途中のcoroutineを強制的に終了したとしても大丈夫かどうか。
0720名前は開発中のものです。
2009/02/15(日) 15:55:33ID:T/3xZEUAマルチプロセッサでのネイティブスレッドとは違って並列処理にはならないので
同期制御の類は要らないはず
時分割された処理の継続をあからさまにFSMのような形で実装するのと
違って、自然に書けるのがコルーチンの利点で、プログラムカウンタや
スタックのリストアを処理系がやってくれる
>>715が「課題」と言っているのは、マルチコアでのパフォーマンスが求められる
ようになった場合にどうするか、という類の話では
0721名前は開発中のものです。
2009/02/15(日) 16:00:34ID:h/ugUohb>>699
>コルーチン(いわゆる協調スレッド、ファイバー、マイクロスレッド)
ってのは結局・・・
//万里ゆうじ氏が著書で紹介していたタスクシステムを参考
struct Task
{
//(1) データ更新・描画処理用関数ポインタ
void (*Update_n_Draw)(Task*);
//(2) データ記録用バッファ。場合によってはメンバ変数に分解して固定。
char WorkBuf[WOKK_BUF_SZ];
//以下省略
: //タスク・チェーン結合用ポインタ
};
上のタスクシステムで言うところの、
1.Task構造体の生成・破棄
2.(1)の関数の切り替え
3.(2)のメンバ変数への分解
の処理パターンを、ある程度、限定・抽象化して、スクリプト駆動でルーチン化してるだけなんじゃね、実質?
コルーチンの生成・フレーム間維持・破棄のために、結局バックグラウンドで、タスクシステムが必要でしょ。
データのまとまりって言うのは、結局構造体だ。
0722名前は開発中のものです。
2009/02/15(日) 16:03:52ID:FA9cfUTD0723名前は開発中のものです。
2009/02/15(日) 16:03:59ID:hUQv8RGu>>720で合ってます。
現在の組み込みスクリプト言語はシングルスレッド仕様で、
マルチスレッド化やマルチコアの恩恵は受諾できないと思います。
0724名前は開発中のものです。
2009/02/15(日) 16:08:49ID:OFTP7lcIそーなると結局
コルーチン同士のリソース同期処理はどうなったの?
これはスクリプトの仮想マシンがシングルスレッドかマルチスレッドか、というのとは
別の話なのだが。
0725名前は開発中のものです。
2009/02/15(日) 16:11:02ID:h/ugUohb詳しく
0726名前は開発中のものです。
2009/02/15(日) 16:19:47ID:hUQv8RGu同期処理はLuaやSquirrelの仕事ですね。こちらが意識する必要はないです。
そもそも走っているスクリプト解釈スレッドは1つだけです。
複数のコルーチンをつくり、中断/再開を行うことで擬似マルチスレッドっぽいことはできますが、あくまで擬似です……。
あくまでコルーチンはコードの見晴らしの為だけに使います。(使うのも使わないのもスクリプト実装者の裁量による)
■ このスレッドは過去ログ倉庫に格納されています