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

みんなでMMORPGを作りましょう

■ このスレッドは過去ログ倉庫に格納されています
0001喪装中04/08/13 20:08ID:la60fqKo
俺が監督をやります

随時スタッフ募集
0715名前は開発中のものです。04/08/30 02:37ID:646WBQQS
>>714
問題意識が一番大きな、君が設計するのが一番いいよ。
0716名前は開発中のものです。04/08/30 05:26ID:vxLJl/mb
もうそろそろ夏休みも終わりか
0717名前は開発中のものです。04/08/30 11:39ID:QwkEnVgV
何が問題かって超初心者しか鍛えてやる事ができないってことだよな
0718名前は開発中のものです。04/08/30 13:29ID:Dt5WQPYM
うはwwwwwおkwwwwwww
0719名前は開発中のものです。04/08/30 16:33ID:3B3VdziH

MMORPGを作ってみたい
03/08/26(19:07)〜04/08/28(13:54)で676

みんなでMMORPGを作りましょう
04/08/13(20:08)〜04/08/29(06:05)で676

このスレ早いな。
0720名前は開発中のものです。04/08/30 17:04ID:J9w2Y0n4
マジレスするとネタスレの進行は早いんだよ
0721名前は開発中のものです。04/08/30 17:16ID:lRBMB8Db
ネタスレか
実際に作ってるのは居ないのか
072266304/08/30 17:26ID:XVFqp4fH
作ってるよ。何時できるか知らないけど。
そして誰もこんなヘタレに期待してないだろうけど。
0723名前は開発中のものです。04/08/30 17:28ID:lRBMB8Db
>>722
お ちゃんと居たのか
実際に作ってるだけ偉いと思うので、頑張って下され
0724名前は開発中のものです。04/08/30 17:41ID:ya+0eROQ
本気で作るなら2chなんかでやらないね
0725名前は開発中のものです。04/08/30 17:49ID:Dlo0x8eQ
>>724
んなこたない。
0726名前は開発中のものです。04/08/30 18:01ID:EUFjVpQY
191せんせー、MORPG用のDLL形式の通信ライブラリを作ろうと思うのですが
ライブラリ側からアプリケーションへのイベントの通知は
どういった方法を使うのが良いのでしょうか?
対象は今のところ、C言語でのwindowsアプリケーションを考えています。

今までに考えたものでは、
(イベントが起こった時に)
・ウィンドウメッセージをアプリ側から指定されたウィンドウに飛ばす
・アプリ側から指定されたコールバック関数へ引数に色々くっ付けて呼びだす
または
・毎回アプリ側から、ライブラリ内にあるイベントをチェックする関数を呼び出させて、
返り値でイベント状態を返す

があります。
私この度初めて一般向けのライブラリというものを作ろうとしているので、
全くとんちんかんで他人に理解されないものになってしまうのではとひやひやしております。
なので、こんな仕様はおかしいよ、とか、一般的にはこういう方法が使われるよ、といった指導を希望します。
最後になりましたが、私はCしか使えずまともなプログラムは仕上げたことがないレベルです。
0727名前は開発中のものです。04/08/30 19:01ID:nCGUtJ18
>>711
なんでそうねじれた解釈したがるのかね。
アプリとして完成させるのが重要っていってるんでしょ。
動かなきゃゲームとしての成立もクソもないよ。
0728名前は開発中のものです。04/08/30 19:47ID:QwkEnVgV
>>726
俺は191じゃないが、
・ウィンドウメッセージ→応答遅すぎじゃないか?
アプリケーション側の実装もややこしくなりそう
・コールバック→これが一般的かな
・チェック関数→他の処理で重たくなってる時は応答が遅くなってしまいそう
072919104/08/30 20:28ID:E5/Oo7Jb
オブジェクト指向ってのが非常に便利なんで、特に制限がなければC言語で作ってるヤツは
少し勉強してC++でクラスを使いこなせるようになるとイイと思うぞ。

>>726
>ウィンドウメッセージ
この案だとウィンドウプロシージャーをライブラリ利用者が書かないといけないから駄目ぽ
>コールバック
>>728の指摘通りコレが使いやすいだろう。
リスナークラスつくって渡すって方法を俺はやったな。
Cでやるなら各イベントごとの関数ポインタを構造体にまとめて
その構造体をライブラリ関数で登録してやると良いな。
>チェック関数
定期的にチェックするアプリケーション構造をライブラリ使用者に
押しつける事になるからやめた方がよろしいかなぁ

