トップページgamedev
987コメント396KB

SDLスレ

レス数が900を超えています。1000を超えると表示できなくなるよ。
0001login:Penguin01/11/11 17:59ID:u0HMN7qC
マルチプラットホームな汎用ゲームライブラリの
SDLについてのスレッドです。
最新情報、参考になるソース、質問等

とりあえず、本山
http://www.libsdl.org/
0836名前は開発中のものです。2005/07/25(月) 21:28:19ID:tBl8Lhba
入力補完のないIDEなんて, ほとんど存在しないだろw
好きなIDE使え
0837名前は開発中のものです。2005/07/26(火) 00:22:38ID:c4yZrU1p
>>835
VisualStudio.NETが一番おすすめ
0838名前は開発中のものです。2005/07/26(火) 03:30:17ID:fGo2aUYV
NetBeansでもEclipseでもいいぞ
0839名前は開発中のものです。2005/07/31(日) 00:02:44ID:quLBISXO
mac版のゲームを配布する場合はスタティックリンクするしかないかな?
となるとソース公開しなきゃ(’A`)
0840名前は開発中のものです。2005/07/31(日) 00:10:36ID:ooozGQbR
Windows版のヘッダのライセンスはLGPLよりかるいんだっけ?
0841名前は開発中のものです。2005/07/31(日) 14:53:12ID:okeB3T00
>>839
オブジェクトファイルだけで良いんじゃなかったっけ?
08428392005/07/31(日) 15:40:59ID:quLBISXO
ごめん、そうみたいね。
SDLとLGPLのサイトをよく読んできた。

(LGPL)
If you link a program with the library, you must provide complete object files to the recipients so that they can relink them with the library, after making changes to the library and recompiling it.
0843名前は開発中のものです。2005/08/01(月) 11:50:17ID:lmGZDgba
>839
知らんけどMac用のSDL共有ライブラリが配布されてないなら、
自分で共有ライブラリを作って公開してそのソースだけ公開すれば?
0844名前は開発中のものです。2005/08/01(月) 17:32:41ID:sroBhudh
>>839
LGPLのライブラリをスタティックリンクした場合は、ライブラリのソースコード
が必要で、それを改変したあとにちゃんと実行ファイルを再作成できるように
しておかなければいけない。
必ずしもアプリのソースは必要ではないけど、ソースもなしに実行ファイルを
作成できるはずもないので、事実上全ソースを公開する必要があるっぽい。

結局、動的リンクにする以外にソース公開からは逃れられないと思う。
0845名前は開発中のものです。2005/08/01(月) 18:08:55ID:ciKvobzi
ダイナミックリンクでもヘッダ部分もLGPLでライセンスされていたら
組み込んでコンパイルしてることになるから
コンパイルに必要なオブジェクトファイル配布しないとだめだな


Javaのようなヘッダがないダイナミックリンクだけなら大丈夫だが
0846名前は開発中のものです。2005/08/01(月) 21:54:22ID:2dfE5juZ
>>845
それだっ!!
SDLのJavaラッパーを使えば万事解決かもね。
0847名前は開発中のものです。2005/08/02(火) 03:32:09ID:cGbi1ZNI
>>845
> ダイナミックリンクでもヘッダ部分もLGPLでライセンスされていたら
> 組み込んでコンパイルしてることになるから
以下の記述により、ヘッダー程度のものは無問題。
---
もしそのようなオブジェクトファイルが、数字のパラメタやデータ構造のレ
イアウト、アクセス機構または小さなマクロや小さなインライン関数(長さが
10 行かそれ以下)のみ利用するならば、そのオブジェクトファイルの利用は、
それが法的に派生物とみなされようとみなされまいと制限されない。(このオ
ブジェクトコードに加えて『ライブラリ』の一部を含む実行形式は依然として
第 6 節の条件下に置かれるであろう)。
---

> コンパイルに必要なオブジェクトファイル配布しないとだめだな
>>842を見てオブジェクトファイルって言ってんのかもしれないけど、
ちゃんと読めば分かると思うけど、LGPLのライブラリを改変して別の
プログラムを含めた場合に、そのライブラリを再構築できるように
別のプログラムのオブジェクトファイルを配布しろって言ってんだよ。
呼び出し元アプリとは無関係な事だ。

とりあえず、英語読めないなら日本語訳もあるんだからちゃんと嫁。
0848名前は開発中のものです。2005/08/03(水) 23:14:18ID:8Vtt/S6U
VisualC++.netでSDL使ってる者ですが。
stdio.hをインクルードするだけでアプリケーション終了時に
メモリエラーが出てしまいます。
デバッグで見る_file.cの_lock_file関数で何らかのエラーが起きているようです。
どのようにすればうまくエラーがでないようにできるのか、ご教授お願いします。
0849名前は開発中のものです。2005/08/04(木) 19:18:29ID:m7E66Gbv
VisualC++.netは開発環境の名前なので、
それだけだと使っている言語仕様がわからない。

Microsoft Visual Studio .NET 2003 に含まれる VisualC++ を使っているなら
新しいプロジェクトを作成する時に .NETではなく Win32を選んで。
0850名前は開発中のものです。2005/08/04(木) 19:25:18ID:qa5JGYab
VS.NETならそうかもしれんがVC.NETならCだろ
08518492005/08/04(木) 20:42:21ID:m7E66Gbv
VisualC++.NETで.NETアプリケーション作成を選べば、
それはManagedC++という名のC言語とは似て非なる言語。
0852名前は開発中のものです。2005/08/04(木) 23:34:09ID:uV5RXPg8
なんだか知らんが必死だな
0853名前は開発中のものです。2005/08/05(金) 02:15:02ID:t5VdqNSD
拡張C言語程度で必死だな
0854名前は開発中のものです。2005/08/05(金) 10:31:53ID:XgtXEN47
で、848は解決したのか?
0855名前は開発中のものです。2005/08/10(水) 16:07:15ID:f3HjLb+x
微妙にFPSが60に固定できないんですけど
みんなはどう書いてますか


// ここで描画やらなにやら

int nowTime = SDL_GetTicks();
if( nowTime - preTime < 16 )
{
 SDL_Delay( 16 - (nowTime - preTime) );
}
preTime = SDL_GetTicks();


やっぱ浮動小数で管理しないと駄目かな
綺麗に60に固定したいんだけど
0856名前は開発中のものです。2005/08/10(水) 18:43:43ID:PLKvBSGz
固定少数で管理すればOK
0857名前は開発中のものです。2005/08/10(水) 19:50:28ID:f3HjLb+x
>>856
詳しく
0858名前は開発中のものです。2005/08/10(水) 20:59:46ID:zuYoOj0m
ティアリングしてるんだし浮動小数点でも固定小数点でもどっちでもいいよな
俺はもう癖で固定小数点つかっちまうが

高精度タイマ使えばそれなりに精度は出るがかなり環境依存しやすい模様
この辺の話はSDLとはもはや関係ないな
0859名前は開発中のものです。2005/08/10(水) 21:58:53ID:sHNa10sC
とりあえず、

while ( nowTime - preTime < 16 )
{
SDL_Delay( 0 );
}

のほうがいいよ
タイマの精度に期待出来ないことも多々あるんで、待ちすぎが起こりやすいから
0860名前は開発中のものです。2005/08/10(水) 23:12:02ID:EzSJcbzY
あー、なるほど、俺もフレームレートも固定少数使ってみよう
少しぐらい改善すっかな
08618552005/08/11(木) 11:06:48ID:s0SfDH7M
>>859
それnowTimeもpreTimeも更新されないんじゃ?

具体的なコードが見たいんですけど駄目ですか?>>ALL
0862名前は開発中のものです。2005/08/11(木) 13:55:51ID:7JeDKIu2
// ここで描画やらなにやら

while ( SDL_GetTicks() - preTime < 16 )
{
SDL_Delay( 0 );
}
preTime = SDL_GetTicks();

>>859じゃないけど、普通に考えればこうでしょう。
1から100まで全部与えられるのを待ってないで考えましょう。
0863名前は開発中のものです。2005/08/11(木) 16:16:47ID:u3UR2EZN
SDL_GetTicks() - preTime < 1000/60

これ、整数の除算のところで誤差が出るよね。
固定小数点で計算する方法って、32bitのうち小数側に16bit使うと決めたら

(60*(SDL_GetTicks() - preTime) << 16) < (1000 << 16)

みたいにすればいいのかな?
0864名前は開発中のものです。2005/08/11(木) 16:21:33ID:u3UR2EZN
あれ、これじゃシフトする意味ないじゃん。出直してこよう、、
0865名前は開発中のものです。2005/08/11(木) 16:29:32ID:u3UR2EZN
((SDL_GetTicks() - preTime) << 16) < (1000 << 16) / (60 << 16)

60が右辺にないと意味なかったね。Delphiで試してみたらFPSが59.9〜60.0くらいになったんで、
合っているのかな。
0866名前は開発中のものです。2005/08/11(木) 16:37:51ID:u3UR2EZN
いや合ってないや。ごめんもうやめるわ。
08678592005/08/11(木) 19:06:56ID:W/ukyUzH
うわ、適当に書いたんで思いっきりミスしてるな orz
>>862フォローthx!
0868名前は開発中のものです。2005/08/11(木) 19:21:03ID:Gg/tPqOJ
固定小数点でこんな感じでどう。

#define FRAMETIME 4271/* (1000ms/59.94frame)*256 */

ループ{
描画etc.

while ( SDL_GetTicks() < nextTime/256 )
{
SDL_Delay( 0 );
}
nextTime += FRAMETIME;
}
0869名前は開発中のものです。2005/08/11(木) 22:03:19ID:IbwMjIl9
一応オーバーフローも考えて欲しい。
08708552005/08/11(木) 23:36:45ID:s0SfDH7M
>>862
そりゃ考えましたよ。
それで適当に書いた>>867とか言われても困るんですけどね。

というか、みんなはどうやってるの?って聞いてるのに何でかなぁ。FPS固定やってないの?
そんなにコード晒すの嫌?別段他のモジュール参照してるわけじゃなし、部分的に抜粋してもらえればいいのに。
って偉そうですね。すみません。

出し惜しみ?自分の技術不足を指摘されるのが恥ずかしい?
あ、面倒なの。

オープンソース糞喰らえですね!みんなはなんでSDL使ってるの?
0871名前は開発中のものです。2005/08/12(金) 00:38:27ID:oL+JILND
気持ちは分かるけど、書き込む前に深呼吸しろな。
08728592005/08/12(金) 04:23:14ID:DYAIzoXI
あー、いい加減な書き方したのはスマンかったね
お詫びの意味も込めて、前作ったゲームのを調べてみた

const float FRAME_TIME = 1000.0f / 60.0f;
float timer_diff = 0.0f;

while (...) { // ループ
float old_timer = SDL_GetTicks() - timer_diff;
// 描画等
while ((SDL_GetTicks() - old_timer) < FRAME_TIME) {
SDL_Delay(0);
}
timer_diff = SDL_GetTicks() - old_timer - FRAME_TIME;
}

途中を色々はしょった時にミスが入ってる可能性はあるが、こんな感じだった
0873名前は開発中のものです。2005/08/12(金) 18:43:40ID:KeDmnrCr
これでいいじゃない。
ttp://www.sun-inet.or.jp/~yaneurao/rsp/rsp48to4F.html

void ys::ElapseTime(void){ // (C)yaneurao 1998-1999
// 厳粛かつ正確かつ効率良く時間待ちをする
if (iFPS == 0) return ; // Non-wait mode
static DWORD lastdraw = 0; // 前回の描画時刻
// (不運にも第一発目のtimeGetTime() == 0とかゆーこともあるが、それは構わない)
DWORD t = timeGetTime(); // 現在時刻
dwFPSWaitTT = (dwFPSWaitTT & 0xffff) + dwFPSWait; // 今回の待ち時間を計算
// dwFPSWaitは、待ち時間の小数以下を16ビットの精度で持っていると考えよ
// これにより、double型を持ち出す必要がなくなる。
// dwFPSWaitTT = 1000 * 0x10000 / FPS;である
DWORD dwWait = dwFPSWaitTT >> 16; // 結局のところ、今回は何ms待つねん?
// 1フレーム時間を経過しちょる。ただちに描画しなちゃい!
DWORD dwElp = (DWORD)(t - lastdraw); // 前回描画からいくら経過しとんねん?
if (dwElp>=dwWait) {
lastdraw = t;
return ;
}
// ほな、時間を潰すとすっか!
// まだ時間はたっぷりあるのか?
// 4ms以上消費する必要があるのならば、Sleepする
if (dwWait-dwElp >= 4) Sleep(dwWait-dwElp-3);
// いまdwWait>dwElpなのでdwWait-dwElp>=0と考えて良い
// 95/98/NTで測定したところSleep(1);で1ms単位でスリープするのは可能
// ただし、実装系依存の可能性もあるのでSleepの精度は3ms以内と仮定
while ((timeGetTime()-lastdraw)<dwWait) ;
// ループで時間を潰す(あまり好きじゃないけど)
// これで、時間つぶし完了!
lastdraw += dwWait; // ぴったりで描画が完了した仮定する。(端数を持ち込まないため)
}
0874名前は開発中のものです。2005/08/12(金) 20:13:16ID:rlG30S65
>>873
SDL_GetTicks()とSDL_Delay()に置き直して
0875名前は開発中のものです。2005/08/14(日) 22:40:50ID:O5bcwOke
SDL_inputmethodのソースコードはこれが最新ですか?
ttp://sdlinputmethod.sourceforge.net/phpbb/viewtopic.php?t=6&start=30#104
0876名前は開発中のものです。2005/08/19(金) 22:03:31ID:nTcnwqoX
次スレ
http://pc8.2ch.net/test/read.cgi/tech/1065535118/
0877名前は開発中のものです。2005/08/20(土) 01:38:13ID:Uu3xgTeL
>>876 クマー
0878名前は開発中のものです。2005/08/23(火) 01:30:58ID:GcWYfYM0
VC.NETでSDLを使っているのですが、VCランタイムDLLを同封して配布したくありません。
そこで、SDLのソースを落として/MTビルドし、それは成功したんですが、
本体のほうは/MTビルドしても

error LNK2005: _exit は既に LIBCMT.lib(crt0dat.obj) で定義されています。
error LNK2005: _strncpy は既に LIBCMT.lib(strncpy.obj) で定義されています。
error LNK2005: __isctype は既に LIBCMT.lib(isctype.obj) で定義されています。

このようなリンクエラーが出てビルド完了できません。
どのようにしたらうまくいくのか、教えてください。お願いします

ちなみにLIBCMT.libを無視したら、ものすごい怒られました・・・(´・ω・`)
0879名前は開発中のものです。2005/08/23(火) 06:21:23ID:W08ZteNn
本体がデバッグビルドとか?
0880名前は開発中のものです。2005/08/23(火) 09:28:07ID:0d6CfNLS
作った。いらなきゃ消す。
全然いじってない。帰ってきたらいろいろ変える。
http://wiki.livedoor.jp/ntooka/d/FrontPage?wiki_id=5515
0881名前は開発中のものです。2005/08/23(火) 10:59:53ID:LxnRBaho
GJ!
08828802005/08/23(火) 17:14:36ID:0d6CfNLS
881がGJをくれたのでちょっといじった。

