トップページgamedev
1001コメント529KB

タスクシステム総合スレ part4

■ このスレッドは過去ログ倉庫に格納されています
0001名前は開発中のものです。2009/02/01(日) 12:38:10ID:rVEgp4cM
タスクシステムについての議論、相談、質問、雑談などのスレです

part3 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/
0030名前は開発中のものです。2009/02/03(火) 10:35:48ID:az8GBqBA
注意!! >>29 = 真性基地外のため、初心者は騙されるな!!!
0031名前は開発中のものです。2009/02/03(火) 12:02:10ID:vWXRMn0/
とりあえず
ttp://sdc.sun.co.jp/sunstudio/documentation/ss12/mr/man3cc4/task.3.html
昔のC++には含まれていたtask.h(task library)
今の標準にはない
0032名前は開発中のものです。2009/02/03(火) 19:50:07ID:+ZtfpvwK
近代的タスクシステムの構築
http://d.hatena.ne.jp/yaneurao/20090203#p1
0033名前は開発中のものです。2009/02/03(火) 20:20:13ID:bfgGLsQE
>>32
いい記事だとおも
0034名前は開発中のものです。2009/02/03(火) 21:10:48ID:jRNhtvu7
linus先生からのお言葉
http://tabesugi.net/memo/2009/1a.html#152154
0035名前は開発中のものです。2009/02/03(火) 21:24:50ID:lrih8mAc
>>32
どうせなら前スレでボコボコにされたタスク信者のために
明示的な引数の記述についてもコメントしてあげればよかったのにw
20090203とか今日だしよw
どうせみてんだろ>やねうらお
0036名前は開発中のものです。2009/02/03(火) 21:29:31ID:xRxybyai
>>32
>それではタスクシステムは現代においては不要なのかというとそうでもなく、
>成熟したタスクシステム(タスク自体のデバッグを支援するタスクデバッガのような環境を含めて
> 「タスクフレームワーク」と呼ぶほうがふさわしいかも知れない)は、ゲーム開発において依然として有用であり(以下略)
現代的に仕立て直しても有用性がデバッガの存在という1点のみか。
まずは一番最初にデバッガ完成させないと有用じゃないんだな
0037名前は開発中のものです。2009/02/03(火) 22:02:41ID:az8GBqBA
や ね う ら お、はじまったな!
0038名前は開発中のものです。2009/02/03(火) 22:29:12ID:XllhY44u
ここは空気読んでたすくしすてむはクソだ!って言っとけばいいのか?
0039名前は開発中のものです。2009/02/03(火) 23:38:52ID:eseY0VNG
>>31
コルーチンライブラリだね。コンテキストの保存と切り替えしてるね
 Win32APIのFiber
 protothreads
 Luaのコルーチン
 Squirrelのスレッド
 などなど
これらに相当するものでしょ
0040名前は開発中のものです。2009/02/04(水) 00:36:43ID:bPux8EGG
>>31
へー。C++標準にコルーチンを組み込む動きがあったとは知らんかった
コルーチン=協調的マルチタスクだから task.h なんだろうね
でもリンク先に「タスクシステム」とか書いてあるし、嫌タスク派に名前が悪いと怒られないか心配だなw

検索したらC++トランスレータ時代(1985年頃)のマニュアルが参考文献として上がってたわ
"A set of C++ classes for co-routine style programming"
by Stroustrup, B. and Shopiro, J. E.
in Chapter 2 of the C++ Library Manual
ttp://www.softwarepreservation.org/projects/c_plus_plus/cfront/release_e/doc/ClassesForCouroutines.pdf
0041名前は開発中のものです。2009/02/04(水) 01:31:33ID:NUZzb6Kr
>>40
>名前が悪いと怒られないか心配だなw

それは大丈夫じゃないかな
複数のジョブを協調的に並行処理・逐次処理する仕掛けになってるから
ユーザーはプログラムの中にsleep()とかを挟みこむだけでおk

job()
{
 while(1)
 {
  …
  sleep();
  foreach(…){
   …
   sleep();
  }
  …
  sleep();
 }
}
sleep()とかを挟みこむだけでライブラリが半自動的にタスクに分割してくれる
コンテキストの保存と切り替えを全部面倒みてくれる。スケジューリング機構も
一応入ってる。>>2とは雲泥の差だよ
0042名前は開発中のものです。2009/02/04(水) 02:19:05ID:bPux8EGG
>>41
そこはただの軽口だから、そんな真面目に説明されてもね
つか君はコルーチンを説明するフリをして>>2をけなしたいだけだろww別にけなしていいけどさw
まあストラウストラップ先生の書いたクラス群はシステムの名に値するみたいだし
今度からコルーチンシステムと呼ぼうかなー

関係ないけどやねうらおは絶対ここチェックしてるよなw
やねうらお対ひらしょータスク戦争勃発w
0043名前は開発中のものです。2009/02/04(水) 03:52:12ID:zoy9itGC
やねうらおはこんな場末のスレ、見てないだろ

>>32 は、前スレまでの議論よりずっとずっと先を行ってるから
彼にとってはこんなスレ、見る価値もないんでねーの?

さすがにこれは天晴れと言わざるを得ない
0044名前は開発中のものです。2009/02/04(水) 04:04:25ID:YtdnZlpb
>>43
みてないとか嘘だろ
だって「ごった煮」とか前スレ特有の言葉だしてきてるし
わざわざ見てますよアピールしてんだからかまってやれよw

