[過去ログ]
SDLスレ (987レス)
SDLスレ http://echo.5ch.net/test/read.cgi/gamedev/1005469181/
上
下
前
次
1-
新
通常表示
512バイト分割
レス栞
このスレッドは過去ログ倉庫に格納されています。
次スレ検索
歴削→次スレ
栞削→次スレ
過去ログメニュー
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
570: sgi_rocks [sage] 04/09/08 01:07 ID:hVzmkiI8 長くてすいません(汗。 なんかサイトとか立ち上げた方が良い気がしてきたりしますがどうでしょう? http://echo.5ch.net/test/read.cgi/gamedev/1005469181/570
571: 564 [sage] 04/09/08 03:05 ID:/gyCnV3K あ、かぶってしまった >>569 http://gamdev.org/up/img/1198.zip kinput2 + canna で一応動いた。test/main.cは書換え無しでほぼ同じ挙動をするはず。 skkinputでは動かなかった。 on-the-spot とかいうスタイルを使えば描画も全部アプリケーション側でいけるはず。 いちいち全部描画をアプリケーションでやるのは面倒なこともあるかもしれんので、 ネイティブなIMEウィンドウで描画する方法もあったらいいかもしれんと思う。 >>仕様 >>570 たしかに、あったら助かるかも。 http://echo.5ch.net/test/read.cgi/gamedev/1005469181/571
572: sgi_rocks [sage] 04/09/08 10:28 ID:Z7GwucVh >>571 すごいです。Fedora Core 2(XIM + canna)で試しましたが、Windowsと同じように動作しました。 on-the-spotだとコールバック関数設定できたんですか(汗。思いつかなかったです。 一応サイトを作ってみました。 もし良かったら使って下さい。 ttp://p56.aaacafe.ne.jp/~sdlim/ http://echo.5ch.net/test/read.cgi/gamedev/1005469181/572
573: sgi_rocks [sage] 04/09/08 10:35 ID:Z7GwucVh >>571 すごいです。Fedora Core 2(XIM + canna)で試しましたが、Windowsと同じように動作しました。 on-the-spotだとコールバック関数設定できたんですか(汗。思いつかなかったです。 一応サイトを作ってみました。 もし良かったら使って下さい。 ttp://p56.aaacafe.ne.jp/~sdlim/ http://echo.5ch.net/test/read.cgi/gamedev/1005469181/573
574: 名前は開発中のものです。 [sage] 04/09/08 12:44 ID:4F4ga2pg >>569 > どうやってイベントをSDLより先に取得するかで悩んでます。 一応こんなもんがあるよ。 http://www.tacoworks.jp/software/SDLdoc-jp/html/sdlseteventfilter.html ただ、これを使っても、SDL 自体の処理がタコで ユーザーにイベントを回してこないことがある。 win32.c では SDL が一部のイベントを握り潰していたから 自分で Win32API 側のイベントを奪い取るしか無かった。 あと、アプリケーション開発側のユーザーが SDL_inputmethod と同時に自前で SDL_SetEventFilter() を使った場合、 きちんと古い SDL_EventFilter を呼んでくれない危険性もあるね。 http://echo.5ch.net/test/read.cgi/gamedev/1005469181/574
575: 名前は開発中のものです。 [sage] 04/09/08 13:09 ID:4F4ga2pg >>571 おお、やった! っていうか SDL_EventFilter 使ってたんだね。 > ネイティブなIMEウィンドウで描画する方法もあったらいいかもしれんと思う。 >>仕様 SDL_rwops や SDL_rotozoom みたいに本体と分離できないかな。 SDL_inputmethod 自体に描画を入れるのを嫌がってるのは ユーザーに何らかの制約を課したくないだけだからなんだけど、 ほら、使わない場合にまでわざわざ SDL_ttf を入れるのって面倒じゃない。 もっとプリミティブな部分を前面に押し出していった方が ユーザーとしても使いやすいと思ってたんだけど、そうでもないのかな。 そういう意味で >>569 > User DefineなイベントをSDLのイベントキューに入れて、SDL_PollEventのループ内で他のイベントと同じように > 処理できるようになればよいかな とも考えてたんだけど、 IME 処理は SDL 本体のイベントループと別の場所で 単純に処理できた方が楽だと思ってわざと今の仕様にした。 仕様に関しては他の人の意見も参考にしたい。 >>572 あらら、SourceForge.jp にでもプロジェクト立てればいいやと思ってたんだけど、 それは大体出来てからでいいかな。 っていうか LGPL で問題無い? >>573 おちけつ ちょっと家に帰ったらテストプログラム修正する。 http://echo.5ch.net/test/read.cgi/gamedev/1005469181/575
576: 531,575 ◆pm4Rr1N8T6 [ID が pg sage] 04/09/08 13:11 ID:4F4ga2pg トリップ忘れ。上司が後ろを通って焦ってしまった。 http://echo.5ch.net/test/read.cgi/gamedev/1005469181/576
577: sgi_rocks [sage] 04/09/08 13:58 ID:Z7GwucVh >>576 確かにSDL_inputmethod自体は描写に関するものは一切含まないようにしておいて、 もしそれが必要でありそうなら、SDL_inputmethodに対するラッパーを書く方が良いかもしれませんね。 sourceforge.jpはまったく頭に無かったです。 もしそっちでできるのであればそっちの方が良さそうですね。 SDLでIMを使いたいな、と思ったのもゲームを作ってたのが原因なので、 今作ってるものにSDL_inputmethodを使ってみます。 http://echo.5ch.net/test/read.cgi/gamedev/1005469181/577
578: 564 [sage] 04/09/08 16:06 ID:5bciN7sZ あー、ネイティブっていうのは、OSネイティブのIMっていう意味。 WindowsだったらMS-IMEの変換ウィンドウっていう意味で。 それだったらどう? http://echo.5ch.net/test/read.cgi/gamedev/1005469181/578
579: 531 ◆pm4Rr1N8T6 [sage] 04/09/08 18:28 ID:4F4ga2pg うーん、調べた限りだと、Windows の仕様では DirectX なんかで プライマリバッファに描画するようにした時、 どうしても OS ネイティブなウィンドウがプライマリバッファで上書きされてしまうみたい。 Windows の場合は変換中の文字列も一つのウィンドウの中の表示という扱いで、 プライマリバッファに上書きされてしまうから、そういう条件下ではどうしても自前描画になるっぽい。 基本的な知識が足りてないから曖昧な言い方になってしまった。 わかりづらい説明ですまん。 結局 OS 自体に入力部分を描画させるのは難しいみたい。 俺の知識不足である可能性も充分に有り得るから、 誰か解決方法知ってる人がいたら情報お願い。 http://echo.5ch.net/test/read.cgi/gamedev/1005469181/579
580: ('A`) [sage] 04/09/08 21:41 ID:il2D+HG0 みなさんすごいですな。影ながら応援しとります。 自分は面倒くさいのでgtk windowid hackで取り込んで テキストウィジェット貼り付けただけですませてもたですよ('A`) ('A`)('A`)('A`)('A`)('A`)('A`)('A`)('A`)('A`)('A`)('A`)('A`)('A`)('A`)('A`) http://drizzt.kilobug.org/pub/misc/gtksdl-gtk2.tar.gz http://www.maccormack.net/~djm/sdl_win32_demo/sdl_win32_demo.zip http://echo.5ch.net/test/read.cgi/gamedev/1005469181/580
メモ帳
(0/65535文字)
上
下
前
次
1-
新
書
関
写
板
覧
索
設
栞
歴
あと 407 レスあります
スレ情報
赤レス抽出
画像レス抽出
歴の未読スレ
AAサムネイル
Google検索
Wikipedia
ぬこの手
ぬこTOP
0.017s