[過去ログ]
SDLスレ (987レス)
SDLスレ http://echo.5ch.net/test/read.cgi/gamedev/1005469181/
上
下
前
次
1-
新
通常表示
512バイト分割
レス栞
このスレッドは過去ログ倉庫に格納されています。
次スレ検索
歴削→次スレ
栞削→次スレ
過去ログメニュー
545: 名前は開発中のものです。 [sage] 04/08/29 12:50 ID:dvcQQr7Q >>544 一応、念のため聞いておくが、 SDL.libはリンクしているけどSDL_main.libをリンクし忘れているなんてことは無いよな? http://echo.5ch.net/test/read.cgi/gamedev/1005469181/545
546: 名前は開発中のものです。 [sage] 04/08/29 14:02 ID:iNpWlI3a $ sdl-config --libs -L/usr/local/lib -lmingw32 -lSDLmain -lSDL -mwindows http://echo.5ch.net/test/read.cgi/gamedev/1005469181/546
547: 名前は開発中のものです。 [sage] 04/08/29 14:57 ID:dvcQQr7Q >>546 それ、cygwinの場合でしょ?>>529の場合はbccらしいから同じとは限らないし。 http://echo.5ch.net/test/read.cgi/gamedev/1005469181/547
548: 名前は開発中のものです。 [sage] 04/08/29 15:00 ID:dvcQQr7Q あ。>>546のはMinGW+MSYSのほうかもしれないすね。 http://echo.5ch.net/test/read.cgi/gamedev/1005469181/548
549: 名前は開発中のものです。 [sage] 04/08/29 17:36 ID:Vt1Safbs >>544 オプションを-Wにしてみろ。 http://echo.5ch.net/test/read.cgi/gamedev/1005469181/549
550: 529 [sage] 04/08/29 19:35 ID:o5xfi0oD >>545 SDL.libとSDL_main.libは同じフォルダにおいてフォルダにリンクをしてるので 多分し忘れということは無いと思うんですが…。 >>549 -Wを入れると今度は Error: 外部シンボル 'WinMain' が未解決(E:\BCC55\LIB\C0W32.OBJ が参照) となるんでどうしたものか…。 一応構造的にはSDL_main.libの_mainやらWinMainがコールバックされてそこから mainが置換されたSDLmainの方に制御が移されるんですよね? それともそれをやるにはコンパイルするときにコマンドラインオプションが必要とか? もうわけわかんないです…。 http://echo.5ch.net/test/read.cgi/gamedev/1005469181/550
551: 名前は開発中のものです。 [sage] 04/08/29 20:24 ID:iNpWlI3a まずはtdumpとかでSDL_main.libにWinMainや_mainが存在することを確認した方がよいのでは。 http://echo.5ch.net/test/read.cgi/gamedev/1005469181/551
552: 名前は開発中のものです。 [sage] 04/08/29 23:02 ID:hlhX5yl6 >>550 > 一応構造的にはSDL_main.libの_mainやらWinMainがコールバックされてそこから > mainが置換されたSDLmainの方に制御が移されるんですよね? どう考えてるのかよくわかんないんだけど、実際には 1. SDL_win32_main.c の中の WinMain() が呼ばれる 2. その WinMain() が consol_main() を経由して SDL_main() を呼ぶ 3. SDL_win32_main.c が SDL_main.h を include しており、 その中で main() が SDL_main() として define されている という作りになってる。 要するに、SDLmain.lib の中の WinMain() によって起動して、 その WinMain() が君のソースの中の main() を呼ぶって仕組み。 WinMain() で起動するために -W オプションは必須だね。 BCC が使う OMF っていうオブジェクトファイル、ライブラリファイルの形式では 関数の頭にアンダーバーを付けることになってるっぽい。 従って、main() をリンクする時には _main って部分を探すんだよ。 「bcc32.exe に -W オプションをきちんとつけて」 「`SDLmain.lib' と、`main() のあるソースから作った .obj ファイル' の両方をきちんとリンクする」 というプロセスが必要だよ。 常にどれかが抜けてるんだと思う。 http://echo.5ch.net/test/read.cgi/gamedev/1005469181/552
553: 531 ◆pm4Rr1N8T6 [sage] 04/08/29 23:55 ID:hlhX5yl6 うーん、Win32 では編集可能なウィンドウが無くても IME を ON の状態にはできるんだけど、 このまんまじゃ入力状態を取得できないなー。 表示すらしてないわけだから入力事態が行われてなさそう。 やっぱり GUI をセットにしないと駄目っぽい。 とりあえず、枠線付けただけのテキストボックスを CreateWindow() して その GUI 内で IME による入力をできるようにしてみるよ。 こういうアプローチを取ると IME による入力部分だけ OS 依存のフォント表示になってしまうけど、 その辺はもっと煮詰めてから考えることにする。 http://echo.5ch.net/test/read.cgi/gamedev/1005469181/553
554: 529 [sage] 04/08/31 00:00 ID:QiRAdHy6 自己解決した。 http://echo.5ch.net/test/read.cgi/gamedev/1005469181/554
555: 529 [sage] 04/08/31 00:27 ID:mI6iYA96 >>529 ??まだ解決してませんが。 まぁもうちと粘ってみます。何か進展(&壁が)あったらまた来るかもしんないです。 http://echo.5ch.net/test/read.cgi/gamedev/1005469181/555
556: 529 [sage] 04/08/31 00:29 ID:mI6iYA96 うお、失礼。 誤:>>529 正:>>554 変な書き込みするから混乱しましたよ(笑 http://echo.5ch.net/test/read.cgi/gamedev/1005469181/556
557: sgi_rocks [sage] 04/08/31 04:06 ID:hQvLtj9A SDL_SysWMinfoではなくて、各々のOSからのメッセージが入ってる構造体の方を、 SDL_PeekEventかなんかで定期的にチェックするのが良いのかも、と思っています。 最初はSDL_SysWMinfoのwindowのIDを使って、イベント自体を自分でマップしようとしていたのですが、 どうもSDL自体がマップしようとしてるイベント等と衝突する可能性もありそうなので、 イベント自体はすべてSDLに任せといて、SDL_Event構造体にある、SDL_WMMsg(やったっけ?)のwindow に対するメッセージをチェックしつつ、もしそれがIM関連だった場合のみIM関連のものを実行するのが良いかもしれません。 実際にテストでやってみて、できたらまた書きます。 OpenGL使ってる場合は、別にコンテキストが用意されてるみたいなのですが、 WindowsでのOpenGLの扱いがどうなってるかは良くわからないので時間かかるかもしれませんが・・・。 http://echo.5ch.net/test/read.cgi/gamedev/1005469181/557
558: 531 ◆pm4Rr1N8T6 [sage] 04/09/01 04:52 ID:Iu2ojuI1 GUI を使うってのは、ウィンドウシステム(この場合 Windows)標準のテキストボックスを使うって意味で、 子ウィンドウ(この場合テキストボックス)を作るために SDL_SysWMinfo を使ってるって意味で言ってたんだけど、 アプローチが違うから伝わってなかったみたいでごめん。 で、Windows 側でテキストボックス(エディットコントロール)を置いてみたんだけど、 どーしてもキーボードからの文字入力ができない。 まあよく考えると DirectX や OpenGL を使ってプライマリに描画されると 子ウィンドウは消えてしまうから元々この方法じゃ駄目かも知れないけど、 貼り付けや切り取りなんかはできるのに 一切の文字の入力ができないのはやっぱりおかしい。 と思ってソース読んでみたら、SDL め、 メッセージループでキーボードイベントを SDL の中に取り込んだあと Windows 標準のウィンドウプロシージャーに渡さず破棄してる。 当然ウィンドウにキーボードイベントは通達されず、文字入力は不可能。 ALT+F4 での終了や ALT+SPACE でのメニュー出現が動かないのもこのせい。 そこで SDL_WMmsg を使ってみようとしたんだけど、 SDL で拾えなかったものだけを扱ってるもんだから Windows 固有のキーボードイベントは破棄されててどうやっても取得できない。 もう一段ウィンドウプロシージャを噛ませるしか無いかな。 こりゃ大変だ…… http://echo.5ch.net/test/read.cgi/gamedev/1005469181/558
559: 531 ◆pm4Rr1N8T6 [sage] 04/09/01 04:56 ID:Iu2ojuI1 な、長すぎる。なんかスレ違いになってきてごめん。どっか別の場所に移動するよ。 http://echo.5ch.net/test/read.cgi/gamedev/1005469181/559
560: 名前は開発中のものです。 [sage] 04/09/01 10:29 ID:Ph6g14fm なんとなく。 Anthyのライブラリを使って自前で漢字変換するようにすればよいのではないかと思った。 sdlskkも同じような方式だっけ?なら同じようなのを増やしても意味無いな・・・。 http://echo.5ch.net/test/read.cgi/gamedev/1005469181/560
561: 名前は開発中のものです。 [sage] 04/09/01 22:55 ID:M+Pa7IBI >>560 意味あると思うよ。 skkは操作系がかなり独特だから対象ユーザが限られるけど、 Anthyなら普段は別のIMEを使用している人もそれほど違和感なく使えると思うし。 http://echo.5ch.net/test/read.cgi/gamedev/1005469181/561
562: sgi_rocks [sage] 04/09/02 04:11 ID:fDohgGN6 >>558 ゲームのWindowと別のWindowを作ってそこで入力するのであれば、 それは既にやった事があります。(gtk+-2.xを使いました) ゲームのWindow内に直接入力したいな、と思ってます。 恐らく、SDL_ttfを使うことになると思います。 >>560 自分で変換エンジンを作ってしまうのもよいのですが、 なるべく、ユーザーが使っているIMをそのまま使えるようにしようと思っていたので、 cannaやanthyではなく、XIMやIIIMFを操作する方法を探っています。 ただ、anthyなどを使って変換してしまうのも一つの手段ですし、 比較的簡単にできるかもしれませんね。 今少し時間がなかったりするので何もできてないのですが、 とりあえず私はXIMを操作する方向でやってみる予定です。 http://echo.5ch.net/test/read.cgi/gamedev/1005469181/562
563: 531 ◆pm4Rr1N8T6 [sage] 04/09/05 01:18 ID:O4WY3ynx うごご、やっとなんとか動くもんができたよーん。 http://gamdev.org/up/img/1165.zip 中身の test.zip の中にサンプル入れてある。 現在 Win32 用の処理のみ。 自分で IME 処理を実装することもできるから、 フリーな IME があったら自分で機能を追加できるよ。 まだテストが不十分だからあちこちにバグがありそう。注意! >>562 いや、Windows 標準の入力機構を使おうとしたってこと。 Windows では、テキスト入力部分もウィンドウの一種として扱われてるんだよ。 あと、SDL_ttf は仕様レベルでのバグもあるし、 文字描画エンジンをユーザーが選ぶことができなくなるからできれば使いたくないなあ。 一応、上のライブラリでは単純な変換状況取得しかできないようになってる。 ライブラリの使い方サンプルプログラムでは SDL_ttf を使って描画した。 http://echo.5ch.net/test/read.cgi/gamedev/1005469181/563
564: 名前は開発中のものです。 [sage] 04/09/05 21:21 ID:gDPcDraA 562ではないですが、SDL_EventからXEventへ変換して、 それをXFilterEventしてやればXIMでも大丈夫なような気がしてきたのでちょいやってみます。 http://echo.5ch.net/test/read.cgi/gamedev/1005469181/564
565: 531 ◆pm4Rr1N8T6 [sage] 04/09/05 22:36 ID:Po72KKsf http://gamdev.org/up/img/1175.zip ソースがぐちゃぐちゃだったのであちこち修正。 ついでにバグを潰して間に合わせだった仕様も結構変えてしまった。 昨日のを落としてた人ごめんなさい。 >>564 がんばれー http://echo.5ch.net/test/read.cgi/gamedev/1005469181/565
566: 564 [sage] 04/09/07 02:23 ID:aIh9QYNB それっぽく動いたけど、キー取りこぼすし、終了できないし。 プロトコルとかまで調べないといかんかなぁ。。。 だれかXIMの挙動に詳しい人っている? http://echo.5ch.net/test/read.cgi/gamedev/1005469181/566
567: 531 ◆pm4Rr1N8T6 [sage] 04/09/07 03:52 ID:s0fkyrDg うーん、VMware に FreeBSD 入れてみようと頑張ったけど インストール途中でこけるなあ。 とりあえず、MacOS 9 と MacOS X の入ったマシンを一台ずつ持ってるから、 そっちで Mac 版を作ってみるよ。 Mac の IME のインターフェイスは Text Service Manager ってんだっけ。 http://echo.5ch.net/test/read.cgi/gamedev/1005469181/567
568: 531 ◆pm4Rr1N8T6 [sage] 04/09/07 03:58 ID:s0fkyrDg http://gamdev.org/up/img/1183.zip 昨日バグ潰したんだった。 あと、README のメッセージに関する説明を細かくしておいた。 仕様を確定させたつもりは無いから、 ウィンドウシステム固有の問題とかあったら連絡お願い。 http://echo.5ch.net/test/read.cgi/gamedev/1005469181/568
569: sgi_rocks [sage] 04/09/08 00:55 ID:hVzmkiI8 >>568 基本的な仕様は現在ので良いと思います。 ひとつ提案があるとすれば、SDL_PollEventでイベントがなかった場合にIM関連のイベントを調べるのではなく、 User DefineなイベントをSDLのイベントキューに入れて、SDL_PollEventのループ内で他のイベントと同じように 処理できるようになればよいかな、と思いました。 >>566 私も531さんの仕様に沿った形で、XIMでの実装していたのですが、なかなか難しいですね(汗。 というのも、win32.cのように、自分でprocを作って、そっちで必要なものを処理した後、 SDLのprocにメッセージを渡す、というような形が取れれば一番良いと思うのですが、 X Window Systemでは、イベントが起こるたびに呼ばれるコールバック関数を設定する、というのはなく、 SDLが常にイベントを見るためにループしてるので、どうやってイベントをSDLより先に取得するかで悩んでます。 一応、XReparentWindowとかいう関数で、無理やり自分の作ったwindowをSDLの描写windowの親にして、 wmwindowの方はXUnmapWindow関数でマップをはずす事でなんとかSDLより先にイベントを取れるようになったのですが、 今度はXIMの仕様でなかなかわからなくて・・・。 XIMでは変換だけIMに任す、というのはできないらしく、必ず 何を入力しているのか、というのがXIMによって描写されてしまっている感じがします。 なので、変換中の文字列が取得できるにしても、すでにXIMによって画面に描写されている感じになってしまうかもしれません。 もしXやXIMに詳しい方がいらっしゃれば、その辺り教えて頂けると嬉しいです。 http://echo.5ch.net/test/read.cgi/gamedev/1005469181/569
メモ帳
(0/65535文字)
上
下
前
次
1-
新
書
関
写
板
覧
索
設
栞
歴
あと 418 レスあります
スレ情報
赤レス抽出
画像レス抽出
歴の未読スレ
AAサムネイル
Google検索
Wikipedia
ぬこの手
ぬこTOP
0.026s