でも前スレで話題に上がった引数に関して触れてないのはいただけないな
無視なら「そんなもんは無視」って名言してくれるだけでもスタンスわかっていいんだけど
別にいい悪いも正解不正解もないわけだし
0045名前は開発中のものです。2009/02/04(水) 21:49:37ID:mLZ417D5
>39
protothreadはコンテキスト保存してないよ。
0046名前は開発中のものです。2009/02/04(水) 23:51:04ID:Tig/dZbl
>>32
親切心から、敢えてコメントさせてもらうと・・・

アマチュアゲームプログラマ未満だな。
まともにゲーム製作を経験した人間が書いた記事とは、到底思えない。
これ誉めちぎっている奴の狙いって何なんだろ。
一部の明らかにテンションが違う応援団は、スルーするのが基本なのか?
0047名前は開発中のものです。2009/02/04(水) 23:58:11ID:iOg8fZiC
ほめちぎってる応援団なんてどこにいるんだ
0048名前は開発中のものです。2009/02/05(木) 00:10:20ID:e5oU/vxX
>>46
是非、どこかのブログで反論頼む!
0049名前は開発中のものです。2009/02/05(木) 00:31:46ID:9DTLfrVW
やねう先生の近代的なタスクの話を読んでみたけど、
boost::shared_ptrとかunordered_mapとか実装が近代的というだけで、
やってることは古典的だよね(そういう趣旨だから当然だけど)。
ってことで、Mix-in好きのオレが近代的なタスクを考えてみた。

古典的タスクシステムをupdate巡回リストであると仮定すると、
タスクとはすなわちフレームをまたいだ継続的処理の抽象化だと考えることができる。
継続処理を今風に考えれば以下の3種類に分かれるはずで、
どれが良いかはケースバイケースで異なる。

//(1)毎フレーム呼ばれる古き良きタスク(負荷が小さい。排他処理不要)
class PeriodicalTask {
public:
  virtual void update() = 0;
};

//(2)コルーチン動作するタスク(負荷は中程度。排他処理不要)
class CooperativeTask {
public:
  CooperativeTask(size_t stackSize);
  virtual int call() = 0;
};

//(3)ネイティブスレッド動作するタスク(負荷が大きい。排他処理必須)
class PreemptiveTask {
public:
  PreemptiveTask(size_t stackSize);
  virtual int start() = 0;
};
0050名前は開発中のものです。2009/02/05(木) 00:32:17ID:9DTLfrVW
ここでは描画オブジェクトとタスクは無関係だと考えて、以下のクラスを用意する。
無関係とするのは、描画オブジェクトが必ず継続処理を必要とするわけではないからだ。

//描画オブジェクト
template <class DrawContext>
class DrawingObject {
public:
  virtual void draw(const DrawContext& dc) = 0;
};

描画用リストは CompositeDrawingObject クラスが管理する。
インターフェイスは自明な気がするので省略。
さてゲームの主人公マリオをどう表現するかというと、

//マリオ
class Mario : public DrawingObject<DrawContext2D>, public PeriodicalTask {
public:
  void draw(const DrawContext2D& dc);
  void update();
};

このようにMix-inして作る。ここでは PeriodicalTask を Mix-in したが、
マリオの継続処理を CooperativeTask でコーディングしたければそれを選んでも構わない。
PreemptiveTask を選ぶのは明らかにオーバースペックで排他処理が面倒になるが、
やりたければそれもまあ可能だ。
0051名前は開発中のものです。2009/02/05(木) 00:32:50ID:9DTLfrVW
タスクと描画オブジェクトが無関係な理由はもう一つある。
例えば以下のように、描画オブジェクトでなくても継続処理をしたい場合があるからだ。

//テクスチャ画像を波打たせるトランジション
class RippleTextureTransition : public TextureTransition, public CooperativeTask {
public:
  int call();
};

とまあこんな感じはどうだろう。モダンっぽくね?
0052名前は開発中のものです。2009/02/05(木) 00:46:05ID:/BuTmFOA
1,2,3を混ぜたい時はどうするんだ?
単一の巡回呼び出しでは呼べないぞ、それじゃ。

というか、3は明らかに不要だろ。
taskの更新処理は1と2以外にないだろ。
0053名前は開発中のものです。2009/02/05(木) 00:48:58ID:e5oU/vxX
>>49
何か勘違いしているように思える。

(1)に限らず、(2)でも(3)でも毎フレーム呼び出されると思うのだが。
0054名前は開発中のものです。2009/02/05(木) 00:53:46ID:/BuTmFOA
>53
3は論外だが、普通に実装すれば1と2はきちんと呼び出し元に帰るから問題ないんじゃね?
0055名前は開発中のものです。2009/02/05(木) 01:01:17ID:e5oU/vxX
>>54
(2)は、1フレームごとに呼び出し元に戻らないのか?戻らないとしたらいつ戻るんだ?

そもそも1フレームごとに呼び出し元に戻すためにcoroutineにしているんだろ?