>MORPG用のDLL形式の通信ライブラリ
ってことだけど、これが前提ならライブラリの通信部分は
マルチスレッド+イベントオブジェクトを使った方が良いな。

>一般向けライブラリ
MORPG特化ライブラリを作りたいのか?
それとも、MORPG特化通信ライブラリを作りたいのか?
まぁ、需要があるのはMORPGツクールなわけだが…
0730名前は開発中のものです。04/08/30 21:28ID:EUFjVpQY
お二方とも、返答ありがとうございます。
ウィンドウメッセージはやっぱりいくないんですね。
コールバックが推されているようなので、191せんせいのアドバイスを生かして作っていきたいと思います。
因みに、イベントオブジェクトというのは、WSAWaitForMultipleEvents系APIを使うもの、ということで良いのでしょうか。
これはシンプルそうで良いですね。今の今までselectを使おうと思っていたので良い助言になりました。

それから、「一般向けライブラリ」についてですが、これは私が今まで内輪で使うライブラリを作ってきたため、
それとは違う、という意味で使った言葉ではあるのですが。
実は191せんせいの言われるようなMORPG特化ライブラリを目標に作っていきたいと思っています。
通信以外の機能に、キャラクタ移動時の座標補間と障害物回避運動パスの生成を盛り込みたいんです。

そういえばネットワークRPGメーカー2000なんていうのが昔あったみたいですね。
残念ながらもう終わってしまったようで何も言えないけれど・・。
これだけゲムデブ板でネトゲスレが立ってるんだからほんとに需要ありそうですよね。
073119104/08/30 22:17ID:E5/Oo7Jb
>>730
>イベントオブジェクトというのは、WSAWaitForMultipleEvents系APIを使うもの
そういうことです。
俺はWaitForMultipleObjects使って通信イベントと通信スレッド終了イベントの両方を待機させてるな。

良い目標を持って頑張っているようだな。そのまま最後までガンバレや。
あと俺は先生じゃなくてチーターだから
0732名前は開発中のものです。04/08/31 00:28ID:6+TORdEW
では水前寺先生と呼ばせていただこうと思います。
0733名前は開発中のものです。04/08/31 01:17ID:2iIaRDnI
マルチスレッドなプログラム書くなら実際に複数CPU載った
マシンで実行/デバグしてみたほうがいいぞ。
単一CPU機ではめったに出ないバグがぼろぼろ出て楽しいし。
0734名前は開発中のものです。04/08/31 01:37ID:wCdLoFkM
>>733
それって本来OSレベルの問題なんじゃ
0735名前は開発中のものです。04/08/31 01:43ID:6+TORdEW
acceptしようとするとWSAENOTSOCKってエラーが出るんだけど、
これってどっちの問題なんでしょう?
送信側のソケットがおかしいのかなんなのかさっぱりわからんです。
うpしたら誰か見てくれます?
0736名前は開発中のものです。04/08/31 01:46ID:TdIjd0h5
>>733-734
int hoge;
thread1(){hoge++;}
thread2(){hoge++;}

を同時に動かすと1しか増えて無いかもって事でしょ。
実際はオブジェクトの同期とかで、こんな分かりやすいミスじゃ無いだろうけど。
073719104/08/31 01:54ID:pIiGswtF
>>733
複数CPUのマシンなんてさわったことないので
どんなバグがでるのか詳しく教えて欲しいな

>>735
うpしたら見るよ
073819104/08/31 02:15ID:pIiGswtF
>>735
良く見たらうpするまでもなく
テディベアかなんかに状況説明すれば解決しそうだな。
たぶん、不正なソケットを引数として渡しちまったってことだろ。
acceptに渡すのはlistenしたソケットだぜ。
073973504/08/31 02:23ID:6+TORdEW
>>737
すいません、うpしましたので見てみてください。お願いします。
VC6のプロジェクト丸ごとはいってますけど、
リンクとか切れてたら「wsock32.lib」追加するだけです。
ttp://gamdev.org/up/img/1132.zip

とりあえず622氏のやつコピペって少し改造して作ってます。
勝手に使ってすいません。ほとんど同じはずなんですけど、
何処が悪いのかわかんないです。
とりあえずAcceptまで行きたいのでsendとかrecvとかはまだまともに作ってないです。
鯖はポート入れないでそのまま起動してください。
見づらいと思うので申し訳ないですがおねがいします。
074073504/08/31 02:26ID:6+TORdEW
>>738
あれ、準備してる間にレスもらってました。
一応リスンソケット渡してるつもりです。
で、リスンソケット作って待ち受けるところまではエラーは出てない臭いです。
なので、何がおかしいのかな、、、と分からなくなってしまいました。
074119104/08/31 03:01ID:pIiGswtF
>>735
まー良くあるバグってやつだな。
DialogProc()ん中で
 TCPServer server(hDlg);
