みんなでMMORPGを作りましょう
■ このスレッドは過去ログ倉庫に格納されています
0001喪装中
04/08/13 20:08ID:la60fqKo随時スタッフ募集
0715名前は開発中のものです。
04/08/30 02:37ID:646WBQQS問題意識が一番大きな、君が設計するのが一番いいよ。
0716名前は開発中のものです。
04/08/30 05:26ID:vxLJl/mb0717名前は開発中のものです。
04/08/30 11:39ID:QwkEnVgV0718名前は開発中のものです。
04/08/30 13:29ID:Dt5WQPYM0719名前は開発中のものです。
04/08/30 16:33ID:3B3VdziHMMORPGを作ってみたい
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:J9w2Y0n40721名前は開発中のものです。
04/08/30 17:16ID:lRBMB8Db実際に作ってるのは居ないのか
0722663
04/08/30 17:26ID:XVFqp4fHそして誰もこんなヘタレに期待してないだろうけど。
0723名前は開発中のものです。
04/08/30 17:28ID:lRBMB8Dbお ちゃんと居たのか
実際に作ってるだけ偉いと思うので、頑張って下され
0724名前は開発中のものです。
04/08/30 17:41ID:ya+0eROQ0725名前は開発中のものです。
04/08/30 17:49ID:Dlo0x8eQんなこたない。
0726名前は開発中のものです。
04/08/30 18:01ID:EUFjVpQYライブラリ側からアプリケーションへのイベントの通知は
どういった方法を使うのが良いのでしょうか?
対象は今のところ、C言語でのwindowsアプリケーションを考えています。
今までに考えたものでは、
(イベントが起こった時に)
・ウィンドウメッセージをアプリ側から指定されたウィンドウに飛ばす
・アプリ側から指定されたコールバック関数へ引数に色々くっ付けて呼びだす
または
・毎回アプリ側から、ライブラリ内にあるイベントをチェックする関数を呼び出させて、
返り値でイベント状態を返す
があります。
私この度初めて一般向けのライブラリというものを作ろうとしているので、
全くとんちんかんで他人に理解されないものになってしまうのではとひやひやしております。
なので、こんな仕様はおかしいよ、とか、一般的にはこういう方法が使われるよ、といった指導を希望します。
最後になりましたが、私はCしか使えずまともなプログラムは仕上げたことがないレベルです。
0727名前は開発中のものです。
04/08/30 19:01ID:nCGUtJ18なんでそうねじれた解釈したがるのかね。
アプリとして完成させるのが重要っていってるんでしょ。
動かなきゃゲームとしての成立もクソもないよ。
0728名前は開発中のものです。
04/08/30 19:47ID:QwkEnVgV俺は191じゃないが、
・ウィンドウメッセージ→応答遅すぎじゃないか?
アプリケーション側の実装もややこしくなりそう
・コールバック→これが一般的かな
・チェック関数→他の処理で重たくなってる時は応答が遅くなってしまいそう
0729191
04/08/30 20:28ID:E5/Oo7Jb少し勉強してC++でクラスを使いこなせるようになるとイイと思うぞ。
>>726
>ウィンドウメッセージ
この案だとウィンドウプロシージャーをライブラリ利用者が書かないといけないから駄目ぽ
>コールバック
>>728の指摘通りコレが使いやすいだろう。
リスナークラスつくって渡すって方法を俺はやったな。
Cでやるなら各イベントごとの関数ポインタを構造体にまとめて
その構造体をライブラリ関数で登録してやると良いな。
>チェック関数
定期的にチェックするアプリケーション構造をライブラリ使用者に
押しつける事になるからやめた方がよろしいかなぁ
>MORPG用のDLL形式の通信ライブラリ
ってことだけど、これが前提ならライブラリの通信部分は
マルチスレッド+イベントオブジェクトを使った方が良いな。
>一般向けライブラリ
MORPG特化ライブラリを作りたいのか?
それとも、MORPG特化通信ライブラリを作りたいのか?
まぁ、需要があるのはMORPGツクールなわけだが…
0730名前は開発中のものです。
04/08/30 21:28ID:EUFjVpQYウィンドウメッセージはやっぱりいくないんですね。
コールバックが推されているようなので、191せんせいのアドバイスを生かして作っていきたいと思います。
因みに、イベントオブジェクトというのは、WSAWaitForMultipleEvents系APIを使うもの、ということで良いのでしょうか。
これはシンプルそうで良いですね。今の今までselectを使おうと思っていたので良い助言になりました。
それから、「一般向けライブラリ」についてですが、これは私が今まで内輪で使うライブラリを作ってきたため、
それとは違う、という意味で使った言葉ではあるのですが。
実は191せんせいの言われるようなMORPG特化ライブラリを目標に作っていきたいと思っています。
通信以外の機能に、キャラクタ移動時の座標補間と障害物回避運動パスの生成を盛り込みたいんです。
そういえばネットワークRPGメーカー2000なんていうのが昔あったみたいですね。
残念ながらもう終わってしまったようで何も言えないけれど・・。
これだけゲムデブ板でネトゲスレが立ってるんだからほんとに需要ありそうですよね。
0731191
04/08/30 22:17ID:E5/Oo7Jb>イベントオブジェクトというのは、WSAWaitForMultipleEvents系APIを使うもの
そういうことです。
俺はWaitForMultipleObjects使って通信イベントと通信スレッド終了イベントの両方を待機させてるな。
良い目標を持って頑張っているようだな。そのまま最後までガンバレや。
あと俺は先生じゃなくてチーターだから
0732名前は開発中のものです。
04/08/31 00:28ID:6+TORdEW0733名前は開発中のものです。
04/08/31 01:17ID:2iIaRDnIマシンで実行/デバグしてみたほうがいいぞ。
単一CPU機ではめったに出ないバグがぼろぼろ出て楽しいし。
0734名前は開発中のものです。
04/08/31 01:37ID:wCdLoFkMそれって本来OSレベルの問題なんじゃ
0735名前は開発中のものです。
04/08/31 01:43ID:6+TORdEWこれってどっちの問題なんでしょう?
送信側のソケットがおかしいのかなんなのかさっぱりわからんです。
うpしたら誰か見てくれます?
0736名前は開発中のものです。
04/08/31 01:46ID:TdIjd0h5int hoge;
thread1(){hoge++;}
thread2(){hoge++;}
を同時に動かすと1しか増えて無いかもって事でしょ。
実際はオブジェクトの同期とかで、こんな分かりやすいミスじゃ無いだろうけど。
0738191
04/08/31 02:15ID:pIiGswtF良く見たらうpするまでもなく
テディベアかなんかに状況説明すれば解決しそうだな。
たぶん、不正なソケットを引数として渡しちまったってことだろ。
acceptに渡すのはlistenしたソケットだぜ。
0739735
04/08/31 02:23ID:6+TORdEWすいません、うpしましたので見てみてください。お願いします。
VC6のプロジェクト丸ごとはいってますけど、
リンクとか切れてたら「wsock32.lib」追加するだけです。
ttp://gamdev.org/up/img/1132.zip
とりあえず622氏のやつコピペって少し改造して作ってます。
勝手に使ってすいません。ほとんど同じはずなんですけど、
何処が悪いのかわかんないです。
とりあえずAcceptまで行きたいのでsendとかrecvとかはまだまともに作ってないです。
鯖はポート入れないでそのまま起動してください。
見づらいと思うので申し訳ないですがおねがいします。
0740735
04/08/31 02:26ID:6+TORdEWあれ、準備してる間にレスもらってました。
一応リスンソケット渡してるつもりです。
で、リスンソケット作って待ち受けるところまではエラーは出てない臭いです。
なので、何がおかしいのかな、、、と分からなくなってしまいました。
0741191
04/08/31 03:01ID:pIiGswtFまー良くあるバグってやつだな。
DialogProc()ん中で
TCPServer server(hDlg);
ってやってるだろ、コレが原因だな。
ローカル変数になっちゃってるから、毎回DialogProc()に実行が移ると
serverクラスが生成されて、returnと同時に破棄されとる。
よって、server.Init()の時のlistenしたソケットも捨てられてるな。
static TCPServer server(hDlg);
↑のようにstaticつけて静的変数にしとけばok
0742735
04/08/31 03:43ID:6+TORdEWどうもこんな遅くすいませんです。
できました。なんともお恥ずかしい限りです。
言われて見ればなるほど納得しました。
先はおそろしく長い…
0743622
04/08/31 12:58ID:1W6zrceB>>642
3がどうにもこうにも出来ませんでした。
メッセージがちゃんと来ているはずのところで
CallWindowProcして、直接呼んでしまう処理になってしまいました。
助言お願いします。
>>643
見やすい!
時間と視力とコードの結晶
ttp://gamdev.org/up/img/1138.zip
質問
1.サブクラス化はしてあると思うのですが、メッセージが思うように
switchにひっかかってくれません。何が原因なのか、または注意点などお願いします。
(サブクラスでmsg処理しているサンプルが見つからなすぎ)
2.次のステップでは何をしたほうがいいでしょうか?
下のウィンドウでタブ押すと送信
受信は上のウィンドウで、8kぐらいまで保持化(古いのから消えていく、発言事には消えない!)
0744名前は開発中のものです。
04/08/31 17:07ID:T35fpLCq実際にサブクラス化されてるのはhWndSendMsgではないのですか?
読み間違ってても許してね
0745191
04/08/31 20:09ID:pIiGswtF>>744が言うとおりに渡してるウィンドウハンドルが違うな。
というか、>>642で書いた真意は2、3はクラス内部で処理ってことだ。
Init(HWND)の中でコッソリサブクラス化。そのサブクラス化したプロシージャーで通信処理をやらせれば、
呼び出し元のウィンドウにワザワザ通信処理を書く必要がなくなるからな。
通信担当プロシージャーがprivateなメンバ関数ってのがポイント
まぁ、少々レベルが高かったかもな
クラス内部でサブクラス化するときはプロシージャーを静的なメンバ関数として定義しなきゃいけない。
静的なメンバ関数から、本来のインスタンスを特定するのにSetProp()とかGetProp()を使う。
とか、イロイロめんどくさいな。でも便利
>次のステップでは何をしたほうがいいでしょうか?
とりあえず、受信の所の改造だ。現状だと一度の受信でメッセージが全部受信出来たと仮定してるだろ。
場合によっては分割して届いたりするからな。送信時に何バイト送ったかの情報も送信するようにして、
送信バイトと同じバイト数を受信したら、本来の受信後の処理をさせる。ってのが基本だな。
文字列素送りじゃー駄目だ。
0746名前は開発中のものです。
04/08/31 22:24ID:XlUxaRqaわざわざこんなスレでやらんでも・・・
0747名前は開発中のものです。
04/08/31 23:13ID:T35fpLCq0748名前は開発中のものです。
04/08/31 23:29ID:hg/ygmOZ191が答えないと満足してくれないふいんきになってるのがな
0749名前は開発中のものです。
04/08/31 23:46ID:XlUxaRqa自分が作りたいイメージがないと、なにやっていいかわかんなくなるんだよな。で>>1に戻る。
煽ってるわけじゃないぞ、まぁガンガレ。
0750名前は開発中のものです。
04/08/31 23:55ID:seKFT3kU最初に言えよ
0751名前は開発中のものです。
04/09/01 01:49ID:TBA+Y3JP俺も191と同じぐらいのスキルはあるんだが、人のソースみるのめんどくさ。なのよ。
スキルアップには人のソースみたほうがいいのだがやる気になれん。
ほんと191は面倒見がよいし(少なくとも俺より)説明もよろしいんで出番なしですな。
0752名前は開発中のものです。
04/09/01 10:35ID:A8Zc28Vq通信するときにソケットを使って接続するところまではできたのですが
たくさん接続したときにどの接続が誰なのか区別するのはどうすればいいですか?
これができずに履歴の保存で苦労してます。よろしくお願いします。
0753名前は開発中のものです。
04/09/01 10:59ID:37G7q50O0754名前は開発中のものです。
04/09/01 11:14ID:BdF6D2vC接続中のクライアント数と同じ数だけacceptでソケットハンドルを得てるわけで、
クライアントのソケットハンドルを持つ通信用クラスとプレイヤーキャラのクラスを
関連付けすればいい。
誰かというのがプレイヤーキャラのことならば、
ソケットハンドルを得たときに、クライアントに対しログインIDの送信を要求し、
ログインIDと一致するプレイヤーキャラをロードすればいいんじゃないか?
0755名前は開発中のものです。
04/09/01 11:54ID:A8Zc28Vq>>754
ありがとうございます。
>関連付けすればいい
これができてなかったみたいです。
キャラクターのクラスを作ってそのメンバ変数にソケットハンドルを持たせてみます。
0756名前は開発中のものです。
04/09/01 12:17ID:2IXtq3X70757名前は開発中のものです。
04/09/01 16:13ID:HRpmmagl0758名前は開発中のものです。
04/09/02 02:56ID:cMQJct2Zところで、
>>448 ってどうなったん?
0759名前は開発中のものです。
04/09/02 02:57ID:cMQJct2Z0760名前は開発中のものです。
04/09/02 06:24ID:P8nJQ5G5みんなで作ろうぜ!作ってるぜ!なんて意気込みが微塵も感じられない。
0761191
04/09/02 06:48ID:7f5AinZL>>617以降はスレの趣旨が微妙に変わったので>>488のサイトに期待するのは可哀想だろ。
>>756自称チーターによって乗っ取られたようなもんだから>1も怒るかもな。
>>758
サーバーに期待する。
プロトコルも決めちゃって、他のヤツにクライアント書かせてみたら面白そうだな。
0762名前は開発中のものです。
04/09/02 07:08ID:iIL4jgPK0763名前は開発中のものです。
04/09/02 10:56ID:huDvHtkT今まで1本でやってたけどチャットとゲーム用ぐらいは別にしたほうがいい気がしてきた
0764663
04/09/02 11:10ID:HhOdq8thできるようになった気がする。
しかしプログラムは楽しいな。一個ずつできる事が実感をもって増えていく。
もちろん一言でできると言っても次元の高い低いの違いはあるけど。
今までグラフィックばかりやってたけど凄く時間がかかる作業で
キャラなりオブジェクトなり作って一つ一つ完成していくのはそれはそれで楽しいが、
振り返ってみると延々頂点を一センチ二センチ動かす作業を繰り返してただけで
新しく得るものなんてほとんどなくて「この期間俺は何をやってたんだろう…」と
虚しい気分になるだけだったからな。
0765名前は開発中のものです。
04/09/02 11:12ID:9FsdpOIU今は鯖もwin向けに書く流れだから関係ないかもしれんが
http://www.forest.impress.co.jp/article/2004/01/16/servicesforunix35.html
http://www.microsoft.com/japan/windows/sfu/
0766663
04/09/02 12:10ID:HhOdq8thゲーム内で表示するウィンドウのためのウィンドウシステムみたいのをつくりたい。
ウィンドウオブジェクトの下にボタンとかタブとかテキストフィールドとか自由に配置して
そのテキストフィールドの下にはさらにスクロールバーを配置してとか
そういうのを柔軟にデザインできる仕組みを作りたい。
けど激しくむずそう。なので
とりあえず最初の手がかりとしてなんか課題をくれるとうれしいのであります。
0767名前は開発中のものです。
04/09/02 12:27ID:GL/7SFvsとりあえずちょっと妄想してみた
このまま拡張していっていいのか評価が欲しい
191氏もヨロシク
・目標
勉強用ということでデバッグの簡単さを優先させたい
マップを歩き回ってチャットするのがとりあえずの目標
ある程度の拡張性は欲しい
特定の開発環境にあまり依存しない
・仕様
通信はテキストによっておこなう
n*4バイトで構成される命令の送受信をおこなう
・・命令の仕様
1語は4byteとする
先頭に1語の命令部とそれに続く0語以上のデータ部で構成される。
****++++++++
*命令部
+データ部
例)
mvtorigt
attk7743
quit
0768767
04/09/02 12:28ID:GL/7SFvsカッコ内はバイト数
戻り値
retn[コード(1)]
なんらかの命令に対する返事である
成功もしくは失敗を示すコードが含まれる
ログイン
lgin[id(8):password(8)]
この命令に成功するとキャラクター操作系の
命令が使用可能になる
戻り値
成功 okok
IDが存在しない noid
パスワードが違う nopw
終了
quit
ログイン以前の状態になる
切断やログインが可能な状態になる
戻り値
成功 okok
0769767
04/09/02 12:29ID:GL/7SFvs方向=upup,rigt,down,left
[方向(1)]で指定した方向へ移動する
戻り値
成功 okok
失敗 ngng
chat[チャンネル(1):メッセージ(10)]
戻り値
チャット
成功 okok
そのチャンネルでの発言は許されていない chng
失敗 ngng
0770名前は開発中のものです。
04/09/02 12:48ID:iIL4jgPK0771名前は開発中のものです。
04/09/02 12:49ID:iIL4jgPK0772名前は開発中のものです。
04/09/02 13:07ID:GL/7SFvs1語(=4byte)に統一した修正版
retn[コード(1)] (合計8byte)
lgin[id(2):password(2)] (合計20byte)
mvto[方向(1)] (合計8byte)
chat[チャンネル(1):メッセージ(10)] (合計48byte)
0773767
04/09/02 13:22ID:GL/7SFvsゲームによって移動方法が変わるから目的地を指定して後は鯖まかせで道が選ばれるタイプか
上下左右をダイレクトに指定するタイプなのかで修正が必要な予感
個人的には後者タイプでアクション性が強いものが好みだけど通信量が増えそう
mmoゼルダやりたい(;´Д`)ハァハァ
0774名前は開発中のものです。
04/09/02 14:56ID:ucIC7S/S0775191
04/09/02 15:14ID:7f5AinZLチャットの部分がちょっと気になるよな。
一文字発言でも48byteってやな感じ。
発言文字列のサイズも送ったほうが良いだろう。
あと、通信料気にするなら文字列で送っちゃ駄目だよな。
で、俺の場合
[送信サイズ(2byte)] [メッセージの種類(1byte)] [データ(可変サイズ)]
受信時に2bye読み込んで受信サイズ取得
受信サイズ全部受信し終わったら、メッセージの種類に応じた処理
チャット文字列送信ならデータ部分が発言文字列って感じだな。
>mmoゼルダやりたい(;´Д`)ハァハァ
隣接キャラのPC強制シャットダウンコマンドを実装するだけで御手軽に殺伐としたチャットが出来ると思うゼ
0776名前は開発中のものです。
04/09/02 15:23ID:ucIC7S/S文字列で動くようになったらバイナリ化する予定なんじゃないか?
文字列バージョンならターミナルソフトでも確認できるし。
しかし可変長ぐらいは扱ってほしいな。
0777488
04/09/02 17:17ID:2JFS4kJQちゃんと、見に来てるよ^^;;
でも、なんか話が変わってるからついていけてないだけです^^;;
なんか、問題あったらスマソ
0778名前は開発中のものです。
04/09/02 21:05ID:3MdDkgVc■参考
各種ライブラリ紹介スレ
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
0779488
04/09/02 21:15ID:R5EF3Y1lC++って奴は、ゲーム作るのにむいてますか?
0780191
04/09/02 21:20ID:7f5AinZL某ROみたいにウィンドウをユーザーが自由に配置するやつってことかな。
だとしたら、メメインウィンドウを親にしていしてCreateWindowして
タイトルバードラッグでウィンドウ移動とかしてやればできそうだな。
そうじゃなくて、プログラムでその場に応じたボタンとか出したいなら
CreateWindowしまくるか、ダイアログなら適当に貼り付けておいてGetDlgItem()で
ハンドル取得すれば、たいていのことはできる。
なんか良い課題が思い浮かばないが、
ウィンドウの中にウィンドウを表示するクラスでも作ってみたら?
ウィンドウプロシージャはクラスのメンバ関数で
>>777
監督はもういない。
シナリオも協力者もいなくなった。
自分でプログラム書いて壁にぶつかったらこのスレにこい。
きっと誰かが助言をくれるだろう。
0781191
04/09/02 21:35ID:7f5AinZLあんまそういうの使わないからわからん。
自分で自分用ライブラリつくるのが一番勉強になるし、
そのつくったものが資産にもなるから時間があるならおすすめ
>>779
多態性ウマーなのでC++(というかオブジェクト指向)はゲームに向いていると思ってる。
C++はCの強化版みたいなもんなので、C++が出来るってことはCも出来るってことだしな。
今からやるならC++おすすめ。
0782名前は開発中のものです。
04/09/02 21:44ID:zk6ELFe9DirectX 2004 SummerUpdate に新しく追加された CustomUI みたいなことがやりたいのなら、
既存のウィンドウシステムの仕組みを調べるとある程度どんな感じで作ればいいかはつかめると思う。
0783名前は開発中のものです。
04/09/02 22:20ID:5OFdC6GO>>766じゃないけど、ウィンドウプロシージャってメンバ関数にできる?
漏れはそれやろうとしたら
error C2440: '=' : 'long (__stdcall Window::*)(struct HWND__ *,unsigned int,unsigned int,long)' から 'long (__stdcall *)(struct HWND__ *,unsigned int,unsigned int,long)' に変換することはできません。(新しい動作 ; ヘルプを参照)
って怒られたYO!
0785名前は開発中のものです。
04/09/02 22:33ID:9SKQ+4l5staticつけれ。
けどstaticつけたら名前空間に入っただけの
ただの関数になる(=メンバ変数、メンバ関数にアクセス出来ない)から
ウィンドウプロシージャはただの関数にしておいて、その中でメンバ関数を呼べばいい。
0786783
04/09/02 22:39ID:5OFdC6GOわ〜い!即レスありがd
確かにstaticにすれば行けるけど、インスタンス独自の処理をさせたい時に困らない?
漏れがやりたかったのは
class Windos
{
public:
Window(...); // CreateWindowやらなにやら
//かなり割愛
protected:
virtual LRESULT WindowProc(...); //ここでこのインスタンス独自の処理をさせたい
}
って感じなんだけど・・・
staticにするとどのインスタンスのメッセージなのかわからないYO!
インスタンスのリストでも持っててプロシージャの中で渡って来たウィンドウハンドルに対応するインスタンス探さなきゃいけないのかな。
それともこういう考え方自体間違ってる????
0787766
04/09/02 22:45ID:HhOdq8thどうもです。一応標準のウィンドウシステムを使わないで
生意気にも全部自作したいと思っているのであります。
見た目とか好きにデザインしたいので、、、、
、、、と思ってたらこんなのがあったのか!>>782(教えてくれてありがとう)
IMEクラスとかがんばって作ってしまったのはなんだったんだろう。。。
でも悩むなぁ。自分で作んなきゃ力になんなそうだし、
かといってあくまでやりたいのはコーディングじゃなくてゲーム作りだし。
便利なものは使うべきか…
0788名前は開発中のものです。
04/09/02 22:45ID:9SKQ+4l5HWNDにクラスをもたせて置けばいい。
GetWindowLong/SetWindowLong参照。
0789783
04/09/02 22:45ID:5OFdC6GO>>785もありがd!
うんうん。アクセスできないっていうか、誰のメンバ関数を呼べばいいか判断できなくて困ってるYO
0790766
04/09/02 22:49ID:HhOdq8thそういう場合は見た目はカスタマイズしたりして使ってるんですかね。
猫でも〜とか見てるとある程度カスタマイズできるみたいですけど
結構いろいろ手続きが面倒くさそうで…
0791名前は開発中のものです。
04/09/02 23:14ID:39hzQg9Rがんばって最後まで作って。
0792783
04/09/02 23:21ID:5OFdC6GO>>788
ありがd!!
そんな便利な関数があったんだね〜〜
それ使ってユーザーデータにポインタを持たせてやったら呼び出せた!
MSDN検索したらGetWindowLongPtrなんてのもあったけど、漏れの環境じゃ使えなかった。
SDKをアップデートしないとダメなのかな〜
とにかくレスくれたみなさんありがd!!!
0793名前は開発中のものです。
04/09/03 00:34ID:1r39DuWj0794191
04/09/03 04:57ID:Gq9r/pVl俺はGetPropとSetPropを使ってる。
まぁ、参考までにってことで
>>790
DirectXで普通のウィンドウを使いたいってことなのか、
それとも。ただ単にコントロールを自分で描画したいのか?
ボタンとかならオーナー描画にして、自分で描画すれば簡単にできるな。
0795790
04/09/03 09:58ID:6G+1Tm5q例えばチャット窓用のテキストフィールドについて考えれば、
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:rdaSqmOu0797790
04/09/03 17:00ID:6G+1Tm5q0798名前は開発中のものです。
04/09/03 17:00ID:3I63lbKzチャットウィンドウのIME処理もAPIからやりたいってことじゃね?
0799191
04/09/03 19:36ID:Gq9r/pVlDirectXで日本語入力は確かに手強いな。
エディットボックスをDirectXで使いたいと思って対処したときは大変だった。
CreateWindowでエディットボックス作成して画面外の遙か彼方へ移動して隠蔽。
ウィンドウに対するクリックとかキー入力でエディットボックスに渡したいものだけを
座標変換とかしてSendMessageでエディットボックスに再送信。描画は全部自分で。
なんかスマートじゃないな。
>それぞれ部品の一個一個単独なら作れそうなんですけど。
単独で作れそうならいけるんじゃないか?
ウィンドウ管理クラスを作って、スクロールバーとかのコントロール系クラスを追加していく
javaのAppletクラスみたいな感じで実装したら良いんじゃないかなぁ
0800795
04/09/03 22:25ID:6G+1Tm5qFEP制御はある程度できてて、
入力した文字とか変換候補をベタに表示したりするのはできてるんで、
あとはウィンドウ幅に合わせて改行したりスクロールバーとかつけられたら
エディットボックスとして単体部品としては完成できそうです。
けどやっぱり全体をまとめたクラスの設計をどうすればいいのか分からないし
どこがどう分からないというのも複雑で説明できない。。。
もうすこしクラスの勉強をする必要がありそうです。
0801名前は開発中のものです。
04/09/04 01:37ID:pKV767XCそれ参考にすれば余裕かと。
0802191
04/09/04 01:50ID:nZw1Rcnlクラスの設計とかは経験値が重要かもしれん。
いくつもプログラム書いてみることだな。ガンバレ
子ウィンドウを考えないなら俺ならこうすると思う。
clas Iウィンドウ{
RECT* GetRect();
プロシージャー(...);
(略)
}
class ウィンドウマネージャー{
ウィンドウ追加(Iウィンドウ *pWindow);
ウィンドウ抹殺(Iウィンドウ *pWindow);
プロシージャー(...)
(略)
}
実際のコントロールはIウィンドウを継承させる。
そしたら、ボタンでもエディットボックスでもウィンドウマネージャーにぶち込める。
本来のウィンドウをサブクラス化とかして、ウィンドウマネージャーのプロシージャーに渡す。
ウィンドウマネージャーでアクティブなコントロールを判断(クリックならヒットテストして)、そしてコントロールのプロシージャーを実行。
ウィンドウマネージャー::プロシージャー(...){
Iウィンドウ *pWin = ウィンドウマネージャー::アクティブウィンドウ検索(posClick) ;
pWin.プロシージャー(...) ;}
こんな感じかな。
Iウィンドウでコントロールの場所と矩形領域を管理。
ウィンドウマネージャーでウィンドウの重なり(順番)を管理。
参考にならなかったらすまぬ。
俺が助言できるのはココまでだ。
0803名前は開発中のものです。
04/09/04 05:32ID:KGVvmcpk0804名前は開発中のものです。
04/09/04 05:56ID:9DgqjEuk妄想だらけの設定厨はいくらでもいるんだけどな。皮肉だなw
なんとか妄想厨を寄せ集めて、一つのものはできないものかw
0805名前は開発中のものです。
04/09/04 08:41ID:mj/YOjUv言われてみれば無いよな、ほんと。
前出てきてた農民ベースの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人間にとっての使いやすさ考えると、おのずとああいう設計になると思し、
それで慣れてる人多いからそういう設計でいいんでないか。
0809名前は開発中のものです。
04/09/04 14:19ID:07CYu+xr1、可読性。
2、ウィンドウ機能としてクラスにまとめられる。
3、デフォルトの処理をしなくて良い。
0810名前は開発中のものです。
04/09/04 14:31ID:fOQ1B4hR>>767で決定なの?
0811191
04/09/04 16:02ID:nZw1Rcnlサブクラス化できてんでしょ?
例えばhMainWin(MainProc)があるとして
hMainWinをサブクラス化してSubProcを関連付ける。
SubProcで通信メッセージだけを拾って処理。
WSAAsyncSelect()でメッセージをhMainWinに送れば実現できそうじゃない?
>>807
通常のプロシージャーで通信について配慮する必要がない。
ウィンドウのあるアプリケーションなら簡単に導入可能。
>>808(>>803)
>「RPGの世界設定」無いかね
現実
>SwingとかGTK2とか、それのWindowツールキットと似たような設計で何が不満なんだ。
誰か不満もらしたか?
>>810
>>767が作る>>767のためのアプリケーションはあのプロトコルをベースに修正したもので決定だろ。
このスレで何か一つのものを作ってる訳じゃないぞ!
0812名前は開発中のものです。
04/09/04 17:06ID:NBe8VnDT0813名前は開発中のものです。
04/09/04 17:58ID:8rj2jPWm正直マ板いけば?って感じ
0814名前は開発中のものです。
04/09/04 18:04ID:8rj2jPWm■ このスレッドは過去ログ倉庫に格納されています