わけがわからん…。
0056名前は開発中のものです。2009/02/05(木) 01:27:02ID:9DTLfrVW
>>52
単一の巡回呼び出しですべて巡回させる必要はないと思う。
もちろん共通のタスクプライオリティを実装して単一巡回にしてもいいのだけれど、
ここではタスクの呼び出し順序に依存しないコーディングを前提としてみた(3はそもそも処理順序を付けられないし)。
んで、今までの慣例的なゲーム開発手法で考えると確かに3は使わないように思えるが、
これから先の開発手法(MTフレームワークとか)もにらんだ話であるし、
「タスク=フレームをまたいだ継続的処理の抽象化」という観点から同列に扱っている。
ただ、現状では貴重な資源であるネイティブスレッドを本当に他と同列に扱えるかというと難しいとは思う。

>>53
いや、3はただのスレッドだよ。2は、なんかごめん。確かに混乱するかもなこれ。
call() は毎フレーム(コンテキスト差し替えの上で)呼ばれる関数で、call() の中では yield し続けると思ってくれ。
0057名前は開発中のものです。2009/02/05(木) 01:37:27ID:e5oU/vxX
>>56
毎フレームcallが呼び出されるなら、結局呼び出し側(タスクシステム)からしてみれば、
単なるメソッド呼び出しなわけで、その実装の詳細(coroutineで書かれているか/いないか)は
どうでもいいのでは?

だから、(1)と(2)でinterfaceを変更する意味がわからない。
どう見ても共通のinterfaceで良いように思える。
0058名前は開発中のものです。2009/02/05(木) 01:42:57ID:e5oU/vxX
>>56
> 「タスク=フレームをまたいだ継続的処理の抽象化」という観点から同列に扱っている。

についてだけど、タスクはフレームをまたぐが、少なくとも1フレーム以内に制御はいったん呼び出し側に
戻ってこないと困ると思うのだが。

ID:9DTLfrVWは何かここを勘違いしているような気がする。

そもそもスレッドを割り当てるのは、呼び出し側で制御すべき問題であって、
スレッド一つ割り当てて実行させたいからと言って呼び出される側のタスクが勝手に
スレッドを作っていいわけではない。

ここまではわかってる?
0059名前は開発中のものです。2009/02/05(木) 02:02:00ID:9DTLfrVW
>>58
んー、古典タスクの定義にこだわりすぎだと思うんですが
あくまで近代的タスクという思考実験なので・・・
暇な時に簡単な参考実装でも作ってみようかな

>タスクは(略)1フレーム以内に制御はいったん呼び出し側に戻ってこないと困ると思うのだが。
1と2は戻ります
3は戻りませんが、ユーザプログラムはそれを分かって3を使うわけなので困らないと思いますよ

>そもそもスレッドを割り当てるのは、呼び出し側(タスクシステム)で制御すべき問題であって、
スレッドの割り当てはユーザプログラムが制御すべき問題であって、
呼び出し側(システムプログラム側)ではない、という考えでこうなっています。
MTフレームワークではシステム側で各スレッドにタスクを振り分けて負荷の分散を
行っているらしいのでそういう場合は仰るとおりですが、
それを前提にすると1と2も排他処理必須になるのでちょっと複雑になりすぎるかなと。
0060名前は開発中のものです。2009/02/05(木) 02:11:55ID:e5oU/vxX
>>59
> 3は戻りませんが、ユーザプログラムはそれを分かって3を使うわけなので困らないと思いますよ

戻らないということは、そのスレッドは呼び出し側で生成したスレッド
そのまま使い切ることになるのだから、「呼び出し側(システムプログラム側)では
ない、という考えでこうなっています」と明らかに矛盾してるんだが。
0061名前は開発中のものです。2009/02/05(木) 02:23:22ID:9DTLfrVW
CreateThread()というAPIがあるとして、誰がCreateThread()を呼ぶかと言う話なら
それはシステム側になると思いますけど、
作成タイミングもスタック容量もユーザプログラムが制御するのだから別に矛盾してないと思いますよう

それより、なんか疑問点を出されているというより粗探しをされている気がする
どうして突っかかられてるのかが分からないなあ
0062名前は開発中のものです。2009/02/05(木) 02:38:16ID:e5oU/vxX
>>61
粗探しをしているつもりはないので、疑似コードなり何なりを出してもらえれば
協力はさせてもらうが。

threadというのは生成に時間がかかるものであって事前に作ってpoolingして
おくのが普通であって、stack sizeなんか都度指定されたらpoolingしている
threadが使い回せない。

つまり、(3)でスレッドを割り当てて欲しいときにstack sizeの指定はいらない。
タスクシステムからのupdate呼び出しのなかでスレッドを割り当てて欲しいときに

threadPooler.Run(boost::function(&MyClass::Worker));

とするだけのことではないか?

だから、(3)を、普通のタスク(1),(2)と区別する意味が俺にはよくわからないのだが…。
0063名前は開発中のものです。2009/02/05(木) 03:06:56ID:WlW8taMc
とりあえずどんな問題を解決したいのか明らかにしてからコード書いてください。おねがいします。
0064名前は開発中のものです。2009/02/05(木) 03:10:28ID:9DTLfrVW
>>62
なる、プールされたスレッドってのは考えてなかったです