ってやってるだろ、コレが原因だな。
ローカル変数になっちゃってるから、毎回DialogProc()に実行が移ると
serverクラスが生成されて、returnと同時に破棄されとる。
よって、server.Init()の時のlistenしたソケットも捨てられてるな。
 static TCPServer server(hDlg);
 ↑のようにstaticつけて静的変数にしとけばok
074273504/08/31 03:43ID:6+TORdEW
>>741
どうもこんな遅くすいませんです。
できました。なんともお恥ずかしい限りです。
言われて見ればなるほど納得しました。
先はおそろしく長い…
074362204/08/31 12:58ID:1W6zrceB
BCCDevで開発(win)
>>642
3がどうにもこうにも出来ませんでした。
メッセージがちゃんと来ているはずのところで
CallWindowProcして、直接呼んでしまう処理になってしまいました。
助言お願いします。

>>643
見やすい!

時間と視力とコードの結晶
ttp://gamdev.org/up/img/1138.zip
質問
1.サブクラス化はしてあると思うのですが、メッセージが思うように
switchにひっかかってくれません。何が原因なのか、または注意点などお願いします。
(サブクラスでmsg処理しているサンプルが見つからなすぎ)
2.次のステップでは何をしたほうがいいでしょうか?

下のウィンドウでタブ押すと送信
受信は上のウィンドウで、8kぐらいまで保持化(古いのから消えていく、発言事には消えない!)
0744名前は開発中のものです。04/08/31 17:07ID:T35fpLCq
WSAAsyncSelectへ渡っているのはhwndですが、
実際にサブクラス化されてるのはhWndSendMsgではないのですか?
読み間違ってても許してね
074519104/08/31 20:09ID:pIiGswtF
>>743
>>744が言うとおりに渡してるウィンドウハンドルが違うな。
というか、>>642で書いた真意は2、3はクラス内部で処理ってことだ。
Init(HWND)の中でコッソリサブクラス化。そのサブクラス化したプロシージャーで通信処理をやらせれば、
呼び出し元のウィンドウにワザワザ通信処理を書く必要がなくなるからな。
通信担当プロシージャーがprivateなメンバ関数ってのがポイント

まぁ、少々レベルが高かったかもな
クラス内部でサブクラス化するときはプロシージャーを静的なメンバ関数として定義しなきゃいけない。
静的なメンバ関数から、本来のインスタンスを特定するのにSetProp()とかGetProp()を使う。
とか、イロイロめんどくさいな。でも便利

>次のステップでは何をしたほうがいいでしょうか?
とりあえず、受信の所の改造だ。現状だと一度の受信でメッセージが全部受信出来たと仮定してるだろ。
場合によっては分割して届いたりするからな。送信時に何バイト送ったかの情報も送信するようにして、
送信バイトと同じバイト数を受信したら、本来の受信後の処理をさせる。ってのが基本だな。
文字列素送りじゃー駄目だ。
0746名前は開発中のものです。04/08/31 22:24ID:XlUxaRqa
いつのまにか俺に聞けスレになってるんだな。
わざわざこんなスレでやらんでも・・・
0747名前は開発中のものです。04/08/31 23:13ID:T35fpLCq
良スレ
0748名前は開発中のものです。04/08/31 23:29ID:hg/ygmOZ
ていうか191以外にも答えられるやつはたくさんいそうなのに
191が答えないと満足してくれないふいんきになってるのがな
0749名前は開発中のものです。04/08/31 23:46ID:XlUxaRqa
きまったモジュール作ってるときはいいんだけど、ゲームとして組み立てていく時って
自分が作りたいイメージがないと、なにやっていいかわかんなくなるんだよな。で>>1に戻る。
煽ってるわけじゃないぞ、まぁガンガレ。
0750名前は開発中のものです。04/08/31 23:55ID:seKFT3kU
なんだ、こういう開発ゴッコがやりたかったのね
最初に言えよ
0751名前は開発中のものです。04/09/01 01:49ID:TBA+Y3JP
>>748
俺も191と同じぐらいのスキルはあるんだが、人のソースみるのめんどくさ。なのよ。
スキルアップには人のソースみたほうがいいのだがやる気になれん。
ほんと191は面倒見がよいし(少なくとも俺より)説明もよろしいんで出番なしですな。
0752名前は開発中のものです。04/09/01 10:35ID:A8Zc28Vq
まだログインやチャットで苦しんでるのですがちょっと質問させてください。

