トップページgamedev
662コメント368KB

親父PGがゲームを作り始めるスレッド

■ このスレッドは過去ログ倉庫に格納されています
0001親父PG04/03/30 02:40ID:phIrC7nN

C++やC、アセンブラは昔こなしたし、プログラムの事なら自信はあるけど
ゲームは作った事が無い方。現場からも引退したし(w。
ここは一つ趣味でDirectXでも勉強して、ゲームでも作ってみようかなぁと思った、
オジサンPGのスレッドです。

一緒にマターリライブラリから作りませんか?
0015名前は開発中のものです。04/03/30 13:22ID:kPTgeVBo
>>14
懐かしいな、もうそこらへんのことはすっかり忘れたよ
今やれといわれても資料読みつつじゃなきゃ絶対無理だ。

>>11は親父PG氏に計算機の動作原理の理解がない、と言ってるんじゃなくて
3つの壁じゃなくて4つの壁ではないか?と提案してるんじゃないか?
少なくとも俺はそう読んだ

まぁ計算機に関する理解は環境に関する理解に含まれると思うけどね
0016名前は開発中のものです。04/03/30 13:26ID:KRMwobBh
コーディングが汚くて読みづらい。
0017名前は開発中のものです。04/03/30 13:41ID:kPTgeVBo
>>13のサンプルにちょっとだけ指摘
QueryPerformanceCounterで取ってきた値を1/1000msecとして扱ってるが
その値は思いっきり環境依存です
環境によってはバグります
あと、LARGE_INTEGERのLowPartのみ比較はやめたほうがいいです
QueryPerformanceCounterから取得した値がなぜ64bit値なのか考えましょ

あえて荒らしにも反応しとくけど
>>16
この程度読みづらいならおまえの能力が低すぎ
0018親父PG04/03/30 13:47ID:nbxm21Tx
>>15
>11は親父PG氏に計算機の動作原理の理解がない、と言ってるんじゃなくて

私もそうとってますよ^^; 
11氏が提案する部分で、具体的な話があれば是非紹介して欲しいなぁと思って...

>>16
すんませんorz 自分でも汚いと思っております(反省

訂正

MOV SS,AX
MOV AX,ES

MOV AX,SS
MOV ES,AX

ネタとは言え恥ずかしい....orz

価の移動は右から左だった。
というかセグメントレジスタに、直接価が入れられない制約があったんだよね。
(なんかまだ間違ってるような気がするけど、深く考えないようにしよう)

まだ取り組んでいませんが、シェイダーの扱いで一部アセンブラライクなものが
あるみたいなので、アセンブラの知識が(一部)役に立つかもしれません(笑
0019親父PG04/03/30 13:52ID:nbxm21Tx
>>17
おお! 御指摘ありがとうございます早速、修正させてもらいます。
とはいえ
>QueryPerformanceCounterで取ってきた値を1/1000msecとして扱ってるが
>その値は思いっきり環境依存です
このあたりを解決するには調べることがありそうですね。
頑張ってみます^^
0020名前は開発中のものです。04/03/30 14:23ID:kPTgeVBo
あーしまった、何を使ってQueryPerformanceCounterの周波数調べるか書いてなかった
QueryPerformanceFrequency使うと調べられます。
なお、高分解能パフォーマンスカウンタは今までサポートしていない環境を見たことがありません
(CEも業務で数種扱ってますが全て使えました)

あと、使う値はLONGLONGで定義してキャストするほうが楽です
こんな感じ

LARGE_INTEGER llStartTime, llEndTime;
LARGE_INTEGER llCounter;
DWORD dwTime;
DWORD dwKeta = 1000; //ここを好きな桁に変更してください。1000だと1msec単位、1000000で0.001msec単位
bRet = QueryPerformanceFrequency((LARGE_INTEGER*)&llCounter);
〜略〜
QueryPerformanceCounter(LARGE_INTEGER*)&llStartTime);
〜略〜
QueryPerformanceCounter(LARGE_INTEGER*)&llEndTime);
dwTime = (DWORD)((llEndTime - llStartTime) * dwKeta / llCounter);
0021名前は開発中のものです。04/03/30 14:33ID:kPTgeVBo
ってーミスってるΣ
LARGE_INTEGER llStartTime(略)→LONGLONG llStartTime(略)
に直してください
0022親父PG04/03/30 15:29ID:nbxm21Tx
>>20
なんだかありがたいなぁ。
悪いねぇ。。。。orz いろいろ教えてもらって^^;
他の方にも参考になると思います。
こういうレスがついてくることを、内心期待してはいましたがほんとにくると嬉しいです。
これからもいろいろと私にできる情報を提供使用と思います。

高精度タイマーが使えない環境はない! と私も決め打ちしています。
このへんは「ゲーム」という事で許される範囲ですかね。
高精度タイマーが動かなければ、おそらく他のゲームも動かないでしょうから^^

wTIME=( double )16666;
//駄目コード if ( ( eTIME.LowPart - sTIME.LowPart )>wTIME ){
if ( double( eTIME.QuadPart - sTIME.QuadPart )>wTIME )

安易にこんなことしてましたが、>>20の書き込みも参考にさせていただきます。
0023名前は開発中のものです。04/03/30 21:24ID:OjGk+Cgx
たとえゲームといえど、CPU100%つかうアプリは嫌いだな。

あとこっちは余計なお世話かもしれんが、高精度タイマなんて使わなくても
timeGetTimeあたりで十分な気もする。
(タイムスライスの精度的に、どうせどこかでぶれるんだから。)
0024親父PG04/03/30 22:38ID:phIrC7nN
>>23
ご指摘ありがとうございます。
確かにtimeGetTimeの精度を一番上げた状態でも十分ではあると思います。

先にあげたソースでは実装していませんが、計測した値の差と基準となる
値を割り算して(wTIME)基準値に対して、もし遅れが出ているようなら
その値を移動係数に掛けるといった処理も、視野にいれてQueryPerformanceCounter
を選択しました。(正しいかどうかは別にして)

ところでtimeGetTimeの正体は何なのでしょう。
いわゆる昔からあるあの「ハードウェアタイマー割り込み」なのでしょうか?
OSの内部的なタイマーという解説がありますが、その内部的なタイマーとはなんぞや?
IRQ (Interrupt Request)使うアレなのだろうか...
少なくともQueryPerformanceCounterは昔からあるHWタイマーではなさそうですね。
(分解能からして、昔は無かったし<-コレ重要)
さて
QueryPerformanceCounterとtimeGetTimeはどっちが処理が重いのだろうか?
timeGettimeの精度を上げた状態とはどういうことが起きているのだろうか?
単純に精度高い=処理が重い と決め付けるわけにもいかないと思います。

いろいろと疑問が湧いてきますねぇ。
(タイマーだけで1スレ潰してしまうな、こんな話始めたら(笑 )
0025名前は開発中のものです。04/03/30 23:07ID:bI3miJwX
>>16
単語の頭と、単語と単語の切れ目は大文字っていうルールでコーディングしてるんだったら、一貫してくれないと読みづらいね。
FSP60nonSYNCcall は FSP60NonSyncCallみたいに・・・・。
0026名前は開発中のものです。04/03/30 23:25ID:OjGk+Cgx
>>24
QueryPerformanceCounterを含む時間管理についてはこの辺が参考になる。
ttp://www.dwahan.net/nyaruru/programming/programming.html
ttp://www.gamedev.net/community/forums/topic.asp?topic_id=195892

あと、環境によってはQueryPerformanceCounterが300ms以上帰ってこないという現象もあるらしい。
ttp://home.att.ne.jp/yellow/hide_n/old.html
の2001/11/12。
上のURLにある問題点と関係してるのかも。

>>25
全角スペースインデントするなら、ちゃんとやれってことじゃない?
0027名前は開発中のものです。04/03/30 23:32ID:fcRSAwJm
個人的な好みだけど、前回のループのカウンターサンプリングからの経過時間冲
を、実数で持ってたほうが何かと便利かも。おじさんの頃はFPUが遅かったので
固定小数点命だったろうけど、今じゃ、バリバリ浮動小数点使います。

Real fInversedFrequency;
LARGE_INTEGER liPrevCount;
void init( void )
{
 LARGE_INTEGER liFrequency;
 bResult = QueryPerformanceFrequency( &liFrequency );
 errorCheck( !bResult ); //カウンターサポートなし。
 fInversedFrequency= 1.0f / Real ( liFrequency );
 liPrevCount = 0;
}

void gameLoop( void )
{
 LARGE_INTEGER liCount;
 Real dt; //凾 (sec)
 QueryPerformanceCounter( &liCount );
 if( liPrevCount != 0 ) {
  dt = Real( liCount - liPrevCount ) * fInversedFrequency;
 } else {
  dt = 0;
 }
 処理:UpdateAI(), Render(), etc.....
}
0028親父PG04/03/30 23:58ID:phIrC7nN
>>25
サンプルに自分が書いた部分を書き足すと、ちゃんぽんになってしまう事があります。
気をつけないといけませんね(汗

>>26
参考URL有難う!
>fpsの調節をするためにビジーループでQueryPerformanceCounterを呼び出していると
どのようなループか気になりますね。素でループしたら変な事になるのかも知れませんね。
あと対策はどのくらい遅れたか? を計測して「移動やその他計算処理に」
その係数を掛け算する程度しか思いつきません。

DirectXのサンプルのタイマーユーティリティを覗くと、高精度タイマーを使用しています。
dxutil.cpp
確か高精度タイマーを選択した最大の理由はコレでした(もう忘れかけてるorz

「サンプルで使ってるし大丈夫だろう!」 ご意見お待ちしています(チョットコワイ

0029親父PG04/03/31 00:13ID:Idf3f6lw
>>27
コードサンクス! オープンソースっぽくなってきましたね。
タイマーのブレをうまく吸収してくれそうですね。
ゲームの種類によっては、これが解決になるかも。

[タイマー系の処理は(時間が)くるまで動かないではなく
        「(時間が)越えれば動く」ように設計する]
ですかね^^
0030名前は開発中のものです。04/03/31 06:26ID:gs6uGany
何気なく覗いてみたけど良スレの予感。
親父PGさんがんばれ。
0031親父PG04/03/31 07:43ID:Idf3f6lw
ども有難うガム張ります。

タイマーの話だけではアレなので(滝汗
私が目標にした全体の設計指針を書きます。

プログラム内部で登場するものは、全て同じ基底クラスを持ち
Create 命令で作成され、その時に「オブジェクトハンドル番号」を返すようにする。
*ポリゴン ライト テクスチャなどは全てこれで管理する。
命令は全てオブジェクトハンドルを使って指示する。

Commander[i]._mesMoveObject(hOBJ,OBJtype,Counter);
Commander[i]._mesShowObject(hOBJ,OBJtype,Counter);
(Commanderクラスは_mesで始まるオブジェクト処理集合体クラス ビューポートごとに1つ定義される。)

ポーリングループにおいて一定周期にコールが行われ、このときに
カウンター(命令の回数)のデクリメントと各オブジェクトに記録されている
命令にしたがってデータを可変させる。また各クラスは動きマトリクスを一つ
内包していて、カウンタが尽きるまでマトリクス演算を繰り返す。

これによって ポリゴンやライトなどの制御が簡単に動的に処理する事ができる。
(RPG系のマクロ言語のサポートを視野に入れている)

各オブジェクトには(マウスが押された時など)に予め指定してある
番号をもって共通のインターフェース関数を呼ぶようにする。
これによってソースコードの奥深く(笑)で発生したトリガーが
一箇所に集約され、ここでも一括処理ができるようになる。
(ボタンやダイヤログ機能の実装)動的に作成されたものにも対応できる。
1枚のテクスチャの部分コピーをおこないテクスチャの管理を楽にする。

半年かけてこの辺までは作りました。データの扱いをメインにくんでいたせいか
DorectXの機能っぽい部分に触っていません。orz
いやこれからですコレから(汗
0032名前は開発中のものです。04/03/31 09:17ID:t5cBxtOK
おまえらタイマーを何に使うか決まっててモノ言ってんのか?
おまえら10秒でできる判断に1日かけてんじゃねーぞ?
00332704/03/31 09:49ID:uLEtiF6X
>>32

ゲームの物理世界は
∫f(t)dt
ってことだよ。

0034名前は開発中のものです。04/03/31 10:00ID:t5cBxtOK
>>33
プw
遅れてるねぇ
0035名前は開発中のものです。04/03/31 10:37ID:uLEtiF6X
>>34
アフォですか?
世界を1フレームに微分して捉えるのは、CPUの能力が有限である以上
当たり前だよな?それ以上の何がある?
とんちんかんなシロートさん。
0036名前は開発中のものです。04/03/31 10:43ID:t5cBxtOK
時間の概念が古いんだよw
0037名前は開発中のものです。04/03/31 11:43ID:uLEtiF6X
>>36
おもしろんじゃん。その新しい時間の概念とはなんだよ?
何にも提示するものはないのに一応偉ぶって見たいだけですか?
どうせ逃げるんだろうケドナ。
0038名前は開発中のものです。04/03/31 11:52ID:J7xQt3Sm
煽りに釣られてんなよ低脳
0039名前は開発中のものです。04/03/31 11:54ID:Jboy7uue
親父PGさんは仮性ですか?
0040名前は開発中のものです。04/03/31 11:58ID:e/u8FsRY
↓何事もなかったかのように親父PG登場
0041名前は開発中のものです。04/03/31 12:40ID:cyUqzRML
こういう親父は
せいぜいライブラリ作りで終わりそうな予感・・・
0042名前は開発中のものです。04/03/31 13:00ID:P6HXZMmb
んで、ゲームは何つくるの?
0043名前は開発中のものです。04/03/31 13:23ID:t5cBxtOK
>>37
2,3年前で頭止まってんじゃねーの?
世の中進んでるのはグラフィクス技術だけじゃないぜw
0044親父PG04/03/31 13:34ID:7Yj92Zqq
スレが伸び取る!                     2ちゃん的に(w

>>34
タイマーについては一度議論するのも悪くないと思います。もっともご指摘のように
いつまでもすることではないですか(w

>>41
ライブラリ作っていると「無駄に複雑」な仕様になりがちです。戒めて前に進まないとorz
>>42
ゲームですが、キャラクターデータ−を中心に(制約はあるものの)
ゲームの内容は後から追加できるように考えています。
まだ具体的にゲームの内容までは絞り込んでいません。
グラフィックは嫁にメタセコイア覚えさせないと(笑

スクリプトエンジンを設計して、実装したらゲームの具体的な部分を考えます。

プログラム初心者程度でも、データを設計できる難易度に落とし込みたいと考えています

(野望)幾つかのモジュールはDLLで配布して他の方もゲームシナリオが作れるような環境も
提供していければなぁと。これってある意味ツクール的かも知れないですね。
0045名前は開発中のものです。04/03/31 15:02ID:XPmjXdZE
3DもOK、かつスクリプト使うってことはRPGかな?
変な荒らしに負けずガンバレ
0046親父PG04/04/01 02:48ID:M2APFMNg
>>45
どうも^^.. 荒しなんてUP前の仕様変更(納品後)に比べればなんともないですよ(笑
以前作ったライブラリを覗いたら、バグどころか設計そのものが間違えていた事が判明!
自分で仕様変更おこしてしまいましたorz ダメスギル

今回は論理フォントを作るクラスです

class cFonttypes{
NONCLIENTMETRICSstNCMetrics;
public:
  LOGFONT defFont;
  cFonttypes(){//Constractor
   stNCMetrics.cbSize = sizeof( NONCLIENTMETRICS );
   ::SystemParametersInfo( SPI_GETNONCLIENTMETRICS, sizeof( NONCLIENTMETRICS ), &stNCMetrics, 0 );
   memcpy( &defFont,&stNCMetrics.lfMessageFont,sizeof( defFont ) );
   defFont.lfWeight=FW_MEDIUM;
   defFont.lfHeight=32;
   defFont.lfItalic=false;
   defFont.lfQuality=PROOF_QUALITY;
  }
  virtual ~cFonttypes_Barracks(){}
  
  BOOL SelectFontType(int _nType_,int _size_ ,bool _italic_ );
  BOOL SelectFontType(char* _cFontName_,int _size_ ,bool _italic_ );
};
0047親父PG04/04/01 02:53ID:M2APFMNg
.cpp

BOOL cFonttypes::SelectFontType(int _nType_,int _size_ ,bool _italic_){
//名前登録済み
 defFont.lfItalic=false;
 defFont.lfHeight=_size_;
 defFont.lfItalic=_italic_;

 switch( _nType_ ){
  case 0:{lstrcpy( defFont.lfFaceName,"Arial" );break;}
  case 1:{lstrcpy( defFont.lfFaceName,"MS 明朝" );break;}
  case 2:{lstrcpy( defFont.lfFaceName,"MS ゴシック" );break;}
  case 3:{lstrcpy( defFont.lfFaceName,"HGP創英角ポップ体" );break;}
  case 4:{lstrcpy( defFont.lfFaceName,"HG丸ゴシックM-PRO" );break;}
  case 5:{lstrcpy( defFont.lfFaceName,"HG正楷書体-PRO" );break;}
  case 6:{lstrcpy( defFont.lfFaceName,"Impact" );break;}
  case 7:{lstrcpy( defFont.lfFaceName,"Times New Roman" );break;}
  default: lstrcpy( defFont.lfFaceName,"Arial" );
 }// end of Switch

 if ( CreateFontIndirect(&defFont)!=0 ){//論理フォントの選択&作成
  return(true);
 }else{ return(false);}
}
もう一つは割愛

フォントは環境に依存するので初期化ファイルにユーザーが登録できるようにする
仕様が望ましいのかなぁ。などといいつつプリセットを作ってる私でありますが。
こういうのを作った後で(最初はユーザーは難しいことさせるなという仕様なのに)
後からやっぱりユーザー定義で作って! なんて事はよくありますな。

仕様書作成=作る人 って楽で良いね(笑
0048親父PG04/04/01 03:44ID:M2APFMNg
訂正
if ( CreateFontIndirect(&defFont)!=0 ){//論理フォントの選択&作成


HFONT ReFont CreateFontIndirect(&defFont);
return( ReFont );

関数の型 BOOL > HFONT




またやってしまったorz 落ち着け俺
0049名前は開発中のものです。04/04/01 04:30ID:CzMeYUkg
既に環境依存してますって(汗)
HG系はリコーの商用フォント。Windows標準では使用不可能
MS-Officeについてくるから勘違いされることが多いけどね
フォントを複数種類使いたいならEnumFontFamiliesEx使ってフォントを列挙し、
ユーザーに選ばせるのが一番安全
0050名前は開発中のものです。04/04/01 19:33ID:ZC0PnnRp
ちょっと低レイヤー過ぎるような。
3Dっしょ?フォントとかそんなとこから作ってたら平成が終わっちゃうよ。
D3Dサーフェイスに乗せられるテキストボックスとかがいいんじゃね?
0051親父PG04/04/01 23:04ID:M2APFMNg
>>49
>HG系はリコーの商用フォント。Windows標準では使用不可能
>MS-Officeについてくるから勘違いされることが多いけどね
そうでしたが....Windows2000にも入っていたので標準かと思ってましたよorzダメスギル

少し改造すれば(最終的な)ユーザー選択可能にもできますので^^ そこはなんとかいたします

>>50
この部分は(表示まで含む)以前に作った事があるのですが、のべで5日ぐらいでしたので大丈夫ですorzタブン
それよりTextOutでビットマップに出力するとアンチシェアリングかかってないんですよね。
そのぶん速度も速いですが。
GetGlyphOutline を使うべきなのか....
ttp://www.mikenekoworks.com/develop/getglyphoutline.html

このあたりは要求仕様によって変わりそうではありますが

0052名前は開発中のものです。04/04/01 23:34ID:snPiYnSW
つかフォント(´д`)イラネ

BMPで用意してケロ。
12x24、16x32の二つあれば十分でゲス。
0053親父PG04/04/02 01:02ID:5nHc263h
>>52
(理論文字数65535文字) *12*24bit*8/8 18874080byte
1ピクセル深度8bitで計算 1.8Mですな(65535の部分はうそ臭い)
まぁ1Mぐらいかな。昨今の環境では無問題かもね(汗
ということはプログラム開始時に作ってしまうのがいいのかな。
全フォントピクセルBMP(横に糞長いBMP)

全フォントBMPで管理する時、面倒なのはカーニングですねぇ。どうしましょ(W
コードから半角を割り出すか(W 昔やったねコード判別で半角or全角判断
いっそカーニングデータ−にも対応して!(やばい泥沼だ

昔PC98のころはフォント用のLSIをからフォントデータ−を取得して表示してましたね。(サイズ固定)
というかテキスト専用のVRAM(空間)があって、そこに2バイト書き込めば文字が出るというレイヤー構成だった。(グラフィックVRAMは別)
グラフィックVRAMは微妙にメモリアドレス空間ズレテルシorz
DOSVで文字データ−をメモリに載せるシステムを見た時!メモリ大丈夫か!と関心したものです。(当時の互換機はメモリ16Mが標準)

僕らより先輩の時代には、[コンピューター漢字不要論]なんてのもありましたorz.......
0054親父PG04/04/02 01:43ID:5nHc263h
現時点でのFONT周りの基本動作
PG開始時
 テキストBMP用作成 tbitmap以外で取得したリソースは全て破棄
 論理フォント作成
 指定フォントでBMPにtextoutで書き込み
 文字貼り付け用ポリゴン作成 ポリゴンに書き込み
初期化終了/ループ開始
 文字列に変更がない場合、BMPはそのまま 変更があった場合 BMP書き換え
 ポリゴンとテクスチャの貼り付け レンダリング
 表示
ループエンド
追加機能 文字の後ろにはグラフィックが置ける 現在、OR加合処理
利点
(システムにあれば)どのようなFONTにも対応できる
動的に文字列を変化できる
比較的高速
カーニングはシステム任せ
イタリック、太字なども関数へのパラメーターのみで対応できる
文字色も自由に変更できる(1文字ずつも可能)
文字データ−>テクスチャデータ−の時にエフェクトなどが付けられる(グラデーションとか)
欠点
アンチシェアリングがかかっていない為、3Dでポリゴンが視点に対して垂直でないと文字が崩れる。(これは考慮しないと他でも当てはまる)
テキストっぽい(w (テキストだけどね)
システムの環境に依存する
文字列の変化する時に、ループ内でGDI操作が発生する(BMPだけの書き換えで対応できるかな?? 後から長い文字列がきた場合の対応...)
でかい文字はNG

列挙すると、現在の仕様での不備点は基本的に品質への問題が大きいみたいですね。なんだかテキストエディタ用のライブラリ作ってるみたいだ。
結局文字用のBMP用意から以降は、同じにできそうなので、文字用のBMP書き込みの部分を「文字の品質対する要求」パラメーターを追加して
textOutかGetGlyphOutlineで用意するか切り分けると良いかな。
あとエリア書き込みには対応しないとね(汗 文字列にCRLFがあったら書き込み位置の移動。これは大丈夫だね。
0055名前は開発中のものです。04/04/02 05:15ID:nXT82zKM
プログラムは良いけど、まず企画が無いと設計できないんじゃ…
0056名前は開発中のものです。04/04/02 05:55ID:XRR6zDrg
>>55
まぁいいんじゃないの。自分の得意な所から切り込んで行くのは
モチベーションを保つのに有効だと思う。
0057親父PG04/04/02 07:24ID:5nHc263h
>>55
密かに「企画」はありますが、ここで公開するにはまだ未整理な部分があるので
また公開していません。現在作っているところはどのような形態のゲームでも、
取り合えずは利用する汎用部分だと思っています。

ところで、スクリプトエンジンについては、これから設計を始めるのですが、
どのようか形がやり易いのでしょうかね?

ターゲット>ゲームの企画(シナリオ)担当(if文の意味ぐらいは知っている人)
サポート予定の機能
スクリプトで(ゲームから見た)下レイヤーに対するオブジェクト命令が可能
(このフォーマットで作成しているので実装済み
WINDOWダイアログ、ボタンサイズ、ビューポートの数とサイズなどを
予めリソースエディタで編集可能(作成済み
ボタンに割り当てるグラフィックを複数パターンの割り当てができる。
マウスMOVEでアニメーション マウスHITでアニメーション 常にアニメーション
等のボタンの実装(作成済み
マウスクリック時の反応に、INDEX番号が割り付けることができる(実装済み

○問題はシナリオライター側の表現方法の実装方法
本体とは別のエディタを用意//Delphiで作成予定
 
1)ポインタがないC言語のような言語を書かせるタイプ
2)プリセット式してプルダウンメニューで一行ずつ書いていくタイプ
3)シーンごとに必用なデータ−を埋めていくタイプ

どういうのがいいんだろうね?
それこそゲームの企画ありきな話かもしれませんが^^
ご意見お待ちしています。
0058名前は開発中のものです。04/04/02 10:05ID:WZRWRsbY
>>57
作るゲームが決まってなきゃスクリプトエンジンなど書けません。

何か最初の方は3Dゲー目指してる感じだったけど、スクリプトエンジンの
内容はノベルゲームを目指してるようにも聞こえるのだが…
フォントとかってアクションゲームなら使わないし、イマイチ最終的に
何を作りたいのかが分からないのだが。
0059名前は開発中のものです。04/04/02 10:17ID:17ySoK39
>>58
どんなゲームだろうとフォントを全く使わないって事はないだろう。
今までどんなゲームやってたのか知らんが、
お前さんのいうアクションゲームって
たとえばどんなのよ?
0060名前は開発中のものです。04/04/02 10:48ID:d2sSL+xq
>>59
ここでは厳密なフォント周りが必要ないといってるだけでは?

たとえばSTGなんかもスコアとかは表示するけどあれは
厳密なフォントのライブラリ使うようなもんじゃないだろってことかと
数字10種と「score」と表示するビットマップでいい

そしてRPGやAVGのぞくとフォント周り意識するものはほとんどない
最初は遅くてもOS標準の描画でなんの問題もない

やはり何作るか決まってないってのが一番の原因
0061今現在この名前は使われておりません04/04/02 10:51ID:DFmUogFA
403 :心得をよく読みましょう :04/04/01 03:32 ID:1xz8AXwW
よろしくお願いします

【板名*】ゲ製作技術
【スレ名*】親父PGがゲームを作り始めるスレッド
【スレのURL*】http://pc5.2ch.net/test/read.cgi/gamedev/1080582036/
【名前欄】
【メール欄】sage
【本文*】↓
既に環境依存してますって(汗)
HG系はリコーの商用フォント。Windows標準では使用不可能
MS-Officeについてくるから勘違いされることが多いけどね
フォントを複数種類使いたいならEnumFontFamiliesEx使ってフォントを列挙し、
ユーザーに選ばせるのが一番安全
0062親父PG04/04/02 11:20ID:5nHc263h
>>58 59 60
議論有難う。
ゲーム(種類)によって必用か不要であるかという議論は、確かにあると思います。
特に納期に追われている職業PGではなおさらでです。

その辺の議論は置いといて、「作ってしまえ!」のノリで8割型完成しましたorz
フォントの種類については、ユーザーが後からいくらでも追加できるようにして
静的配列>STL(動的配列)に変更(フォント属性をまとめて記録)
構造体のコンペアをかけて同じフォント属性を登録しないチェック
呼出回数の記録をとって、使用頻度の低い論理フォントは破棄する。
(破棄しても次回呼出の時に、自動的に再登録される)
※ご指摘いただいた問題点がとても役に立ちました

しかし、このへんはプログラマの趣味の世界に突入していますねぇ。
ゲームによってはまったく使わないかもしれなけどorz...

実は何を作りたいというのは漠然とはあるのです。
目標の物を作成する為には、FONT周りをきちんと整理しておかねばなりません。
ちょっと過去を話すとDTPの仕事(デザイナー)も経験がありまして
文字が汚いのはいやなのですorz また趣味の世界に突入してる....

>>遅くてもOS標準の描画
DirectXの描画ループでそれをやると、ちょっと問題が起こります。
いずれのゲームでも以下の処理は必要かと思われます。 
テクスチャ作成>BMP作成>文字描画>ポリゴン貼り
0063名前は開発中のものです。04/04/02 11:50ID:koF3jQIY
内に秘めたり、趣味に走るのは全然問題無いのですが、
目的が分からないとアドバイスしようがないよ、という話だと思います。
0064親父PG04/04/02 12:08ID:5nHc263h
>>63
なるほど、では今、思案中で是非アドバイスして欲しいことがあります
>>57
にも書きましたが、ゲーム用のスクリプトの仕様決定の為の指針についてです。
ゲームは取り合えずRPG用と仮定してください。(カードゲームや其の他にも応用化)
画面形態はドラクエと仮定します。(画面形態は固定しない仕様を考えています)

この場合、シナリオを作成する側はどのような機能が欲しいか?
どのようなレベルまでPG的な事を理解できるか? ということです。

フラグ管理機能なども必要でしょうし;

文字列を解析してデータ−を作成するというのは、自作でコンパイラを作るようなものですねぇ。
数値計算とかポーランド記法。。。
いろいろ待っていそうですね(汗 そういえば昔、電卓作ったなw

それとも今ではフリーのMASMのマクロで組むかな....
0065名前は開発中のものです。04/04/02 12:12ID:hbuLfTYl
テキスト出力なら、
フォントサイズを計算 -> テクスチャの生成 -> GetGlyphOutlineのイメージをテクスチャ -> レンダリング
出力先の大きさを固定するのならサイズの計算はいらないけど。

BMP作成というのが意味不明。
0066名前は開発中のものです。04/04/02 12:27ID:2mBUdLBh
>>65
素人は引っ込んでろよ。

>>64
文字主体のゲームだとしても漢字全部を入れる必要はないかと。
使用している文字吐き出して必要な分だけ抽出する仕組みを用意すれば効率いいよ。
0067名前は開発中のものです。04/04/02 12:48ID:hbuLfTYl
だいたいBMP作成なんて訳の分からないことをしたら、
GetGlyphOutlineで得られるα成分はどうするの?
なんちゃって玄人の>>66よ、素人にも分かるように説明してくれ。
0068名前は開発中のものです。04/04/02 12:55ID:CnIYY+bY
なんかBMPを画像(フォーマット)としてのBMPとかと勘違いしてる?
0069名前は開発中のものです。04/04/02 12:58ID:WZRWRsbY
>>67
お前ゲーム機用の開発した事ないだろ?
0070名前は開発中のものです。04/04/02 13:03ID:hbuLfTYl
>>68
GetGlyphOutlineのイメージをテクスチャ に転送する際に、
BMPがDIBや自分で確保したヒープであっても、
余計なものを経由して、わざわざ動作を遅くする理由は?

>>69
DirectX経由の話であって、コンシューマーの話ではないはずだが、
何を言っているのかますます意味不明。
0071名前は開発中のものです。04/04/02 13:05ID:sbRQNnGs
>>57
作業がしやすいなら(使いたい機能を感覚的に探せる)どんなタイプでもかまわない。

最低限の改行/改ページ指定の入った文章をスクリプト書式に変換(もしくはデータ化)
でき、可能ならその逆(スクリプトからほとんど文章のみの形にする)もできるようにして欲しい。
校正しやすい形でシナリオを書きたいからね。
0072名前は開発中のものです。04/04/02 13:08ID:hbuLfTYl
BMPを経由する理由というのがあるのなら、
その時点で私のよけいなお節介だったというだけの話なんだが。
話が別のところへ行きそうな予感。
0073名前は開発中のものです。04/04/02 13:53ID:2mBUdLBh
いやもうウザイんで消えて。なにやるか判ってないのにアドバイスできると
思ってる池沼にはうんざり。
0074名前は開発中のものです。04/04/02 14:09ID:2oL9ZmmW
>>73
何故BMPなんて余計なものを経由するのか、明確な説明があれば即消えるけど。
なんで理由を書かずに、高圧的な書き込みだけ残していくの?
理由があればそれでよし、無駄な部分なら省けばいいだけの話題なんだが。
0075名前は開発中のものです。04/04/02 14:12ID:MlWn9c9H
けんかやめれ

抱きしめてやるよ俺が
0076名前は開発中のものです。04/04/02 14:20ID:J12mvrUf
テクスチャを利用する場合は、アルファで透明色の設定が必要になるから、
例えば、
TextOut>DIB>テクスチャ
なんかの場合は、透明色をテクスチャに設定し直さなければならないので、
GetGlyphOutlineからダイレクトの方が効率がいいのでは?
0077名前は開発中のものです。04/04/02 15:04ID:UR9wlBoP
俺も>>68とか意味がわからんので教えて欲しいな。
しかし、このスレはいろんな意味でマズーだなぁ・・。
いいのかこんなんで、みたいな。
0078名前は開発中のものです。04/04/02 15:16ID:WZRWRsbY
>>77
お前プロじゃないだろ?
0079名前は開発中のものです。04/04/02 15:24ID:2oL9ZmmW
結局なにも説明できず、煽ってごまかすことしかできないとは。
それがプロの仕事なのか?
文句があるのなら技術的に突っ込みを入れればいいだけなのに。
0080親父PG04/04/02 15:26ID:5nHc263h
>>76
ダイレクトというのはこういう形ですよね
       文字データ−GetGlyphOutline
         V     
DIB(背景)> OR加合 > テクスチャ>ポリゴン貼り付け

(DIB(背景)はなくてもOK)

○TextOutを使う場合
透明色については単にORで演算すると抜けてくれますので大丈夫です。
DIB(BMP)そこに背景の画像も同時に保持する為です。
textoutの為に(内部に)BMPが必用なので作成しております。
ループ開始前にハンドルで保持できるという、運用上のメリットもあります。

○GetGlyphOutline
ループの中で文字データ−を作成するのは、文字列が変更した時意外は極力避けるべきなので
事前に何処かに置いておく必用があります。
TextOutの時にはBMPがありましたので、そこに保持しています。
(メモリと同じ扱いですね)
同じロジック上で動くならその上に置いておけばいいや!という考えなのですけどね...
ところでこの関数は1文字ずつしか機能しないのですが、そのへんの速度って大丈夫なのでしょうか?

まとめ
当初 TextOut命令でFONTデータ−を作成する仕様だったので、当然(内部)BMPを作って
ハンドルを保持する形が生まれた。
しかしそれではアウトラインが汚いので、ユーザーが切り替えられる仕様を追加した。
既にBMP経由のロジックが出来ているので、単にGetGlyphOutlineデータ−を置いておくメモリとしてBMPを使用した。

ざっとこういう理由でBMPがこの中に残っています。
保持するBMPは1ピクセル8ビット深度フォーマットで作成。これなら両方のデータ−を収めることが可能

こんな感じかな... 俺はなにか間違えているのだろうか orz.....
0081名前は開発中のものです。04/04/02 15:28ID:koF3jQIY
理由を書かないやつは>>75に抱きしめてもらえ
0082名前は開発中のものです。04/04/02 15:40ID:2oL9ZmmW
根本的なところに考え方に食い違いがあるようなんだけど、
なぜレンダリング時にハードウェア側で背景とフォントを合成しないの?
>文字列が変更した時意外
背景と分離しておけば、背景が動的に更新される場合も、
文字列に変更がなければ、文字列用のテクスチャを書き換える必要が無い。
背景は更新されないことが前提?
0083親父PG04/04/02 15:58ID:5nHc263h

>>71
校正の容易さについては重要な指針とさせてもらいます。

==============================================================
言語仕様のプラン
1)Cライク
if (fg[24]==25){
 PUTMES(1,1,'メッセージ出力');
}
2)単純化したもの
[24]==25,PUTMES,メッセージ出力;

3)EXCELを前提
PUTMES,'メッセージ出力'(24,=,25);

こういう形よりWEBのツリー型の掲示板のような形のほうがいいのかなぁ...
Parlで組むか!(orz スミマセン ジョウダンデス
0084親父PG04/04/02 16:00ID:5nHc263h
>>82
ごめんなさいorz
データは背景用と文字用と2つ持っています。
レンダリング直前に加算してます。
0085名前は開発中のものです。04/04/02 16:05ID:2oL9ZmmW
レンダリング直前というのが謎なんだけど、
テクスチャを使っているのなら、なぜレンダリング時に、
ハードウェア側で合成をかけずに、その前過程で合成するのかが疑問。
0086名前は開発中のものです。04/04/02 16:18ID:MlWn9c9H
世の中にはいろんな人がいるものさ
0087親父PG04/04/02 16:20ID:5nHc263h
>>85
ポリゴンに張り込むテクスチャ1枚目に、データ−を放り込んだらうまくいったからというのが理由です。深い意味はありませぬorz

加合用の2枚目のテクスチャをさらに別途用意して、データ−を他所からもってくるなら(他にいろんな可能性があるとはいえ)
テクスチャは1枚でいいような気もするのですが...
0088名前は開発中のものです。04/04/02 16:34ID:2oL9ZmmW
ハードウェアとソフトウェアでは合成速度に雲泥の差があるんだけど。
それにゲームの内容にもよるけど、サウンドノベルでもなければ、
普通は背景が一枚絵である場合は少ない。
複数のパーツを結合して背景やキャラクターを合成して、
一つのフレームを生成するわけなんだけど。
もしかして3Dデバイス経由でノベルのシステムを作るという話だったの?
だったらすまなかった、この話は忘れて。
0089名前は開発中のものです。04/04/02 16:55ID:d2sSL+xq
>>88
とりあえず目標はRPGらしいぞ
だからフォントなんかで速度がネックになるところはないと思われ

最適化に目がいくのはいいが、さっさとゲーム作り始める方がいいような
ネックになる場所とかもそれではじめてでてくるとかあるかもしれんし

#そういや親父のわりに真っ昼間から時間あるんだな
00907704/04/02 17:01ID:UR9wlBoP
普通D3Dなら、フォントテーブルはD3DFMT_A8で作って
マルチテクスチャブレンディングで加工・表示するもんだと思っていたが。
確かに俺は素人だが、、、まあいいけどさ。
0091親父PG04/04/02 17:05ID:5nHc263h
>>89
今日は非番で休みです。
明日は仕事ですorz...
0092名前は開発中のものです。04/04/02 17:34ID:d2sSL+xq
>>91
スマン

非番という言葉使っていることからタイムシフト系か
つらそうだな
0093名前は開発中のものです。04/04/03 22:06ID:od+9QL8M
おやっさん、頑張れ。
密かに応援しているぞ。
0094親父PG04/04/03 23:27ID:0WOw9AyH
>>92 93
どうもありがとう。その言葉を励みに頑張ります。
今仕事から戻ってきました。土曜日は電車が空いてるので、ひざの上でPG組んでました(w
電車には携帯電話禁止と書いてあるが、携帯パソコン禁止とは書いてないからな。

GetGlyphOutline って結構面倒ですね。まだ動きがおかしいorz

文字列からひとつひとつコードを取り出さないといけないし、
UINTに対応して上位バイトと下位バイトを入れ替えなど...

ほんとにこんな処理をループ中にして大丈夫なのかな。
毎フレームやることじゃないな。この処理
0095名前は開発中のものです。04/04/04 01:15ID:jA6y2hbu
ライブラリとかフレームワーク作るだけで力尽きないように
SDLとか使うのもいいのではないかと。
0096親父PG04/04/04 09:51ID:6UsE36R6
DIBについてトリビアを発見しました。

BITMAPINFOHEDERのbiHeight メンバを−にしてDIBを作成すると
左上原点のボトムダウンDIBになる。

既に概出かもしれませんが.....orz
0097名前は開発中のものです。04/04/04 11:59ID:KpeQdK+f
それって10年前からやってたんだが

そのまま書き出しても一部対応してないビューアとかあるけど
内部で使うだけなら問題ない
0098新人PG04/04/04 12:24ID:yroz7+Kx
面白そうなので参加したいな。
当方C,C++,C#,VB,Java,Perl,ASM何でもOK。DirectX触った事なしです。
親父PG様の進行を妨げない、便利屋PGとして徹しますので。
0099親父PG04/04/04 13:51ID:6UsE36R6
>>97
1994年から?
win3.1の頃からそうだっけ?
orzオレハ10ネントテツモナクムダナコトヲシテタノカ....

>>98
おお!参加表明有難う。
もし、やってもらえるなら、前にも書きましたが
シナリオエディタとデータ−規格の設計をお願いしたいです。
フラグ管理も「履歴」機能を追加して「過去4回きてれば」というようなものも欲しいですね。
データの規格が煮詰まれば、こちらでもツールを作ります。
ここでデータの設計を進めましょう。

現在動いている下位レイヤーでは、引数として
「対象ビューポート」、「対象オブジェクト」、「呼出タグ」などが設定できます。
※ピューポート画面分割だと思ってください。

現在、プログラム起動時にビューポート数とその大きさ、「ボタン128個(反応レクト領域数)」、テクスチャファイル名
が入ったファイルを読み込んで画面が変化するようにしています。
またこのプロファイルは何度でも読み直しができます。(画面デザイン切替可能)
(※以上は稼働中)

作成する(予定)の物は
昔、(今もか)ソーサリアンというゲームがありましたが、そのシステムを拡大.拡張する予定です。
(シナリオはヨコスクロールに限定しない)
あと、DirectX SDK落としてきてサンプル覗いてみてください。
経験のある方なら動かすぐらいは簡単にできると思います。^^)|~
アイテムデータの作成は本体PGに持たずに、外部にDLLとして実装して、
他のアプリケーションからも使用可能にします。

うーむ勢いで...公言してしまった。orz ダイジョウブカナ...
0100名前は開発中のものです。04/04/04 14:08ID:ppxkrtRX
ソーサリアンの拡張版!?
それは楽しみ。

絵とか音楽とか必要な段階になったら、
状況が許せばお手伝いします。
0101新人PG04/04/04 14:53ID:yroz7+Kx
>>親父PG
快い回答ありがとうございます。
いきなりそんな重要な部分の設計を任せてもらって感謝とガクブルが半々ぐらですw
勝手ながら、まとめページを作ってしまいました・・・いらなかったら消します(^^;
http://www.geocities.jp/oyajipg/index.html
うpローダとか考えたのですが、ちょっと様子見ということで個人サイト形式です。

シナリオエディタとデータ規格ですね?
先にデータ規格の方の設計を考えておきます。でわ。
0102名前は開発中のものです。04/04/04 15:15ID:KpeQdK+f
最初からソーサリアンみたいなの作りたいとかいっとけば
流れ分かりやすくてよかったかも
ソーサリアンシステムの概要はしっとるかな?
まぁ、今なら参考にすることはあんまり無いと思うけどね

winはwinでもNT3.1、3.5あたりのお話
win32apiは「new」とかついてたような

新人PGさんのほうがシステムの設計か
なんか逆のような気がしないでもないがw

こういうのはシステムとプラグイン部分の分離が最重要だから
そのへんどうにでもなるようにUTF8でXMLで書き出せておけばいいようなツール類を
量産すべし・・・かな
知っている言語にjava、C#があるのでそのへんは楽っしょ
0103新人PG04/04/04 15:32ID:yroz7+Kx
>>102
実はソーサリアンって知りません・・・w
とりあえず、親父PGの意向のままに〜と思っています。

最初同じくXMLでの規格設計を考えていたんだけど、結局はパーサ介してC++で
実装すると思うと、ちょっと躊躇してしまうんすけどね。
いや、C#やJavaでXML処理なんて全然大した事じゃないんですけど、C++だとちょっと
敷居が高いじゃないですか。データ処理をするのにパーサー理解などの学習コストが
あるんですが、そこん所どうなんでしょ?
こちらは一応、Xerces-C++使った経験多少あり。日本語処理とかって今どうなっているんだろう・・・?
ICUとか使うのかな?規格よりも実装に目が行ってしまう、典型的プログラマですなw
0104名前は開発中のものです。04/04/04 15:41ID:PaXg2AQi
ソーサリアンか。懐かしいの選ぶねぇ。
0105親父PG04/04/04 16:27ID:6UsE36R6
>>101
こちらこそよろしくお願いします。 というか教わることが多いかも^^;

HP有難う立派なもの作って頂いて! 感動ですよつ∇;)
>>102
データ−をUTF8ですか...メリットとデメリットを考えていきましょう。

ツール類に関してですが、私はdelphi使おうかと思ってます。
なにかと文字操作するのは「言語的に得意」なので...
でもCビルダーもいいかもしれませんね。

ちなみに私はVC++(2002)NETとThinkPad(セレ2G)Windows2000で開発してます。
よってこのマシンで動くように作ります(W
GPUはintel82855です。この石でサポートしない機能は使わない。

自分中心でハード仕様決定です。 
ノートで動くならサポートする環境も増えると思うので
0106親父PG04/04/04 16:45ID:6UsE36R6
文字のアウトラインを取得する為のコード取得ルーチン
○文字は2バイトと1バイトコードが混じる可能性あり

UINT string_code;
char c1;
unsigned short int c2;
char Moji[48];
for ( int iC=0; iC < lstrlen(Moji);++iC ){
 c1= Moji[iC];//1バイトコード取得
 c2= ( (Moji[iC]<<8 ) + unsigned char (Moji[iC+1]) ) ;
 if ( 0<c1 && c1<128 ){//-の価をチェックルーチンに回すとランタイムエラー
  if ( __iscsym(int(c1))!=0 ){
   string_code=c1;
  }
 }else {1byteではないなら2バイトコード
  int cc0=_ismbcl0(c2),cc1=_ismbcl1(c2),cc2=_ismbcl2(c2),cn=_ismbchira(c2),ck=_ismbckata(c2);
  if ( (( cc0 =! 0)||( cc1 =! 0)||( cc2 =! 0)||( cn != 0)||( ck != 0)) ){
  //2バイトコード if ( _ismbcl0(c2)!=0 )こういう書き方できない為
   iC++;
   string_code=c2;
   }else{
    string_code=c1;//BPt置いて監視 上から漏れてくるコードあるかな?
   }
 }
fsize=::GetGlyphOutline( hDC, string_code, GGO_GRAY4_BITMAP, &stGlyphmtrics, 0, NULL, &mat );
...
}//end of for
もっといい方法ありますかね? orz....コンナショリ ビョウガループにイレラレルノカ????
0107新人PG04/04/04 16:58ID:yroz7+Kx
>>105
とりあえず、データ規格の概要の構想を提案します。
1)基本的に、データと実装部の分離は出来る限り行う。
2)スクリプトは簡易インタプリタ言語
3)実装部とスクリプトはイベントドリブンの関係

1)はゲーム進行そのものをスクリプトに持たせようってな設計構想です。
しかし、汎用的なものを考えてはいません。あくまで現ゲームに必要最小限の規格を考えています。
2)は企画者やシナリオライターにプログラムを覚えてもらうものです・・・てのは嘘で、
ツールによる作成が出来る程度の簡易インタプリタを考えています。
変数をハッシュ化させて管理する機能などで、フラグ管理などを考えています。
3)は、まだ頭の中でモワモワしています。そのうち図などで詳しく書きますw

データ形式ですけど、XMLでも独自形式でもいいような気がします。(ダメ?)
ここは、自分の裁量で決めかねるので親父PGさんが決めちゃってください。

ツール作りはDephiでつか・・・。
C#.NETとかだと、ツール作りに参加できそうなのですけど・・・。
0108新人PG04/04/04 17:21ID:yroz7+Kx
>>106
ぜんっぜん試してないので、嘘こいているかもしれないですけど・・・。
一度、GetGlyphOutlineをコールしてバッファサイズを取得してから、実際のバッファを
いれてやれば良いような話がありました。
ttp://www.twin-tail.jp/contents/pg_tips/tips000.htm

こういうのではないでしょうか・・・?
0109名前は開発中のものです。04/04/04 17:34ID:D8QJdaIr
1バイトでなければ2バイトってのはどうかと。
0110親父PG04/04/04 17:50ID:6UsE36R6
>>108
どもどもお気ずかいありがとう。
それはバッファサイズの話ですね。
先ほどのコードはその前の「文字コード」を切り取る部分です。
あの関数(GetGlyphOutline)は1文字ずつしか処理できませんので、

LOOP
文字列>1文字切り取り>バッファサイズ取得(GetGlyphOutline)>バッファ作成>
アウトライン取得(GetGlyphOutline)>バッファから目標へコピー

バッファ開放
文字列ポインタインクリメント
目標のポインタを文字幅分加算
LOOPEND
このような流れになりますです。orzナンカクロウノワリニ....

データ形式についてはもう少し、デメリットとメリットを合わせて決めましょう
でツールですが、データ−の形式さえ決まっていれば、データ−互換で各自つくればいいかなぁと。
あんまり色々ケチって悩むより、作ったほうが早いというのが持論なのでorz..ソレデイタイメニアッテルケド

シナリオ作成については実績のある「ツクール」等を参考にしたほうがいいのかもしれませんが
実は見たこと無いので今度買ってきますかね^^;orz見てイヤニナルカモシレナイケド

私が大昔にゲームのシナリオ作成方法を聞いた時には、担当のPGの方は
TASM(ターボアセンブラ)のマクロで作成していました。
ライターの方は制御文を含めてシナリオを書いていたようです。

ライターにはBASIC作成能力ぐらいは求めていたようです。
昨今どうなのでしょうかね? 私もこのあたりが知りたいです。
0111親父PG04/04/04 17:56ID:6UsE36R6
>>109
よく見ていただけでは解りますが、ます1バイトでチェック
次に2バイトでチェック チェックの結果がTRUEの場合のみ実際に2バイトコードとして扱っています
(is関数)
第一水準第2水準 基本 かな かたかなの全てチェックしておりますです。

うにこーどとマルチバイト文字はサポートしてません。
チェックを入れることは可能ですが、それは別のところで一括変換されるべきでしょう。

0112名前は開発中のものです。04/04/04 18:17ID:KpeQdK+f
Xerces-Cでいいんじゃないの?最近のはしらんけど

本システムはVCでもツール類はちょこちょこつくって軽くテスト、
軽く改良って感じなので作りやすいのがいいと思うよ

そうなるとGUIが容易でとなるのでBCB、Delphi、java、c#くらいが
まず選択肢になると思う
あ、Delphiで気軽に使えるXMLパーサってあったかな

UTF8って選択はXML扱うならどの環境でも必須条件なので扱いやすい
たとえばmacユーザーにマップツール使ってもらうとか考えるとjavaも悪くない
複数の人に使ってもらうという前提が必要ならね

ソーサリアン知らないとなるとどう説明していいのやら
こんなあたりが参考になるのかな
ttp://www.ipc-tokai.or.jp/~ytanaka/pc88/sorc_pi.shtml
0113新人PG04/04/04 18:45ID:yroz7+Kx
>>110
全然違う話だったのね・・・鬱だ(ry

とりあえず、規格設計だけは作っておきます。
それからXMLか独自で組むかは、決めたほうが良いかなと思いますんで。

>>112
日本語処理が多いとUTF16という選択もあるんだけど、ゲームの概要が見えてないのでダメポ。
とりあえず、今はWindowsで動くものをw
機会あればやってみますわ<ソーサリアン
デモもありましたし。
0114親父PG04/04/04 19:14ID:6UsE36R6
>>112
あらためて偉大さを感じますね。紹介のHPをしみじみと読ませて頂きました。
メモリが足らなくなったら、メモリの内容をそのままDISKに保存。
プログラムをスワップするとかやってましたなぁ。

>>113
全然違う話ではないのですけどね^^
そうそう実際にコード切り取る時どうします?
あの関数についてぐぐって見たけどコードを切り取る部分は、書いてないのが多いので....

XMLについては「XMLのフォーマットがゲームデータ−の表すのに適しているか?」
の一点で評価しましょう。
現状ではXML形式に保存(できる)というスタンスで良いと思います。
そもそも「何をどのように保存するか?」が煮詰まらないと、決められないと思いますので。

これから夜勤です。orz

■ このスレッドは過去ログ倉庫に格納されています