例に挙げられたコードも分かりやすいと思いますが、
とりあえず>>49の方向でそうした実装を取り入れるなら、
PreemptiveTask のコンストラクタがスタックサイズを引数に取らないようにして、
内部的にプールされたスレッドを使い回すようにすると良さげかもですね
それか、必ずプールされているのも都合が悪いことがありそうだから
PooledPreemptiveTask のような新しいクラスにそうした実装を組み込むか
とりあえず、その辺はより実装に近い部分なので、ゆっくり煮詰めていくたぐいの話ではないですかね

1、2、3をそれぞれ区別するのは、使い手側から見た時に混同せず
明確に区別すべきものだからです(コーディング方法もそれぞれ異なるし)
>>62はシステム側の都合から見てるから区別不要に思えるんじゃないかな

>>63
え、おれ?ごめん

ということですいませんが、そろそろ寝ます
敗北宣言
0065名前は開発中のものです。2009/02/05(木) 03:50:41ID:MYSEarFY
近代的タスクシステムの構築(2)
http://d.hatena.ne.jp/yaneurao/20090204
0066名前は開発中のものです。2009/02/05(木) 04:12:57ID:Ib2V0W+J
やねうらおの方からきますたw

まあ、ゲームオブジェクト管理周りをどうするかは作るもん次第、銀の弾丸なしってことで、
それはプログラマの仕事がなくならないってことで、いい話なんじゃね。
0067名前は開発中のものです。2009/02/05(木) 07:42:18ID:V08fWeRa
やねも昔ほど強く言わなくなってるな
実は必要無いってもう気付いてるな
そもそもタスクシステム、コーティングの手間しか削らない割に記述の複雑さは一級品だからな
ベタガキで誰でも読めるソースになるならそのほうがいいだろ
長い期間強く組む為には構造は単純でないと駄目なんだよね
0068名前は開発中のものです。2009/02/05(木) 07:42:24ID:/BuTmFOA
>64
1,2,3を混ぜて巡回呼び出ししたい場合というのが存在するから、同一I/Fから呼び出せないと困るぞ。

例えば、全てのtaskにコンテキスト保存が必要では無い場合に一部taskは1で作成するとかな。
0069名前は開発中のものです。2009/02/05(木) 17:15:53ID:tABpRsfL
>>32
現代じゃなくて近代なのか。ずいぶん遠慮がちに書くのだなぁ。最初から後退戦か
敗北主義を匂わせれば、相手は正面から斬り付けるのを躊躇うはず、という計算が
見え隠れすんなぁ

>いまの視点(2009年)で見たときに拙著(ASIN:4798006033)にて不足している部分を補足するため

今までは利得がどこにあるのかを決定的に見誤っていた、と白状したほうが高感度アップな

>成熟したタスクシステム(タスク自体のデバッグを支援するタスクデバッガのような環境を含めて
>「タスクフレームワーク」と呼ぶほうがふさわしいかも知れない)は、ゲーム開発において依然として有用であり

それにしてもタスクフレームワークとか鼻クソみたいな造語を作るの好きな人が多いな
ビデオゲーム開発のためのフレームワークなんだろ?
ビデオゲームというのは何かしらの時間ステップで何かしらの逐次処理(数値積分など)を
繰り返すもの。そしてその処理は複数。だから並行処理ないし並列処理することになる
どんなものであれ、その内部でジョブステップ(タスク)が駆動するなんて当たり前のこと
ありふれたこと。むしろないほうがおかしい

なのにビデオゲーム開発のためのフレームワークの看板にタスクを掲げる
つまり【タスク】が他のフレームワークには存在しない特徴でありウリだと思い込んでる

タスクというキーワードに何か特殊な意味・特定の実装(>>2とか)を連想し、それ以外は
タスクではない、という視野狭窄・自己中・ド田舎ルール・カルト信仰が見え隠れするね
つまりタスク厨

タスクというキーワードに対する思い入れの強さ。これは>>2、松浦本ベースの劣化
トンデモ情報による刷り込みがやねうらおにも及んでいた可能性を示唆する
0070名前は開発中のものです。2009/02/05(木) 20:01:26ID:1mXFjsrF
何と戦っているんだ?
0071名前は開発中のものです。2009/02/05(木) 20:05:59ID:tABpRsfL
>>32
>現代において、タスクシステムを実装するなら、もう少しタスク間通信を抽象化してタスク側から
>タスクシステムが保持しているlistには直接触れないようにするべきだが

今度は近代じゃなくて現代なのか
はっきり言っちゃうよ。それは時代ではないんだよ。それは開発規模に応じた普遍的な要求なんだよ
例えば大所帯でRPG作るとき、みんながジョブエントリ・タスクエントリのコンテナに直接触れたらどうなる
わかるよな?
15年以上前にはビデオゲームの世界にさえジョブモニタやタスクモニタといったものが存在した
これは汎用機や組み込みシステムのモニタやOS(RTOS)が大昔に進んだ道を踏襲しているに過ぎない

32bit機が登場した頃には中堅どころでさえブクブクと膨れ上がるゲームのボリュームに汲々としており
ジョブを記述するユーザー(スクリプタ含む)にジョブエントリやタスクエントリのコンテナへの自由な
アクセスを許可するなんて蛮勇以外のなにものでもないケースは珍しくなくなっていた
一定以上の規模になればユーザーを中枢から隔離するなんて時代を問わず当たり前のこと
CだのC++だのアセンブリ言語だの関係ない