通信するときにソケットを使って接続するところまではできたのですが
たくさん接続したときにどの接続が誰なのか区別するのはどうすればいいですか?

これができずに履歴の保存で苦労してます。よろしくお願いします。
0753名前は開発中のものです。04/09/01 10:59ID:37G7q50O
まぁガンガレ
0754名前は開発中のものです。04/09/01 11:14ID:BdF6D2vC
>>752
接続中のクライアント数と同じ数だけacceptでソケットハンドルを得てるわけで、
クライアントのソケットハンドルを持つ通信用クラスとプレイヤーキャラのクラスを
関連付けすればいい。

誰かというのがプレイヤーキャラのことならば、
ソケットハンドルを得たときに、クライアントに対しログインIDの送信を要求し、
ログインIDと一致するプレイヤーキャラをロードすればいいんじゃないか?
0755名前は開発中のものです。04/09/01 11:54ID:A8Zc28Vq
>>753
>>754
ありがとうございます。
>関連付けすればいい
これができてなかったみたいです。
キャラクターのクラスを作ってそのメンバ変数にソケットハンドルを持たせてみます。
0756名前は開発中のものです。04/09/01 12:17ID:2IXtq3X7
この板みてたら1が激怒したよ
0757名前は開発中のものです。04/09/01 16:13ID:HRpmmagl
1さんのお知り合いでつか
0758名前は開発中のものです。04/09/02 02:56ID:cMQJct2Z
よーし、パパもサーバー書いちゃうぞ〜




ところで、
>>448 ってどうなったん?
0759名前は開発中のものです。04/09/02 02:57ID:cMQJct2Z
>>488 ですた
0760名前は開発中のものです。04/09/02 06:24ID:P8nJQ5G5
いつみてもやる気なさそうなページだなぁ
みんなで作ろうぜ!作ってるぜ!なんて意気込みが微塵も感じられない。
076119104/09/02 06:48ID:7f5AinZL
>>488はこのスレの前半戦(1-616)のネタをまとめたサイトだな。
>>617以降はスレの趣旨が微妙に変わったので>>488のサイトに期待するのは可哀想だろ。
>>756自称チーターによって乗っ取られたようなもんだから>1も怒るかもな。

>>758
サーバーに期待する。
プロトコルも決めちゃって、他のヤツにクライアント書かせてみたら面白そうだな。
0762名前は開発中のものです。04/09/02 07:08ID:iIL4jgPK
ここで先にアプリケーションプロトコル決めてみたら?
0763名前は開発中のものです。04/09/02 10:56ID:huDvHtkT
おまいら何本ぐらい接続してる?
今まで1本でやってたけどチャットとゲーム用ぐらいは別にしたほうがいい気がしてきた
076466304/09/02 11:10ID:HhOdq8th
とりあえず最低限、サーバと複数クライアント間で会話をすることは
できるようになった気がする。
しかしプログラムは楽しいな。一個ずつできる事が実感をもって増えていく。
もちろん一言でできると言っても次元の高い低いの違いはあるけど。

今までグラフィックばかりやってたけど凄く時間がかかる作業で
キャラなりオブジェクトなり作って一つ一つ完成していくのはそれはそれで楽しいが、
振り返ってみると延々頂点を一センチ二センチ動かす作業を繰り返してただけで
新しく得るものなんてほとんどなくて「この期間俺は何をやってたんだろう…」と
虚しい気分になるだけだったからな。
0765名前は開発中のものです。04/09/02 11:12ID:9FsdpOIU
これ使えばwin機でもUNIX向けの開発できるんじゃね?
今は鯖もwin向けに書く流れだから関係ないかもしれんが

http://www.forest.impress.co.jp/article/2004/01/16/servicesforunix35.html
http://www.microsoft.com/japan/windows/sfu/
076666304/09/02 12:10ID:HhOdq8th
今回のチャットはVCのダイアログエディタつかってダイアログベースで作ったけど、
ゲーム内で表示するウィンドウのためのウィンドウシステムみたいのをつくりたい。
ウィンドウオブジェクトの下にボタンとかタブとかテキストフィールドとか自由に配置して
そのテキストフィールドの下にはさらにスクロールバーを配置してとか
そういうのを柔軟にデザインできる仕組みを作りたい。
けど激しくむずそう。なので
とりあえず最初の手がかりとしてなんか課題をくれるとうれしいのであります。
0767名前は開発中のものです。04/09/02 12:27ID:GL/7SFvs
>>762
とりあえずちょっと妄想してみた
このまま拡張していっていいのか評価が欲しい
191氏もヨロシク