livedoorWikiは使いづらいぞw。ちょい機能がたりないように感じる。
もうちょっとやってみるわ。
0883名前は開発中のものです。2005/08/23(火) 20:10:29ID:d61Nt7TU
ユーザー登録しなきゃ編集できないなんて冗談みたいな仕様だな。
0884名前は開発中のものです。2005/08/23(火) 21:09:14ID:DXl7coHI
うん、やめようか。
別のどっかいいところある?俺サーバーとかよくわかんないんだけど
0885名前は開発中のものです。2005/08/23(火) 21:25:54ID:DXl7coHI
というわけで、やめた。
http://www5.atwiki.jp/ntooka/pages/1.html
デザインが気に入らないのでころころ変わると思う。悪いね。

ライブドアやっぱダメだわ。
0886名前は開発中のものです。2005/08/23(火) 23:38:55ID:MD79yudw
>>885
期待age。SDLの情報サイトって更新止めてる所が多いからね。
0887名前は開発中のものです。2005/08/23(火) 23:59:59ID:DXl7coHI
>>886
ありがとよ。
まぁ、適当にいじってくれ。俺も保守するから。

Tipsとにかくコピペしてるんだけど、やっぱまずいかな?
0888名前は開発中のものです。2005/09/01(木) 03:11:54ID:JN8l/VYG
SDL 1.2.9 リリース