これを【現代】の流れというなら、それはやねうらおの内なる世界における歴史的系譜を辿る際に
現代の1ページに登場するとある事変に過ぎず。やねうらおの個人的出来事に過ぎない
『やねうらおの歴史 〜やねうらおの近代そして現代〜』というタイトルで出版したほうがいい
みんな買うよ
0072名前は開発中のものです。2009/02/05(木) 21:33:53ID:HwyPz9yB
ID:tABpRsfLはなんでそんなに日本語が不自由なの?
0073名前は開発中のものです。2009/02/05(木) 21:44:34ID:sYm6Gfdu
タスクというキーワードに対する思い入れwww
0074名前は開発中のものです。2009/02/05(木) 21:48:23ID:Kg6Z2A1M
やねが今回タスクシステム(なにそれ?)を語りだしたときに
それがどういう規模のゲーム開発のお話なのか、という部分には
一切言及しなかったよな
この手のお話には必須の大前提なんだけどバサーリ省いた
あらゆる規模にタスクシステムとやらいうものが適用するメリットがあると
考えてるんだろうかね
もうこの時点で彼のタスクシステム(はぁ?)論は敗北確率急上昇だろ

とても残念だ

少人数・ないし一人のプログラマによる小規模開発ではベタ書きのがいい
彼の言うタスクフレームワーク(あ?)とかいうもの。こいつを構築するために
支払うイニシャルコストがペイできる分岐点ってもんがあるわけ

やねはここを見積もってないんだろうね


0075名前は開発中のものです。2009/02/05(木) 21:56:59ID:Kg6Z2A1M
誰と作るのか。何人で?そいつらの戦闘力はいくつ?期間は?実装対象は?
開発機材は?既存のライブラリとかのリソースは?買っていいの?

こういうファクターを丸無視してコーディングスタイルとか設計の是非を語ろうったって
解なんて出やしない。だからやねがエロゲ作ってるならエロゲ話のことだと言えばいいんだよ

PC用3Dエロゲにおけるタスクシステムの有効性について

とかな。あ、3Dは駄目なんだっけこのオッサン
0076名前は開発中のものです。2009/02/05(木) 22:06:28ID:Kri4Crxo
やねうや夫は2Dオヤジだから一般化して語れないぞ

あとゲーム専用ハードのゲーム開発経験もないんじゃないかな
0077名前は開発中のものです。2009/02/05(木) 22:39:01ID:tABpRsfL
やねうらおさんってコンシューマ畑とも縁遠いのか。それは失礼した
DSで死にそうになってるフェードアウトハゲが10年単位の周回遅れで
発明した独自理論を得意げに語ってるのかと思ってた

エロゲの人ならこういう発見もアリなんじゃないかな。煉獄へようこそ
0078名前は開発中のものです。2009/02/05(木) 23:02:22ID:AceVSe0N
>>36
前々スレから散々におわせていたことをようやく認識した
ということだろうね

IDだのハンドル云々の話は10年近く前にファミベのよっしんが記事を書いてる
http://www2.tky.3web.ne.jp/~yosshin/memo/000213.html
アーケードやコンシューマと無縁なやねなら確実に読んでると思うんだけどね
参考リンクとして貼りゃいいのに

よっしん氏が呼んでるタスクシステムという代物と>>2は同一ではないよな
>>2はタスクリストとかいうものを周期的にナメまわしてバッチ処理するだけ
「はいこれでオシマーイ。あとはお前らにお任せだっよーん」みたいなゴミカス
最近じゃこれだけでタスクシステムってことで通用するんだから
タスクシステムはタスクの相互作用なんて気にする必要まったくないわけ
変な通信機能盛り込むなよ
0079名前は開発中のものです。2009/02/05(木) 23:10:23ID:yvQde++7
>>74
http://d.hatena.ne.jp/yaneurao/20090204

> すべてのゲームにタスクシステムが必要なのではない。

はっきりと書いてあるのに

> あらゆる規模にタスクシステムとやらいうものが適用するメリットがあると
> 考えてるんだろうかね

とは、とても残念な理解力ですね。
0080名前は開発中のものです。2009/02/05(木) 23:15:47ID:/BuTmFOA
>74
> 彼の言うタスクフレームワーク(あ?)とかいうもの。こいつを構築するために
> 支払うイニシャルコストがペイできる分岐点ってもんがあるわけ
> やねはここを見積もってないんだろうね

逆に、一人で開発してるなら何やってもイイと思うけどね。
0081名前は開発中のものです。2009/02/05(木) 23:45:46ID:/BuTmFOA
>12
> update();
> で動くのと
> update(jiki,teki,tama,unko);
> で動くのとじゃ
> プログラムとしては絶対に下のがいい