・目標
勉強用ということでデバッグの簡単さを優先させたい
マップを歩き回ってチャットするのがとりあえずの目標
ある程度の拡張性は欲しい
特定の開発環境にあまり依存しない

・仕様
通信はテキストによっておこなう
n*4バイトで構成される命令の送受信をおこなう

・・命令の仕様
1語は4byteとする
先頭に1語の命令部とそれに続く0語以上のデータ部で構成される。
****++++++++
*命令部
+データ部
例)
mvtorigt
attk7743
quit
076876704/09/02 12:28ID:GL/7SFvs
・・命令表
カッコ内はバイト数

戻り値
retn[コード(1)]
なんらかの命令に対する返事である
成功もしくは失敗を示すコードが含まれる

ログイン
lgin[id(8):password(8)]
この命令に成功するとキャラクター操作系の
命令が使用可能になる
戻り値
成功 okok
IDが存在しない noid
パスワードが違う nopw

終了
quit
ログイン以前の状態になる
切断やログインが可能な状態になる
戻り値
成功 okok
076976704/09/02 12:29ID:GL/7SFvs
mvto[方向(1)]
方向=upup,rigt,down,left
[方向(1)]で指定した方向へ移動する
戻り値
成功 okok
失敗 ngng

chat[チャンネル(1):メッセージ(10)]
戻り値
チャット
成功 okok
そのチャンネルでの発言は許されていない chng
失敗 ngng
0770名前は開発中のものです。04/09/02 12:48ID:iIL4jgPK
チャットはもうちょっと文字数欲しいな…
0771名前は開発中のものです。04/09/02 12:49ID:iIL4jgPK
4bytes*10=40bytesなのかorz
0772名前は開発中のものです。04/09/02 13:07ID:GL/7SFvs
スマソ、カッコの中の数字が1語なのか1byteなのか自分が一番混乱してたorz
1語(=4byte)に統一した修正版

retn[コード(1)] (合計8byte)
lgin[id(2):password(2)] (合計20byte)
mvto[方向(1)] (合計8byte)
chat[チャンネル(1):メッセージ(10)] (合計48byte)
077376704/09/02 13:22ID:GL/7SFvs
>>772に名前入れ忘れてたスマヌ

ゲームによって移動方法が変わるから目的地を指定して後は鯖まかせで道が選ばれるタイプか
上下左右をダイレクトに指定するタイプなのかで修正が必要な予感
個人的には後者タイプでアクション性が強いものが好みだけど通信量が増えそう

mmoゼルダやりたい(;´Д`)ハァハァ
0774名前は開発中のものです。04/09/02 14:56ID:ucIC7S/S
コインでお絵かきしたいよ
077519104/09/02 15:14ID:7f5AinZL
>>767
チャットの部分がちょっと気になるよな。
一文字発言でも48byteってやな感じ。
発言文字列のサイズも送ったほうが良いだろう。
あと、通信料気にするなら文字列で送っちゃ駄目だよな。

で、俺の場合
[送信サイズ(2byte)] [メッセージの種類(1byte)] [データ(可変サイズ)]
受信時に2bye読み込んで受信サイズ取得
受信サイズ全部受信し終わったら、メッセージの種類に応じた処理
チャット文字列送信ならデータ部分が発言文字列って感じだな。

>mmoゼルダやりたい(;´Д`)ハァハァ
隣接キャラのPC強制シャットダウンコマンドを実装するだけで御手軽に殺伐としたチャットが出来ると思うゼ
0776名前は開発中のものです。04/09/02 15:23ID:ucIC7S/S
>>775
文字列で動くようになったらバイナリ化する予定なんじゃないか?
文字列バージョンならターミナルソフトでも確認できるし。
しかし可変長ぐらいは扱ってほしいな。
077748804/09/02 17:17ID:2JFS4kJQ
>>761
ちゃんと、見に来てるよ^^;;
でも、なんか話が変わってるからついていけてないだけです^^;;
なんか、問題あったらスマソ
0778名前は開発中のものです。04/09/02 21:05ID:3MdDkgVc
MMORPGに向いてるライブラリってどれ?

■参考
各種ライブラリ紹介スレ
http://pc5.2ch.net/test/read.cgi/gamedev/1008220559/
http://gamdev.org/w/?%5B%5B%A5%E9%A5%A4%A5%D6%A5%E9%A5%EA%5D%5D
077948804/09/02 21:15ID:R5EF3Y1l
質問!!