... けど、個人的にはあんまり関係ありそうなアップデート内容無いな
0889名前は開発中のものです。2005/09/03(土) 12:14:56ID:98xgvWvd
放置しておいてスマンカッタ。超訳で不完全だけど。
http://www5.atwiki.jp/ntooka/pages/14.html
どうぞ。あんまし役に立つ情報はないけど。
0890名前は開発中のものです。2005/09/09(金) 23:26:28ID:nk7nSsWv
SDLで、作成したプログラムの二重起動を防ぐ方法はありませんか?
0891名前は開発中のものです。2005/09/10(土) 16:01:06ID:jqa9kx5Y
Mutexをキーワードにググれー
0892名無しさん@そうだ選挙に行こう2005/09/10(土) 17:39:50ID:idvQgIh9
つーかそれSDLの問題かね
0893名無しさん@そうだ選挙に行こう2005/09/11(日) 00:15:50ID:WdKYR5dd
だからソースの可搬性の問題でしょ?
上のほうのタイマの話といい、おまいら何でSDL使ってんの?
環境依存なんて当たり前?
0894名無しさん@そうだ選挙に行こう2005/09/11(日) 00:45:02ID:ySd+9IMB
起動したら一時ファイル作って、そのファイルが存在するかどうかで2重起動を検出する
っていうのは邪道なのかね?
0895名無しさん@そうだ選挙に行こう2005/09/11(日) 00:45:08ID:1ur5e5rk
SDL_Mutex
0896名無しさん@そうだ選挙に行こう2005/09/11(日) 05:14:34ID:7hQykqFY
>>894
強制終了とかでうまく終了処理が行われなかったら
そのファイルが残ってしまい起動できなくなるんじゃ?
0897名無しさん@そうだ選挙に行こう2005/09/11(日) 19:18:45ID:qqbGMCN5
>>891
>>895
SDL 使ったことあるのか?
0898名無しさん@そうだ選挙に行こう2005/09/11(日) 20:03:41ID:IriOHZii
あ、SDL_Mutexってマルチスレッドで使うんだっけ?
08998952005/09/11(日) 21:13:08ID:1ur5e5rk
>>897
ないよ、まったくない。
0900名前は開発中のものです。2005/09/12(月) 01:31:45ID:yPWNVwAr
で?
0901名前は開発中のものです。2005/09/13(火) 15:17:26ID:IiHu2zoE
OS汎用で二重起動防止なら、自分専用のポートを決めてbindするとか。
WindowsならWSAStartupを呼ぶとか多少のOS依存はifdefで書く必要はあるが。
0902名前は開発中のものです。2005/09/22(木) 09:51:58ID:IbR5Q/kQ
質問。
SDL_LoadBMPで取得したSDL_Surfaceは
SW_SURFACEとして読み込まれている認識でOK?
0903名前は開発中のものです。2005/09/22(木) 09:59:46ID:IbR5Q/kQ
スマソ。俺の動作結果はSWでもHWでも無い場所に格納されているみたい。
if(surface->flags&SDL_HWSURFACE) printf("HW\n");
って感じでSWも確かめましたが反応無し。
0904名前は開発中のものです。2005/09/22(木) 12:55:39ID:5uMRcPCk
>>903
#define SDL_SWSURFACE   0x00000000        /* Surface is in system memory */
#define SDL_HWSURFACE   0x00000001        /* Surface is in video memory */
です。
システムメモリ上かVideoメモリ上のどちらかに確保されて、
下位の1bitがvideoメモリ上にあるかどうかを判定するフラグです。