普通に考えると、visitorに共通コンテキストを持たせてコンテナ内のタスクを巡回処理させる。
引数で渡すなんて愚の骨頂。
0082名前は開発中のものです。2009/02/06(金) 00:09:26ID:wGKtGJau
>>81
>>12=スレ主=基地外が前スレで判明している。触るな危険。
0083名前は開発中のものです。2009/02/06(金) 00:12:08ID:H1z7Q+5u
>>81
引数のない関数ってどうよ?
お前、自分が使ってみろって言われたときのこと考えろよ
0084名前は開発中のものです。2009/02/06(金) 00:15:46ID:4xm8YBEc
>83
おまえvisitorの意味判ってないだろ。
0085名前は開発中のものです。2009/02/06(金) 00:18:56ID:H1z7Q+5u
>>84
関係ないね
大事なのは引数で渡すことによって関数無いで変更される恐れのある
インスタンスを明確にすること
お前のような素人はデザパタの前にC言語でも勉強しろ
なにせ引数もよくわからずグローバル変数で渡してるぐらいの低知能なんだからなw
0086名前は開発中のものです。2009/02/06(金) 00:19:44ID:4xm8YBEc
>85
やっぱり判ってないのかw
0087名前は開発中のものです。2009/02/06(金) 00:20:01ID:1vVyPOFv
釣りにしか見えない
0088名前は開発中のものです。2009/02/06(金) 00:20:20ID:H1z7Q+5u
>>86
引数の有効性はわかったかね?
0089名前は開発中のものです。2009/02/06(金) 00:23:00ID:H1z7Q+5u
>>86
前スレよろしく
今回も俺が特別に教えてあげよう

上のupdate()は関数内で何にアクセスしてるのかまったくわからないが
下のupdate(jiki・・・)はアクセスしてるインスタンスを引数に絞ることができる
(グローバル変数を使わないという規約を守れば)
これによってデータの安全性が保障されるというわけだよ
君のようにコーディングの効率ばっかりとって
引数もわからんような低知能は俺と話すようなレベルにないということがわかったかね?
0090名前は開発中のものです。2009/02/06(金) 00:26:08ID:ux7UjNgY
>88
ここまでムキになるということは、>12=スレ主ってヤツかwww
修正コストとか考えたこと無いんだろうなぁ。幸せなヤツw
0091名前は開発中のものです。2009/02/06(金) 00:26:51ID:1vrKKSIM
ID:H1z7Q+5uが噂のスレ主だな
一人だけ極端にレベルが低いのにその自覚なし
0092名前は開発中のものです。2009/02/06(金) 00:28:03ID:Cfc6lR6P
こらこら、触るな危険といってるだろうに。
0093名前は開発中のものです。2009/02/06(金) 00:31:12ID:ux7UjNgY
>89
> 下のupdate(jiki・・・)はアクセスしてるインスタンスを引数に絞ることができる

笑っちゃうなwww
ということは、ID:H1z7Q+5uはtaskの種類によって引数が変わることが前提か。
もしかしてtask保持コンテナも別に持つ派なのか?

例えば敵タスクがあったとして、雑魚敵Aと雑魚敵Bが異なるコンテキストを必要とする場合とか
考えたこと無いのか? 雑魚敵Aと雑魚敵Bで最小公倍数的な引数を取るupdate関数をつくったら、
それはID:H1z7Q+5uが>89で言っていることと矛盾するって気づかないのか?
0094名前は開発中のものです。2009/02/06(金) 00:34:26ID:1vVyPOFv
残念なスレ主と遊ぼうのスレはここですか?
0095名前は開発中のものです。2009/02/06(金) 00:52:39ID:nWDkACnD
押すなよ! 絶対押すなよ!
0096名前は開発中のものです。2009/02/06(金) 00:53:38ID:ZPF/rc3n
>>80
その一人開発ってことは趣味の世界の話でいいよな?
プロの一人開発ったってフリーランスという名のプーでもなければ
自分一人の問題じゃねーし、他と折り合い付けないと会社つぶれるしな
>>2ベースのゲロゲロフレームワークなんて誰も使いたがらないから作らないよ

で、趣味野郎でオナニーフレームワーク?これもあんま意味ないよ女子高生
大多数のパンピースペックの趣味プログラマは無難にサクっとゲーム一本
作りあげる方法を模索する
パンピースペックの趣味野郎がオナニーフレームワークとかいうハマリ道に
進んだら大半は生きて還ってこれん。終わり無きライフワークになるだろ
まぁそれはそれで楽しい人生なのかもね。否定はしない

ゲームではなく部品を作ることに情熱燃やして技巧に走って茨の道へ突進して
何年もの歳月をかけて山篭りして誰にも使われないフレームワークを構築する人生
悪くない。でもその結果が>>2ベースのゲロゲロシステムじゃな。成仏できんの?w
0097名前は開発中のものです。2009/02/06(金) 00:59:04ID:1vrKKSIM
96もスレ主じゃね?こいつ本当に頭おかしいんだな。
0098名前は開発中のものです。2009/02/06(金) 01:00:52ID:ZPF/rc3n
引数君と一緒にすんなハゲ
0099名前は開発中のものです。2009/02/06(金) 01:05:33ID:1vrKKSIM
>>98
じゃあ、この残念な引数君にも何か言ってやってくれ
0100名前は開発中のものです。2009/02/06(金) 01:17:02ID:ZPF/rc3n
引数君がアンチタスクだということは知っているが、前スレ終わりごろの
議論の内容がよくわからん
俺は>>2=チンカスゴミカス だと思ってるが引数君とは批判のベクトルが違うようだ
彼は数種類のクラスに共通のインターフェースを与え、共通のコードから呼び出す
というメカニズムを全否定してるのだろうか?だとしたらそれは仮想関数の全否定であり
わけわからん