C++って奴は、ゲーム作るのにむいてますか?
078019104/09/02 21:20ID:7f5AinZL
>766
某ROみたいにウィンドウをユーザーが自由に配置するやつってことかな。
だとしたら、メメインウィンドウを親にしていしてCreateWindowして
タイトルバードラッグでウィンドウ移動とかしてやればできそうだな。

そうじゃなくて、プログラムでその場に応じたボタンとか出したいなら
CreateWindowしまくるか、ダイアログなら適当に貼り付けておいてGetDlgItem()で
ハンドル取得すれば、たいていのことはできる。

なんか良い課題が思い浮かばないが、
ウィンドウの中にウィンドウを表示するクラスでも作ってみたら?
ウィンドウプロシージャはクラスのメンバ関数で

>>777
監督はもういない。
シナリオも協力者もいなくなった。
自分でプログラム書いて壁にぶつかったらこのスレにこい。
きっと誰かが助言をくれるだろう。
078119104/09/02 21:35ID:7f5AinZL
>>778
あんまそういうの使わないからわからん。
自分で自分用ライブラリつくるのが一番勉強になるし、
そのつくったものが資産にもなるから時間があるならおすすめ

>>779
多態性ウマーなのでC++(というかオブジェクト指向)はゲームに向いていると思ってる。
C++はCの強化版みたいなもんなので、C++が出来るってことはCも出来るってことだしな。
今からやるならC++おすすめ。
0782名前は開発中のものです。04/09/02 21:44ID:zk6ELFe9
>>766
DirectX 2004 SummerUpdate に新しく追加された CustomUI みたいなことがやりたいのなら、
既存のウィンドウシステムの仕組みを調べるとある程度どんな感じで作ればいいかはつかめると思う。
0783名前は開発中のものです。04/09/02 22:20ID:5OFdC6GO
>>780
>>766じゃないけど、ウィンドウプロシージャってメンバ関数にできる?
漏れはそれやろうとしたら

error C2440: '=' : 'long (__stdcall Window::*)(struct HWND__ *,unsigned int,unsigned int,long)' から 'long (__stdcall *)(struct HWND__ *,unsigned int,unsigned int,long)' に変換することはできません。(新しい動作 ; ヘルプを参照)

って怒られたYO!
078419104/09/02 22:29ID:7f5AinZL
>>783
ちょっとしたコツがあってな、ウィンドウプロシージャにstatic つけるのさ
0785名前は開発中のものです。04/09/02 22:33ID:9SKQ+4l5
>>783
staticつけれ。
けどstaticつけたら名前空間に入っただけの
ただの関数になる(=メンバ変数、メンバ関数にアクセス出来ない)から
ウィンドウプロシージャはただの関数にしておいて、その中でメンバ関数を呼べばいい。
078678304/09/02 22:39ID:5OFdC6GO
>>784
わ〜い!即レスありがd

確かにstaticにすれば行けるけど、インスタンス独自の処理をさせたい時に困らない?
漏れがやりたかったのは

class Windos
{
public:
Window(...); // CreateWindowやらなにやら

//かなり割愛
protected:
virtual LRESULT WindowProc(...); //ここでこのインスタンス独自の処理をさせたい
}

って感じなんだけど・・・
staticにするとどのインスタンスのメッセージなのかわからないYO!
インスタンスのリストでも持っててプロシージャの中で渡って来たウィンドウハンドルに対応するインスタンス探さなきゃいけないのかな。
それともこういう考え方自体間違ってる????
078776604/09/02 22:45ID:HhOdq8th
>>780
どうもです。一応標準のウィンドウシステムを使わないで
生意気にも全部自作したいと思っているのであります。
見た目とか好きにデザインしたいので、、、、

、、、と思ってたらこんなのがあったのか!>>782(教えてくれてありがとう)
IMEクラスとかがんばって作ってしまったのはなんだったんだろう。。。
でも悩むなぁ。自分で作んなきゃ力になんなそうだし、
かといってあくまでやりたいのはコーディングじゃなくてゲーム作りだし。
便利なものは使うべきか…
0788名前は開発中のものです。04/09/02 22:45ID:9SKQ+4l5
>>786
HWNDにクラスをもたせて置けばいい。
GetWindowLong/SetWindowLong参照。
078978304/09/02 22:45ID:5OFdC6GO
書いてる間にレスついてた!
>>785もありがd!
うんうん。アクセスできないっていうか、誰のメンバ関数を呼べばいいか判断できなくて困ってるYO
079076604/09/02 22:49ID:HhOdq8th
あれ、なんだか標準(?)のウィンドウを使ってる人が多いっぽいんですが、
そういう場合は見た目はカスタマイズしたりして使ってるんですかね。
猫でも〜とか見てるとある程度カスタマイズできるみたいですけど
結構いろいろ手続きが面倒くさそうで…
0791名前は開発中のものです。04/09/02 23:14ID:39hzQg9R
>>787
がんばって最後まで作って。
079278304/09/02 23:21ID:5OFdC6GO
みんなスゲーーーー!
>>788
ありがd!!
そんな便利な関数があったんだね〜〜
それ使ってユーザーデータにポインタを持たせてやったら呼び出せた!
MSDN検索したらGetWindowLongPtrなんてのもあったけど、漏れの環境じゃ使えなかった。
SDKをアップデートしないとダメなのかな〜