if(surface->flags&SDL_HWSURFACE) printf("HW\n"); else printf("SW\n");
0905名前は開発中のものです。2005/09/22(木) 18:10:40ID:p3aHRteJ
ってことでSWSURFACEで正解。
0906名前は開発中のものです。2005/09/22(木) 23:39:29ID:IbR5Q/kQ
サンクス。古いマシンでのフィルレートがDDrawよか遅かったのです。
ううむ。
0907名前は開発中のものです。2005/09/23(金) 16:11:11ID:nrqAdKrH
ちゃんと読み込んだ画像を SDL_DisplayFormat() して
スクリーンのフォーマットにあわせた?

あとそもそもスクリーンがHWSURFACEになってなければ
DDrawより遅くなると思うよ?
0908名前は開発中のものです。2005/09/23(金) 20:15:53ID:tQ78MyNZ
みなさん有り難うございます(;つД`)

>>907
サンクス
おっしゃるように、HWSURFACEにして、SDL_DisplayFormatでサーフェス指定して解決したす。
0909名前は開発中のものです。2005/09/29(木) 22:19:14ID:QcAJa6kn
ウィンドウモードとフルスクリーンモードの処理速度が異なるのだが、
どういうことだ?

SDLの関数あたりが悪さしていると思うのだが、わからないんです。

教えて、えろい人!!
0910名前は開発中のものです。2005/09/29(木) 22:57:19ID:i68KflVJ
垂直同期の有無じゃね?
0911名前は開発中のものです。2005/09/29(木) 23:09:02ID:q77C+Q53
フルスクリーンだと、資源を専有してるから速いんだろうよ
0912名前は開発中のものです。2005/09/29(木) 23:12:38ID:LmvdAp7b
>>909
マルチうぜー
0913名前は開発中のものです。2005/09/30(金) 00:59:46ID:oblFcTL6
>911
残念な事にフルスクリーンの方が遅くなるんだ!!

>912
まったくだ!!
0914名前は開発中のものです。2005/09/30(金) 18:35:36ID:6EUSIuxQ
>>913
>残念な事にフルスクリーンの方が遅くなるんだ!!
マジかっ!?
意味ねー
つーか、フルなしでよくねーの
0915名前は開発中のものです。2005/09/30(金) 20:34:34ID:/6HcyHJo
あーなんだ、SDL側にvsync待ちさせといて、さらに待ってるとかいうオチじゃないよな?
0916名前は開発中のものです。2005/10/13(木) 11:48:15ID:CykI+nJQ
あるところのゲームサークルに参加したんですが、
グラフィック部分にSDLを使うことになりました。
そして音楽はMIDIは環境で変わるから良くないってことで
DirectMusicProducerを使うとか言い出しました
僕はmixerのMODを使うことを進めたんですが、押し切られてしまいました
リンカエラーとかメモリエラーがでないか凄く心配です・・・
皆さんはどう思いますか?
0917名前は開発中のものです。2005/10/13(木) 12:21:18ID:XPDehWw3
>DirectMusicProducerを使うとか言い出しました
DirectMusicProducerは単に音楽作成ツールですよ?

音楽はDirectX Audioで自前で鳴らし、
効果音はSDLで鳴らそうってなら確かにやめた方がよさそう。
どんな問題が出るか知らないけどね。
09189162005/10/13(木) 12:53:25ID:ypy0AXR+
>>917
そうです。DirectMusicProducerで作ったデータを
DirectX Audioで鳴らそうとしてました。
効果音はどうか知りません
リンカに怒られると言ったら外部にDMPファイルを再生するDLLを置くとか言い出しました
もうガクブルです。
0919名前は開発中のものです。2005/10/13(木) 17:25:39ID:ToPl7cy0
>>915
MODはSDLに組み込みだから楽 ← プログラマの都合
DMPはMIDIライクな編集がその場で出来るから楽 ← 音楽屋の都合

こう思った。
うまい折衷案が出るとよいが、最終的にはプログラマ側で妥協してやるしかないんじゃない?
09209192005/10/13(木) 17:47:05ID:ToPl7cy0
レス番間違えたーよ('A`)
>>916宛でした
09219152005/10/13(木) 21:13:13ID:pthRpnxV
>>919
そうですか・・・音楽屋がやりやすいなら仕方ないです
でもDirectMusic叩けるなら、Drawも直に叩いて欲しい
うちのメインの考え方は分からないです・・・
0922名前は開発中のものです。2005/10/14(金) 10:28:50ID:uk4v+zqx
>>921
とりあえず、言質はとっとけ
最低でも、そのメインが該当箇所を組むようにな
問題なけりゃそれでいいが、
問題出たときに誰が泥をかぶるのかを決めとかないと
プロジェクトが頓挫する事になる
0923名前は開発中のものです。2005/10/14(金) 18:43:07ID:kCsY6VJS
UTF8のファイルから読み込んだ文字列をひとつのサーフェイスにして
描画する方法が分かりました。
しかし、その文字列を一文字ずつ描画したい場合(ドラクエのように人に話すと
表示されるメッセージのように)は人文字ずつサーフェイス作っていって
フレームカウントをして表示速度の制御をしながら描画するのがいいんでしょうか?
後、UTF8だと日本語1文字が何バイトなのかって固定されてないので、すごく難しいんですが。
アイディアください。
0924名前は開発中のものです。2005/10/14(金) 20:16:29ID:uTRcIOI8
UTF-8は先頭バイト見れば何バイトかわかるけど?
0x00-0x7F 1
0xC0-0xDF 2
0xE0-0xEF 3
0xF0-0xF7 4
0xF8-0xFB 5
0xFC-0xFD 6
0925名前は開発中のものです。2005/10/15(土) 04:46:42ID:xL4TCgUt
>>923
むしろ
>UTF8のファイルから読み込んだ文字列をひとつのサーフェイスにして描画する方法
を教えてください
09269232005/10/15(土) 20:55:28ID:03Wc5kyl
>>924
ありがとう。理解しました。
>>923
回りくどい質問でしたね。気をつけます。
09279252005/10/16(日) 00:09:25ID:uNCcPNGN
マジで教えて欲しいんすけど・・・
0928名前は開発中のものです。2005/10/16(日) 01:09:04ID:ho7RZaGn
>>925
SDL_ttf をいれて以下の関数を使う
* TTF_RederUTF8_Solid()
* TTF_RederUTF8_Shaded()
* TTF_RederUTF8_Blended()
09299252005/10/16(日) 16:53:28ID:uNCcPNGN
そうじゃなくて、1フレーム毎にsurfaceを生成して描画してたんじゃ遅くて使い物にならない(こともないけど)ので、
アプリケーションの初期化時にテキストデータを全部読み込んで画像をcache、文字と矩形の対応情報を保存、もしくは外部でそのファイルフォーマットを吐き出すツールを作る必要があると思うんだけど、
もういいや。