引数君の主張内容がよく分かってない
0101名前は開発中のものです。2009/02/06(金) 01:25:06ID:1vrKKSIM
>>100
>>12
0102名前は開発中のものです。2009/02/06(金) 01:29:48ID:ZPF/rc3n
あぁ?
0103名前は開発中のものです。2009/02/06(金) 01:34:39ID:1vrKKSIM
引数君の主張なら>>12のリンク先を見れば十分わかると思うんだが、わからないのか?

それとも、あんたも日本語の残念な人か?
0104名前は開発中のものです。2009/02/06(金) 01:39:11ID:ZPF/rc3n
俺は前スレの>>823だ。何なら他の発言も発掘してこようか?
0105名前は開発中のものです。2009/02/06(金) 01:43:50ID:OdnmQxD5
引数君の方がまだ技術に近い話をしてる分マシだな。
もしかして彼はひらしょー氏の言うデータと処理の分離を
超まわりくどく主張しているのかな。
0106名前は開発中のものです。2009/02/06(金) 01:50:49ID:1vrKKSIM
>>104
前スレ823か。

引数君よりは能力的にマシだということはわかるが、説明がくどく、わかりにくい。

俺はこんな内容の薄い、回りくどい説明を読むのはまっぴらごめんなので、さいなら。
0107名前は開発中のものです。2009/02/06(金) 02:08:15ID:EVIE955W
ESP能力に問題があるID:1vrKKSIM は
すべてのアンチタスクがスレ主に見える病気を克服するべき
0108名前は開発中のものです。2009/02/06(金) 02:09:41ID:ZPF/rc3n
超能力能力か
0109名前は開発中のものです。2009/02/06(金) 02:12:05ID:EVIE955W
くっ…。どうして「お前はバカを克服するべき」って言ってくれないの?
内容の薄い、回りくどい指摘を読むのはまっぴらごめんなので、さようなら
0110名前は開発中のものです。2009/02/06(金) 07:38:45ID:RQ4iGJCo
お前等馬鹿は、プログラミングで一番時間がかかるのはどこですか?
と聞かれてコーディングとは絶対に答えないくせに
コーディングの手間ばかり減らすことに執着している
なかなか読めないプログラムってなんだ?
構造が複雑なプログラムじゃないの?
お前等馬鹿は全く逆のことを自己満足のためにやっているオナニストだ
プログラマならせめて理詰めで動けよ
お前等凡人から理性まで抜いたら猿と変わらないだろ
0111名前は開発中のものです。2009/02/06(金) 09:47:48ID:SpEabv2C
>>32
えーと、この人ってイイ歳した何者なの?プロ?パソゲー専門なんじゃない?

>ビデオゲーム黎明期においては、オールアセンブラで書くことが普通だったので、
>std::listのような便利なコンテナがあるわけでもなく、技巧的な方法でstd::list
>みたいなことを実現していただけ

えっえー?この人のいうビデオゲーム黎明期っていつごろのお話なのかな?
70年代?だったらまずZ80アセンブリで>>2を書いてみればいいのに。おかしな人だよ
16bit機時代?intrusiveなコンテナを使った理由がオールアセンブラだから?本当に?

最近は想像だけで昔話を書いても教科書になるのかしら?
どこのゲー専の子が犠牲になるのかしら。ちょっと可哀相ね
知らないことは知らないって言えばいいし、足を使って取材しに行けばいいと思う
んで、頭下げて監修してもらえばいいと思う。このままじゃあんまりだよ

>古典的なタスクシステムにおいてはタスクに番号(プライオリティ)が振られており
>番号を指定して特定のタスクのポインタを得ることが出来た

えっえー?つーか古典的タスクシステムってなんじゃい?ファンタジーゾーンなの?

0112名前は開発中のものです。2009/02/06(金) 10:34:43ID:wGKtGJau
>>111
あんた、何かがしゃべり方がキモイんだけど。

それはそうと、相手は年収何千万もある凄腕のプログラマらしいので、
技術的な反論は是非どこかのブログでやっちゃってください。
0113名前は開発中のものです。2009/02/06(金) 21:26:12ID:+KF0MHRv
タスクシステムでグローバル変数使うから駄目だって意見が多いけど、
でも見渡してみると、ウィンドウズのウィンドウだってそういうしくみだしなぁ。
0114名前は開発中のものです。2009/02/06(金) 22:07:10ID:H/Ui7lv7
エロゲー製作は大変ナリよ
http://d.hatena.ne.jp/yaneurao/searchdiary?word=%a5%a8%a5%ed%a5%b2%a1%bc%c0%bd%ba%ee
0115名前は開発中のものです。2009/02/06(金) 22:31:40ID:RQ4iGJCo
>>113
ウィンドウ同士であまりやりとりしなくてもあの複雑さだぞ
リストコントロール2つを連動させるだけでもやばいくらいの手間
基本的にウィンドウズの作り自体関連がたくさん生まれる処理に向いてない
あくまでも独立した動作が前提
0116名前は開発中のものです。2009/02/06(金) 22:36:12ID:nWDkACnD
>>113
そう思ったのなら両方とも自分で実装してみて比較検討だ!

でも数千行レベルでは使いやすかったやり方が数万行レベルでも同じように使いやすいままかどうかはまた別問題だ!
そこは注意な! 王道はグローバル変数使わないことだぞ!
0117名前は開発中のものです。2009/02/06(金) 23:12:31ID:ux7UjNgY
また引数クンの登場か。