とにかくレスくれたみなさんありがd!!!
0793名前は開発中のものです。04/09/03 00:34ID:1r39DuWj
ZONE分けどうするかなぁ
079419104/09/03 04:57ID:Gq9r/pVl
>>792
俺はGetPropとSetPropを使ってる。
まぁ、参考までにってことで

>>790
DirectXで普通のウィンドウを使いたいってことなのか、
それとも。ただ単にコントロールを自分で描画したいのか?
ボタンとかならオーナー描画にして、自分で描画すれば簡単にできるな。
079579004/09/03 09:58ID:6G+1Tm5q
>>790
例えばチャット窓用のテキストフィールドについて考えれば、
winAPIの標準コントロールを貼り付けるんじゃなくて、
文字の折り返しからスクロールバーから日本語変換から自分で実装したいということです。
で、そんな感じに「ボタン」とか「タブ」とか「スライダー」みたいな部品も全部作って、それらを更に
「自作のゲーム内ウィンドウ」に、
(↑これも「タイトルバー」がある、とか「縮小ボタン」がある、とか定義できる)」
「部品として」位置や個数など柔軟に配置し、制御したいです。

DirectX9.0Cで見た目もカスタマイズできるUIコントローラーというのができたらしいですが、
なんかやっぱり自分で全部作りたくなってきました。
クラスの勉強の範疇だと思うんですが、どうしてよいやらという感じです。
それぞれ部品の一個一個単独なら作れそうなんですけど。

↓標準コントロール貼り付けて作ってるっぽい例
ttp://eternal.s19.xrea.com/ss.html

↓自前ウィンドウシステムを作ってるっぽい例
ttp://www.nubarou.mydns.jp/wiki/pukiwiki.php
(スクリーンショットのところ参照)
0796名前は開発中のものです。04/09/03 16:33ID:rdaSqmOu
日本語変換て…何参照するつもりなんだ
079779004/09/03 17:00ID:6G+1Tm5q
漢字変換って言うか、FEPの制御のことだけどなんか変かいな?
0798名前は開発中のものです。04/09/03 17:00ID:3I63lbKz
>>796
チャットウィンドウのIME処理もAPIからやりたいってことじゃね?
079919104/09/03 19:36ID:Gq9r/pVl
>>795
DirectXで日本語入力は確かに手強いな。
エディットボックスをDirectXで使いたいと思って対処したときは大変だった。
CreateWindowでエディットボックス作成して画面外の遙か彼方へ移動して隠蔽。
ウィンドウに対するクリックとかキー入力でエディットボックスに渡したいものだけを
座標変換とかしてSendMessageでエディットボックスに再送信。描画は全部自分で。
なんかスマートじゃないな。

>それぞれ部品の一個一個単独なら作れそうなんですけど。
単独で作れそうならいけるんじゃないか?
ウィンドウ管理クラスを作って、スクロールバーとかのコントロール系クラスを追加していく
javaのAppletクラスみたいな感じで実装したら良いんじゃないかなぁ
080079504/09/03 22:25ID:6G+1Tm5q
>>799
FEP制御はある程度できてて、
入力した文字とか変換候補をベタに表示したりするのはできてるんで、
あとはウィンドウ幅に合わせて改行したりスクロールバーとかつけられたら
エディットボックスとして単体部品としては完成できそうです。
けどやっぱり全体をまとめたクラスの設計をどうすればいいのか分からないし
どこがどう分からないというのも複雑で説明できない。。。
もうすこしクラスの勉強をする必要がありそうです。
0801名前は開発中のものです。04/09/04 01:37ID:pKV767XC
VC++4.2からはコンポーネントギャラリでサクッと雛形を入れたれたような?
それ参考にすれば余裕かと。
080219104/09/04 01:50ID:nZw1Rcnl
>>800
クラスの設計とかは経験値が重要かもしれん。
いくつもプログラム書いてみることだな。ガンバレ

