したらばTOP ■掲示板に戻る■ 全部 1-100 最新50 | |

RUINATERRA開発スレッド

32レンディバー:2004/08/10(火) 02:59 ID:DiJ5Q7vU
はぁ…と、とりあえず分割終わりました…
http://www.abars.net/~rendivar/osproject/subdivided.lzh (246KB)
疲れたので簡単な説明だけ…

一つのプロジェクトにまとめると、ファイル名が衝突して面倒なので二つに分けました。
ライブラリ側のLibrary.dspとRuinaterra本体のRuinaterra.dspです。
dswファイルはそれぞれのワークスペースで、Ruinaterra.dswではRuinaterra.dspが
Library.dspに依存しています。
それと、Ruinaterra.dspはブラウズ情報を生成するようになっています。

ソースやリソースは、ライブラリがLibraryディレクトリ、RuinaterraがProjectディレクトリに
入っています。関数・クラス・構造体・大域変数などの宣言はヘッダファイルに、
関数の実体をソースファイルに書いてあります。
基本的な分割単位はクラスで、あるクラスを宣言したヘッダファイルと拡張子以外が同名の
ソースファイルに、そのクラスの関数が書いてあります。
ただ、構造体の宣言だけのヘッダ(ex:Project\Database.h)には対応するソースはないですし、
逆に対応するヘッダのないソース(ex:Project\Application.cpp)もいくつかあります。
大体のファイルは名前で内容が分かると思うので……、見つからない関数などがあれば
秀丸でgrepとかして見つけて下さい(汗
ちなみにヘッダやソースには、分割コンパイルするために必要なこと以外は
殆ど手を加えていません(多分)。

Ruinaterraプロジェクトのゲームシーンだけは、158KBもの巨大ソースになったので、
さらに目的別に分割しました。Project\Game Sceneディレクトリの中に、GS*.cppで
入っています(ちなみにヘッダはGameScene.hのみです)。
これも大体ファイル名から内容が分かると思うんですが、いくつかの関数は二つ属性を持っています
(ex:Game::DrawCharはCharacterとDraw)。
こういった関数はCharacter、Enemy、Magicなどオブジェクト属性(?)を優先させてあります。
その他の余り物関数は、GSDraw.cppとかGSAction.cppに入っています。
更に余り物になった関数は、GSMiscellany.cppでごった返しています。

ライブラリのソースが読むべきヘッダはLibrary\Library.hで、Ruinaterraプロジェクトでは
Project\Common.hです。

それとWinMainですが、Ruinaterraプロジェクトで#define WINMAINしたソースに
展開されるようになっています(実際のソースはLibrary\WinMain.h)。
今のところ、MainScreen関数があるProject\SceneControl.cppに展開しています。

それで、これらのファイルをソースコードフルセットを解凍したディレクトリに解凍すれば
普通に使えるようになるはずですが、Ruinaterra.exeは消さないで下さい。
FirstScene.cppのFirst::Mainで、Ruinaterra.exeを例外処理せずに読んでいるので、
81行目のfeofでエラーが出ます。

…これ以外のことはソースを読めば多分分かります。
もし、subdivided.lzhにあってRUINATERRA_SOURCE_CODE.LZHにない
疑問があったら書き込んで下さい。

簡単な説明と言いつつ中途半端な説明になった…
文章中の言い忘れや間違いは適宜補完・修正して下さい…



>>31 にょーにょーさん
初めまして。
InvalidateRectはkzk.hにもkzk.cppにもどこにも出てこないし、ウィンドウプロシージャでは

case WM_PAINT:
  DrawLoop();
  ValidateRect(hWnd,NULL);
  break;

なので何故出るのか不思議でしょうがなかったのですが、よく考えたら…

1. WM_PAINTでブレークするようVCで設定。
2. Debugビルドでデバッグ起動。
3. WM_PAINT→VCにフォーカスが移る(VCでRuinaterraが隠される)。
4. VCで実行を再開→WM_PAINTが来る。
5. 3に戻る。

思いっきりずっと最前面じゃなかったですね(^ ^;
これでWM_PAINTがずっと送られてくる理由は分かったのですが、
DrawLoopはWinMainのメッセージループでも呼ばれているので、WM_PAINTの
ところにある理由は謎のままです。



あぁ、時計が……


新着レスの表示


名前: E-mail(省略可)

※書き込む際の注意事項はこちら

※画像アップローダーはこちら

(画像を表示できるのは「画像リンクのサムネイル表示」がオンの掲示板に限ります)

掲示板管理者へ連絡 無料レンタル掲示板