>>924>>928
情報ありがとう。知らなかったよ。
0930名前は開発中のものです。2005/10/16(日) 17:01:24ID:0gQNvyRR
何か凄いアホが紛れ込んでるな。
09319252005/10/16(日) 17:01:39ID:uNCcPNGN
文字列情報が固定されているゲームに限定してレスしてしまった。すまそ。
動的な文字列の場合はやっぱりそのまま生成して使うんかな。
まあどうでもいいか。
09329252005/10/16(日) 17:04:24ID:uNCcPNGN
はいはい、君は僕より頭がいい。
0933名前は開発中のものです。2005/10/16(日) 17:46:45ID:ePu+oMfg
TTF_RederUTF8_XXXを使う場合でも1フレーム毎にsurfaceを
生成するなんてアホなことはしない.文字列のsurfaceが欲しい
シーンに入るときにsurface作ってそのシーンから抜けるときに
SDL_FreeSurface()する.

文字と矩形を対応させて文字列を描画する方法はASCIIコード程度なら
やるけど日本語ありの場合は必要な文字だけをレンダリングしたとしても
莫大なメモリを食うのでやっぱりやらない.
0934名前は開発中のものです。2005/10/16(日) 19:04:17ID:9sHmJEZ2
>>933
> 文字と矩形を対応させて文字列を描画する方法はASCIIコード程度なら
> やるけど日本語ありの場合は必要な文字だけをレンダリングしたとしても
> 莫大なメモリを食うのでやっぱりやらない.
日本語でも、αチャンネルだけのテクスチャにするとかでメモリ使用量押さえたらなんとかならんかな?
やったことないんで想像で言ってるだけだが
09359252005/10/16(日) 19:15:54ID:uNCcPNGN
>>933
使う文字列が多い場合、シーン毎に細分化してもメモリ使用量は変わらんがな。結局使うんだから。
ましてMMOのチャットなんかで動的に必要な場合はシーンで確保なんかできない。
09369302005/10/16(日) 19:37:31ID:0gQNvyRR
正直スマンかった。アホじゃなくて池沼だわ。
レス数が900を超えています。1000を超えると表示できなくなるよ。