OOとゲームプログラミング
■ このスレッドは過去ログ倉庫に格納されています
0001名無しさん@お腹いっぱい。
01/11/07 23:55ID:HnYWCQK1行うことが出来るのか語り合うスレです。
0779名前は開発中のものです。
02/03/20 03:03ID:???ああ、タスク毎の処理は1種類で、当たり判定の処理(タスク実行順に
依存したくない処理)はタスクマネージャーがグローバルに行う、ってわ
けですね。
(´ー`)。oO( 本当、人それぞれだなぁ )
0780名前は開発中のものです。
02/03/20 06:31ID:9RjuXxJB実行速度が速い、もしくは同等と書かれていたんだけど、
ヘボプログラマはCで作っておいたほうが無難ということなの?
そこで言われているCとC++との違いはクラスの使用から来るもの?
0781名前は開発中のものです。
02/03/20 07:15ID:???実際にわずかなオーバーヘッドがあるし、まずい設計では
暗黙のコンストラクタ/デストラクタによって積み重なって遅くなる。
C++についてよく理解してないと、ただ遅いだけの道具になるよ。
0782781
02/03/20 07:18ID:???同一な C プログラムなら C++ でコンパイルしても
速度はほぼ同一なはず。ライブラリとか最適化の具合にももちろんよるけど。
0783名前は開発中のものです。
02/03/20 11:13ID:???書籍「Inside the C++ Object Model」で詳細に解析してるから、それを
読むのがいいと思うが。
メンバ関数(メソッド)を呼び出す場合に this が暗黙のうちに渡されたり、
仮想関数を呼び出すと間接参照が何度か(一般には 2 回)入ったりす
る。ただ、このあたりのことは C でも同じ処理をやろうと思ったら、
関数の引数として、構造体へのポインタを渡す
関数ポインタを使う
必要があるから、ホントは変わらないんだけど。
> 暗黙のコンストラクタ/デストラクタによって積み重なって遅くなる。
synthesize constructor / destructor のことを言ってるんだと思うが、
それなら C だって「初期化処理を入れたら遅くなる」というのと同じ。
trivial constructor / destructor で済むクラスなら、初期化・終了処
理を省くことも出来るし。
C でも C++ でも「同じ処理をさせよう」と思うと、実際には「同じだけの
コストがかかる」ことになる。ただ C++ では、synthesize constructor/
destrurctor や temporary object のように
コンパイラが、見えないところでコードを付け加える
ことがあるから、そこを意識していないと、たった数行のコードなのに
コンパイルすると数千命令に展開されていた、ということが有りうるの
で注意が必要。
0784名前は開発中のものです。
02/03/21 00:42ID:I/OXI3byフォトショップのレイヤーを思い浮かべると良いと思われ。
当たり判定を取る当たり同士をグループ化して、グループに番号を付けておく。
進入禁止系のあたりをレイヤー0番に置くとして、壁、NPC、敵キャラのあたりは
HitMe( ???, 0)と呼び出してやる。プレイヤーオブジェクトはそれが壁なのかNPCな
のか区別せずにすむ。
で、レイヤー1番はアイテム系の判定として、アイテムオブジェクトとプレイヤー
オブジェクトだけが所属する。そうすればNPCオブジェクトの方で接触のあった
オブジェクトがアイテムだったら何もしない、なんてコードを書かなくて済む、と。
こんな感じ?
0785名前は開発中のものです。
02/03/21 11:11ID:???0786名前は開発中のものです。
02/03/21 13:39ID:???なるほど。参考になったよ。
0787名前は開発中のものです。
02/03/22 10:21ID:???0788名前は開発中のものです。
02/03/22 23:51ID:???すまそん。マスター入れてやっと家に帰って来れました。
レイヤー化のメリットはまさに784さんの言うとおり。汎用的な当たり判定管理クラスを
1つ作ってあとはゲームデザイン次第でプログラマが自由にレイヤーを利用みたいな感じね。
更なるメリットとしてヒットアルゴリズムの分離ってのもありまして。
「矩形の重なりによるヒット判定」
「球形や線分との距離による判定」
「背景物のようなn次元マップデータとの判定」
「ランドスケープやポリゴン等のベクトルデータとの判定」
など、これまたゲームデザインの要求に応じて利用/拡張すればいいと。
はっきりいってこの機構自体は1個作っちゃえば3Dゲームにもバリバリ
に応用できるし、斑鳩みたいな2Dの3Dの混在なんかも結構簡単に出来
るよね?
ただまぁ、C++としての実装は自分はヘタッピなのでだれか上手い実装例
をみせてくれないかなーと。テヘッ。
0789名前は開発中のものです。
02/03/23 01:20ID:???全キャラクタのタスク更新
↓
判定管理クラスの関数を呼び出し→各キャラクタのタスクのコールバック関数呼び出し
↓
描画
みたいな流れかと思ったんですが、
コールバック関数内でタスクの状態(位置など)を変化させられないと、
キャラクタ同士めり込んだ状態とかで描画されてしまいますよね?
その辺はどう処理されてるのでしょうか?
0790名前は開発中のものです。
02/03/24 05:59ID:WWKNmPMo0791
02/03/24 09:15ID:DgRqu+K20792名前は開発中のものです。
02/03/24 11:04ID:???なるほど、それは便利だ。
ちゅうか今、当たり判定で困ってるところなんだわ。
>>791
すでにそんなことはどうでもいい
0793名前は開発中のものです。
02/03/24 11:12ID:???マ板で語り尽くされた事を隔離板で吠えられてもナァ...
つーか、sagaってねぇし(藁
0794名前は開発中のものです。
02/03/25 12:06ID:???俺の場合、基本的にあたり判定の中では当たったかどうかの判定だけで
めり込んでも無視です。
当たり中に状態変化(移動、フラグ立てなど)を行うと実効順によってそれ
以降の判定が異なってしまうからです。
どうしてもやりたい場合、完全な例外処理ですね。
こいつはこういう処理だから気をつけるとかコメント書いてます。
つーか、うまい処理が思いつかん。
0795名前は開発中のものです。
02/03/31 00:07ID:???0796名前は開発中のものです。
02/03/31 06:17ID:???0797名前は開発中のものです。
02/03/31 08:22ID:???それ単体をクラスで定義しただけでは難しいと思うのだが
何かいい解決手段あったらよろしく
0798名前は開発中のものです。
02/03/31 09:34ID:???それだと、当たり判定の種類毎にレイヤー用意しなきゃいけなくなって面倒じゃない?
0800名前は開発中のものです。
02/03/31 11:32ID:???0801関係ないが
02/04/01 00:49ID:z86bt0A7最終コードのサイズが増えるという現象に遭遇して思いっきり萎え。
コンパイラのバグだがあまりにもひどいっす。
Cならこんなことはならないよなぁ・・
0802名前は開発中のものです。
02/04/01 00:56ID:???0803名前は開発中のものです。
02/04/01 01:01ID:???0804名前は開発中のものです。
02/04/01 01:35ID:???0805801
02/04/01 02:25ID:z86bt0A7classの中のstaticなinline関数が関数ローカルのstatic変数を持つコードが
あると、その関数を一度も使わなくともコード、データ領域ともその翻訳処理
単位で展開されてしまうんだよ。いわゆるシングルトンパターンの構造をもつ
ヘッダファイルをインクルードするだけで飛躍的にコード、データサイズが増加する
罠。
やっぱC++は組み込みには向いてないよな・・・。
0806名前は開発中のものです。
02/04/01 02:31ID:???0807名前は開発中のものです。
02/04/01 02:34ID:???ちなみに gcc のバージョンいくつ?
0808801
02/04/01 02:34ID:z86bt0A7static foo& Instance() {
static foo bar;
reurn bar;
}
}
これだけですが何か?
0809801
02/04/01 02:36ID:z86bt0A72.9-9911、2.96-1003、2.96-1003-1で確認したよ。
0810名前は開発中のものです。
02/04/01 02:58ID:???parse error だぞ(w まぁ、言いたい事は分かるから問題ないけど。
今、手元の gcc 2.95.3 (cygwin-special) で
class foo
{
public:
static foo& Instance()
{
static foo bar;
return bar;
}
};
void func() { foo s; }
だけのコードを g++ -S でコンパイルしてみたが、確かに .lcomm セクションに
変数 bar が確保されちゃうね。Borland C++ Compiler 5.5.1 や Visual C++
6.0 だと
警告 W8027 singleton.cpp 6: <静的変数>を含む関数はインライン展開できない(関数 fo
o::Instance() )
singleton.cpp(15) : warning C4514: 'Instance' : 参照されていないインライン関数は削除
されました。
となって、いずれのケースでも出力されたアセンブリコードに bar は存在しない。
0811名前は開発中のものです。
02/04/01 03:06ID:???inlineにしなくてもまともな実現方法がいくらでもあるんだから、
> C++は組み込みには向いてない
なんてことにはならんだろ。
0812名前は開発中のものです。
02/05/16 11:00ID:3bT9vj92GameDev.net - Object-Oriented Scene Management
http://www.gamedev.net/reference/articles/article1812.asp
0813名前は開発中のものです。
02/08/15 13:27ID:EIasLKDHOOのゲームプログラミングへの応用ということで、シリアライズの話を。
いつでもどこでもセーブできて、その場の状況を完全再現するには
シリアライズしかないと思うが、やったこと無いので良くわからず。
MFCなんかでやれるオブジェクトの動的生成って全部自前で実装する場合
どうやったら良いんだ?
0814名前は開発中のものです。
02/08/15 14:23ID:???IDとクラスを1:1でマッピング。
読み込み時にIDによって生成するクラスを決める。
0815名前は開発中のものです。
02/08/15 14:47ID:???> MFCなんかでやれるオブジェクトの動的生成って全部自前で実装する場合
> どうやったら良いんだ?
エピステーメーの「オブジェクト指向的日常」って本で、簡単な解説と実装例を
紹介をしてた。(初版ではコードに致命的なミスがあったりしたが……)
0816名前は開発中のものです。
02/08/15 14:57ID:???0817名前は開発中のものです。
02/08/15 17:33ID:???クラスファクトリを static オブジェクト化して、別の static オブジェクトに登録。
main が走り始めた段階で準備完了、としておく。
0818名前は開発中のものです。
02/08/15 17:58ID:???0819名前は開発中のものです。
02/08/15 19:30ID:???マジメに書くと長くなるんだが…。昔のコードから抜粋すると、こんな感じ。
// 永続オブジェクト基底クラス
class CPObject {
private:
static const BYTE bytMagic[3];
static const UINT MAGICLEN;
public:
virtual ~CPObject() {}
virtual BOOL equalsTo(const CPObject* obj) const {
return this == obj;
}
virtual BOOL saveIt (FILE*) const = 0;
virtual BOOL restoreIt(FILE*) = 0;
void save(FILE*) const;
static CPObject* restore(FILE*);
virtual UINT isA() const = 0;
};
0820名前は開発中のものです。
02/08/15 19:31ID:???class CPIDDict {
private:
struct CPIDRec {
UINT id;
CPObject* (*func)();
};
CPIDRec* array;
UINT size;
UINT cap;
CPIDDict(const CPIDDict&);
CPIDDict& operator=(const CPIDDict&);
public:
CPIDDict();
~CPIDDict();
static CPIDDict* theCreator();
void regist(UINT, CPObject* (*)());
CPObject* create(UINT) const;
};
0821名前は開発中のものです。
02/08/15 19:32ID:???// クラス実装ファイル (*.cpp) の先頭に記述
#define REGISTER_CPOBJECT(X, ID) \
static CPObject* X ## creator() { return new X; } \
class X ## Creator { public: X ## Creator(); }; \
X ## Creator::X ## Creator() {\
CPIDDict::theCreator()->regist(ID, X ## creator);\
};\
static X ## Creator X ## dummy __UNUSED__;
// 永続オブジェクト関連メソッドの宣言
// クラスへッダファイル (*.h) の public セクションに記述
#define DECLARE_CPOBJECT(ID) \
virtual BOOL saveIt(FILE*) const;\
virtual BOOL restoreIt(FILE*);\
virtual UINT isA() const {\
return ID;\
}
#define RESTORE_CPOBJECT(TYPE, FP) \
(dynamic_cast<TYPE>(CPObject::restore(FP)))
0822名前は開発中のものです。
02/08/15 22:55ID:LqMXg9lLtypedef int ID;
class IGenerator;
class ClassFactory : private map<ID,IGenerator*>
{
typedef map<ID,IGenerator*> Base;
public:
bool can_create( const ID& id ) const { return ( Base::find( id ) != Base::end() ); }
void insert( const ID& id , IGenerator* const p ) { Base::insert( make_pair( id , p ) ); }
template<class CLASS>
auto_ptr<CLASS> create( const ID& id ) const
{
Base::const_iterator const found = Base::find( id );
return auto_ptr<CLASS>( ( found != Base::end() && found->second )
? dynamic_cast<CLASS*>( found->second->Generate().release() )
: 0 );
}
};
ClassFactory& getClassFactory() { static ClassFactory instance; return instance; }
struct IGenerator
{
IGenerator( ID id ) { getClassFactory().insert( id , this ); }
virtual ~IGenerator(){}
virtual auto_ptr<Class> Generate() = 0;
};
0823名前は開発中のものです。
02/08/15 22:55ID:LqMXg9lL{
public:
static const ID key;
MyClass(){}
private:
struct Generator : IGenerator
{
Generator() : IGenerator( MyClass::key ) {}
auto_ptr<Class> Generate() { return auto_ptr<Class>( new MyClass ); }
};
static Generator generator;
};
const ID MyClass::key = 12345;
MyClass::Generator MyClass::generator;
0824名前は開発中のものです。
02/08/15 22:57ID:???{
cout << "create MyClass by correct key... ";
auto_ptr<MyClass> p1 = getClassFactory().create<MyClass>( MyClass::key );
cout << ( p1.get() ? "ok" : "ng" ) << endl;
cout << "create MyClass by wrong key... ";
auto_ptr<MyClass> p2 = getClassFactory().create<MyClass>( 100 );
cout << ( p2.get() ? "ok" : "ng" ) << endl;
return 0;
}
0825修正
02/08/15 23:05ID:???auto_ptr<CLASS> ClassFactory::create( const ID& id ) const
{
Base::const_iterator const found = Base::find( id );
if( found != Base::end() )
{
IGenerator* const p = found->second;
if( p )
{
auto_ptr<Class> pbase = p->Generate();
CLASS* const ptest = dynamic_cast<CLASS*>( pbase.get() );
if( ptest )
{
pbase.release();
return auto_ptr<CLASS>( ptest );
}
}
}
return auto_ptr<CLASS>();
}
0826あぼーん
NGNG0827名前は開発中のものです。
02/08/16 00:57ID:???0828名前は開発中のものです。
02/08/17 20:32ID:???0829813
02/08/18 17:49ID:???(って、まだ全部ちゃんと読んでないですが)
ちょっくらやってみるか。ってシリアライズなしでやってたものに
シリアライズつけるの厳しそうだな……(いちおうスーパークラスはあるんだけど)
0830名前は開発中のものです。
02/10/06 17:36ID:4VoU6WQ6ワラタ
0831名無しさん
02/10/06 17:40ID:???HGBTR4MHGBP0T5え@ご9JR4QPV「Jる5VG
DB5VHG4ヴぇR4TPヴぇR5MHGBTじhttp://genie.gaiax.com/home/nakatai
http://genie.gaiax.com/home/nakatai
さDRGヴぁでRGBはえ;んごいえろげいR
あえRSHGべSDRHDSVGDRFせVDRFせVせDFGVRFせDヴぇDRFSげDFS
http://genie.gaiax.com/home/nakatai
0832あぼーん
NGNG0833名前は開発中のものです。
02/10/28 04:08ID:???0834名前は開発中のものです。
02/11/03 01:14ID:???チーム開発に適用するのは難しいよね。
0835あぼーん
NGNG0836名前は開発中のものです。
02/11/03 01:35ID:???> OOってそれぞれの人で考えてる程度が違うから、
プログラミング自体それぞれの人で考えてる程度が違う
0837名前は開発中のものです。
02/11/03 10:51ID:ZJseP0w7まずはヘッダファイルの一括インクルードする奴は駄目な奴だと
いうことを同僚にたたき込む方法を教えてくれ。
0838名前は開発中のものです。
02/11/03 10:59ID:???どいうレバルで?VCとかだとコンパイル時間早くするためにやったりするし。
ライブラリレイヤーなんか#include "KaisyaLib.h"で済ませちゃうのが普通じゃない?
アプリケーションレイヤーでそれやられると結構泣けるな。
0839あぼーん
NGNG0840名前は開発中のものです。
02/11/03 11:48ID:???0841名前は開発中のものです。
02/11/03 16:12ID:???そいつは、ずっと一人(多くてせいぜい2人)で開発をしてきたか
もしくはソースコードの管理はその一人で(しかも人力で)やってきたか
多人数で効率よく開発する仕組みを全く知らなくても良い立場なんだろ。
他のモジュールとの依存関係を把握してない。orしたくない。orする必要ない。
↓
とりあえず全部インクルードしちゃえ。単体テスト不能?知るかボケ。
↓
いきなり結合テスト。make時にリンクされるモジュールが具体的に
どれなのか勿論分かってない。まぁ他のモジュールは全て安定版と
確信してるから何も問題ないね。根拠?知るかボケ。
↓
不具合を確認。デバッグ作業開始。3日経過。あ、ボスが来た。
「ボス:どうかね、進捗のほうは」「漏れ:はい順調です(苦笑)」
0842841
02/11/03 16:20ID:???実際にやったら
あちこちに(作業上の)クリティカルセクションがありそうだ。
ある一人のデバッグ作業が終了するまで他の全ての人間の作業が
停止することが日常茶飯事みたいな。
的外れだったらスマン。
0843名前は開発中のものです。
02/11/03 16:30ID:???これがよくわからんが、プロジェクト中の自分が使わないヘッダファイルまでインクルードするってことか?
0844名前は開発中のものです。
02/11/03 17:06ID:???ある程度の単位にパッケージ化して(安定した)基本セットとして渡す
ことはよくあるな。
もっともそれは#include <xxxx.h>がずらーりと並ぶようなヘッダファイルを
用意するということではなく、リリース用の.oファイルと.hファイルのセットを
用意(というか自動生成)するという意味だが。
0845名前は開発中のものです。
02/11/03 17:06ID:???0846名前は開発中のものです。
02/11/03 18:46ID:???それやられると、一つのヘッダを書き換えただけで常にフルビルド状態に
なっちゃうんだよね。特に、前方宣言ですむところを #include するのは
犯罪だ。
0847名前は開発中のものです。
02/11/03 19:14ID:???コンパイル時間については心配いらないんだけどね。
ヘボいコンパイラしかない環境って悲惨だね。
0848名前は開発中のものです。
02/11/03 20:55ID:rqxcf8ww841さんと842さんのいう状況そのまんまで爆笑しました。
なんつーか説得は不可能ですよね。
なにいっているかわからない人はわからなくていいです。
そのほうが幸せだと思います。
0849名前は開発中のものです。
02/11/03 20:56ID:???意地の悪い質問で恐縮だが、ぜひ質問させてくれ。
00.cpp
01.cpp
02.cpp
03.cpp
(中略)
fe.cpp
ff.cpp
の先頭部分でそれぞれ
#include "00.hpp"
#include "01.hpp"
#include "02.hpp"
#include "03.hpp"
(中略)
#include "fe.hpp"
#include "ff.hpp"
という具合にインクルードしてたとして
00.hppを書き換えてmakeしても時間を気にする必要がないのか。
本当か?
0850849
02/11/03 21:08ID:???#include "00.hpp"
#include "01.hpp"
#include "02.hpp"
#include "03.hpp"
(中略)
#include "fe.hpp"
#include "ff.hpp"
という内容のmarugoto.hppなるヘッダファイルを用意。
で、全ての.cppファイルの先頭で
#include "marugoto.hpp"
みたいな感じかな。スレの流れ的にいうと。
0851名前は開発中のものです。
02/11/03 21:10ID:???そのケースだと、最初の.cppをコンパイルするときに
プリコンパイル済みヘッダーが作られて(marugoto.hppを指定する)、
それ以降はそのヘッダを使いまわすことになります。
つまりmarugoto.hppとそのファイルが参照するヘッダファイルの読み込み&処理は
一度しか走らないんです。想像以上に速くなりますよ。
自分の経験ですが、30万行のC++コードのビルドが2分で済みます(P3-800)。
.cppが700ファイル、.hが800ファイルでした。
0852名前は開発中のものです。
02/11/03 21:17ID:???0853名前は開発中のものです。
02/11/03 21:19ID:???> で、全ての.cppファイルの先頭で
>
> #include "marugoto.hpp"
というやりかたになります。
(VC++つかってる人なら知ってると思いますが、
雛形の.cppファイルの先頭でstdafx.hを#includeしてるのがそれです)
逆に、コレがない環境(たとえばgcc)だと、includeするヘッダを
最低限にする必要があるんですよね。これがまた非常にめんどくさい。
STLなんかを使うには事実上必須だと思うんですけど、ねえ・・・
0854849-850
02/11/03 21:34ID:???丁寧なレスどうもアリガd。
漏れWindowsで開発したことがないんだわー。
カルチャーショック受けたので今度のボーナスで
VisualStudio.NET買ってみるわ。
0855名前は開発中のものです。
02/11/03 21:34ID:???依存するのかを明示しろってことだろ。
その辺があいまいだと、際限なく他モジュールに依存しまくった挙句、
最終的にはどれがどれに依存しているのか分からなくなってしまうからな。
その辺がクリアなら、インクルードファイルをまとめるのもアリだと思うがな。
あとはコンパイル効率の問題だけだし(チーム全体で合意ができればOK)。
合意を形成しようって努力をするプログラマが少ないってのはそのとおりかも。
俺も含めて。
0856名前は開発中のものです。
02/11/03 21:37ID:???適当なマクロきれば軽くなるんだけど、あんまりしないよね。
0857名前は開発中のものです。
02/11/03 21:40ID:???本来は設計の段階でクリアになってなきゃならないんだけど、
ユーティリティー的なモジュールはついついおざなりになってしまう。
モジュールの初期化の順序って問題になりやすくないですか?
0858名前は開発中のものです。
02/11/03 21:41ID:???ふつう真っ先にPCHに入れます。むしろそのためのPCH。
0859名前は開発中のものです。
02/11/03 21:54ID:itYckWtp雑魚はウザイから消えてくんない?
0860名前は開発中のものです。
02/11/03 21:58ID:???雑魚ってことで妥協するから
君の主張を書いてくれないか。
#喧嘩じゃないだろ。
0861名前は開発中のものです。
02/11/03 23:29ID:???少しでもって・・・それってそんなに大仰な話なのか?
モジュール化について深く解説した本とか見たことないけど。
0862名前は開発中のものです。
02/11/03 23:55ID:???PCH に頻繁に書き換えるヘッダ、特に開発中のゲーム本体のヘッダを
突っ込むのは止めたほうが。フルビルドのときには早くなるけど、PCH
を作るのに時間かかるからインクリメンタルビルドが遅くなる。
俺は PCH には標準ヘッダと boost、それに変更の頻度は低いがプリ
コンパイルしときたいライブラリ関係のヘッダだけ読ませてる。ライ
ブラリは別のプロジェクト (*.dsp) に分離ね。
>>859
> つーか問題はコンパイル時間云々の問題じゃないんだけど。
設計の問題が重要なのは言うまでもないが、規模が大きくなるとファイルの
物理的な依存関係も無視できない要因になる。CPU は速くなったが I/O は
大して速くなってないから。
0863名前は開発中のものです。
02/11/03 23:55ID:???いや、windows.h(とMFC関係?)が大きすぎることがコンパイル時間を遅くしている最大の原因だってこと。
Hello Worldをウィンドウに表示するプログラムを作ってもコンパイル行数10万行ってどうよ?ってことで。
>まずはヘッダファイルの一括インクルードする奴は駄目な奴だと
っていうこというなら、まず、windows.hとかから言うべきだよな。
(まぁ、OSってことで多少は意味合いが違うけど。)
で、pchってのは、そういう文化の上で必然的に生まれたものだって言うことをお忘れなく。
0864名前は開発中のものです。
02/11/03 23:56ID:???(Turbo Cもそういうのがウリだった。)
0865名前は開発中のものです。
02/11/04 00:00ID:???それなら、ディスクキャッシュに納まる程度なら問題ないという結論になりそうだ。
0866名前は開発中のものです。
02/11/04 00:32ID:???ハゲ同。
Delphiなら10万行くらいの再構築は10秒くらいで終わるし。
久々にVC++やgcc使って思うのはコンパイル遅いことだ
もうBorland製以外にはもどれん
0867名前は開発中のものです。
02/11/04 00:32ID:???充分なメモリを積んでもPCHにしたほうが速いよ。
ヘッダがいくら大量になろうと、PCHはほぼ一定の速度にしてしまうから
これの優秀さにコンパイラベンダは気づくべき。
0868名前は開発中のものです。
02/11/04 00:37ID:???プリコンパイル済みヘッダは、CodeWarriorにはたしかあるはず。
gccも3以降に動きがあると聞いたが...違うかも
0869名前は開発中のものです。
02/11/04 01:48ID:???GCCにはないんだぁー!!
by PS2 プログラマー(GCCユーザー)
0870名前は開発中のものです。
02/11/04 04:02ID:???というか、G++のコンパイルの遅さ自体が問題なのかな。
0871名前は開発中のものです。
02/11/04 04:10ID:???ソフトウェア工学の薄くて高い本を読むと
構造化技法、モジュール強度やモジュール結合度について
6 ページくらいは書いてあるよ。
0872名前は開発中のものです。
02/11/04 13:00ID:???CODE COMPLETE と Writing Solid Code をセットでどうぞ。
>>870
PS2 標準のヘッダはまったく問題ない程度の量。ただ C++ で template を
多用し出すと、ちと気になるかな。(いろんな意味で)
0873名前は開発中のものです。
02/11/04 23:35ID:Fll59Laaプロジェクト規模しだいでは「ちょっと」の領域は超えちゃうなぁ。
あと、一本上げて解ったんだけど、テンプレートはあんまりメモリに
優しくないので、中規模以上のプロジェクトではあんまり多用しない方が
いいような気がした。皆のトコではどーなんだろ?
どうでもいいけど、あんまりOOと関係ない流れだね。
0874名前は開発中のものです。
02/11/04 23:50ID:???0875名前は開発中のものです。
02/11/04 23:53ID:???http://game.2ch.net/test/read.cgi/gamedev/1011082291/
0876あぼーん
NGNG0877逝って良しの1 ◆.CzKQna1OU
02/11/05 00:00ID:jHnnn7PQ0878逝って良しの1 ◆MvRbZL6NeQ
02/11/05 00:02ID:jHnnn7PQ1)再利用可能モジュール以外は手続き型で書く
2)なるべく共通の部品て作れるように設計する。
純OOは効率落とすだけ
■ このスレッドは過去ログ倉庫に格納されています