子ウィンドウを考えないなら俺ならこうすると思う。
clas Iウィンドウ{
 RECT* GetRect();
 プロシージャー(...);
 (略)
}
class ウィンドウマネージャー{
 ウィンドウ追加(Iウィンドウ *pWindow);
 ウィンドウ抹殺(Iウィンドウ *pWindow);
 プロシージャー(...)
 (略)
}
実際のコントロールはIウィンドウを継承させる。
そしたら、ボタンでもエディットボックスでもウィンドウマネージャーにぶち込める。
本来のウィンドウをサブクラス化とかして、ウィンドウマネージャーのプロシージャーに渡す。
ウィンドウマネージャーでアクティブなコントロールを判断(クリックならヒットテストして)、そしてコントロールのプロシージャーを実行。

ウィンドウマネージャー::プロシージャー(...){
 Iウィンドウ *pWin = ウィンドウマネージャー::アクティブウィンドウ検索(posClick) ;
 pWin.プロシージャー(...) ;}

こんな感じかな。
Iウィンドウでコントロールの場所と矩形領域を管理。
ウィンドウマネージャーでウィンドウの重なり(順番)を管理。
参考にならなかったらすまぬ。
俺が助言できるのはココまでだ。
0803名前は開発中のものです。04/09/04 05:32ID:KGVvmcpk
どこかにライセンスフリーで一貫性があって魅力的な「RPGの世界設定」無いかね
0804名前は開発中のものです。04/09/04 05:56ID:9DgqjEuk
>>803
妄想だらけの設定厨はいくらでもいるんだけどな。皮肉だなw
なんとか妄想厨を寄せ集めて、一つのものはできないものかw
0805名前は開発中のものです。04/09/04 08:41ID:mj/YOjUv
>>803
言われてみれば無いよな、ほんと。
前出てきてた農民ベースのMMOなんか面白そうだったがw
0806名前は開発中のものです。04/09/04 11:17ID:07CYu+xr
通信ウィンドウのサブクラス化
結論
WSAAsyncSelect()で任意のウィンドウに直接msgを
送るのはやめる。
だめだ、ネットのサンプルソースじゃ
見つけたのは全てMainProcに直接書いてる
ましなのは、MainProcで明示的に通信用Proc呼んでるし
・・・帰りに図書館行ってきます
0807名前は開発中のものです。04/09/04 13:38ID:Cgo1/Ryk
サブクラス化のメリットって何?
少なくとも現時点での設計で
0808名前は開発中のものです。04/09/04 13:42ID:KGVvmcpk
SwingとかGTK2とか、それのWindowツールキットと似たような設計で何が不満なんだ。
人間にとっての使いやすさ考えると、おのずとああいう設計になると思し、
それで慣れてる人多いからそういう設計でいいんでないか。
0809名前は開発中のものです。04/09/04 14:19ID:07CYu+xr
>>807
1、可読性。
2、ウィンドウ機能としてクラスにまとめられる。
3、デフォルトの処理をしなくて良い。
0810名前は開発中のものです。04/09/04 14:31ID:fOQ1B4hR
プロトコルは
>>767で決定なの?
081119104/09/04 16:02ID:nZw1Rcnl
>>806
サブクラス化できてんでしょ?
例えばhMainWin(MainProc)があるとして
hMainWinをサブクラス化してSubProcを関連付ける。
SubProcで通信メッセージだけを拾って処理。
WSAAsyncSelect()でメッセージをhMainWinに送れば実現できそうじゃない?

>>807
通常のプロシージャーで通信について配慮する必要がない。
ウィンドウのあるアプリケーションなら簡単に導入可能。

>>808(>>803)
>「RPGの世界設定」無いかね
現実
>SwingとかGTK2とか、それのWindowツールキットと似たような設計で何が不満なんだ。
誰か不満もらしたか?

>>810
>>767が作る>>767のためのアプリケーションはあのプロトコルをベースに修正したもので決定だろ。

このスレで何か一つのものを作ってる訳じゃないぞ!
0812名前は開発中のものです。04/09/04 17:06ID:NBe8VnDT
MMORPG って何の略?
0813名前は開発中のものです。04/09/04 17:58ID:8rj2jPWm
>>811
正直マ板いけば?って感じ
0814名前は開発中のものです。04/09/04 18:04ID:8rj2jPWm
ムだった
■ このスレッドは過去ログ倉庫に格納されています