>93について、具体例を挙げて答えてよ。
0118名前は開発中のものです。2009/02/06(金) 23:44:30ID:H1z7Q+5u
>>117
はぁ?何言ってるのかわからない
俺が言いたいのは関数に引数つけろってそんだけだけど?
コンテキスト?は?
そんなもん使った時点で負けだ馬鹿
設計死んでるんだよ
俺の価値観ではそんなもん使った時点で負け
void*となにも変わらない
0119名前は開発中のものです。2009/02/06(金) 23:45:58ID:H1z7Q+5u
まあ、用は固定でない引数に意味がないんだよね
俺の価値観からすると
0120名前は開発中のものです。2009/02/06(金) 23:53:12ID:4xm8YBEc
>118
> はぁ?何言ってるのかわからない

じゃ、具体的に質問するけど、雑魚敵Aと雑魚敵Bに関係性が出てきたらどうするの?
例えば雑魚敵Aは雑魚敵Bを殺すことがある、となった場合に、雑魚敵Aのupdate関数の引数に
雑魚敵Bのリストを渡すの?
0121名前は開発中のものです。2009/02/07(土) 00:21:27ID:lLkuERdr
>>120
>雑魚敵Aのupdate関数の引数に雑魚敵Bのリストを渡すの?
それをやってはダメ
哲学的になるけど
基本的に雑魚敵Aが雑魚敵Bを殺す現象ってのは
雑魚敵Aの中の処理でも雑魚敵Bの中の処理でもないでしょ?
つまり雑魚敵ABに書くべき処理ではない

このアクションはあくまでも雑魚敵Aと雑魚敵Bが存在する空間で起こったことであって
それをシーンクラスとしたらそこに書くべき処理じゃねぇかな?
オブジェクト指向的にはよ

俺はオブジェクト指向原理主義者(テロリストではないw)だけど
基本的にオブジェクト指向を変な解釈をしないとしたら
種類の異なる(=クラスの違う)雑魚敵A、雑魚敵B、雑魚敵C、雑魚敵Dといたとして
それらの関連、つまりAxB、AxC、AxD、BxC、BxD、CxDの関連は全部シーンクラスに書くべきじゃないのかな?
そこはオブジェクト指向は手伝ってくれないと思うんだけどね(原理主義者的には)
昔ながらのC言語風味に書いたほうがうまくいくと思うよ
0122名前は開発中のものです。2009/02/07(土) 00:23:19ID:UFXAc++2
>121
> 種類の異なる(=クラスの違う)雑魚敵A、雑魚敵B、雑魚敵C、雑魚敵Dといたとして
> それらの関連、つまりAxB、AxC、AxD、BxC、BxD、CxDの関連は全部シーンクラスに書くべきじゃないのかな?
> そこはオブジェクト指向は手伝ってくれないと思うんだけどね(原理主義者的には)
> 昔ながらのC言語風味に書いたほうがうまくいくと思うよ

今はっきりわかった。キサマはクズだ。
0123名前は開発中のものです。2009/02/07(土) 00:30:10ID:lLkuERdr
>>122
なんでだよ
いいこと教えてやったのに
何がどうダメなのか言ってみろ
勉強になるぞ
なにせ俺は10年以上もやってんだからな
0124名前は開発中のものです。2009/02/07(土) 00:32:45ID:NuBn44S3
10年以上ワナビー君ですかwww
ヒッキーニートで親のスネカジリ。楽しそうですねwww
0125名前は開発中のものです。2009/02/07(土) 00:35:05ID:lLkuERdr
>>124
不毛な会話したくないんだ
どこがどうダメなのか思ったこと言ってみろ
なんとなく漠然とある自分にとっての常識なんて大抵間違ってる場合が多いぞ
0126名前は開発中のものです。2009/02/07(土) 00:38:14ID:NuBn44S3
>125
雑魚敵が20種類くらいいるとして、それが相互に関係しあうことを考えてみろよwww
20種類くらいなら、RTSとかだと当たり前にいるぞ。
0127名前は開発中のものです。2009/02/07(土) 00:38:49ID:XPRCk6pD
というか、どういえばいいんだろう。
あっちのスレでも書いたんだけど、どの処理を誰が担当するかが難しいわけであって、
タスクシステム云々、グローバル変数云々はあんま関係ないと思うんだが。
たとえば、石クラスと、マップクラスと、それらを管理するシーンクラスがあったとして、
・石に重力を働かせる処理
・石と石の衝突処理
・石とマップの衝突処理
は、それぞれどのクラスが担当すべきだろうか。
0128名前は開発中のものです。2009/02/07(土) 00:39:00ID:qvO9PNvj
ヒッキーだが有能なゲームプログラマの発言>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>(越えられない壁)>>>無能な社会人もどきヘタレグラマの妄言

それがここのルールだ。覚えておきな。
0129名前は開発中のものです。2009/02/07(土) 00:39:49ID:lLkuERdr
>>126
そりゃ当然それだけの処理が必要になるだろうね
仮にプログラムの組み方が変わったところで
その数が少なくなることは絶対にないからね

それを踏まえて何が問題?
■ このスレッドは過去ログ倉庫に格納されています