SDLスレ ver.2.0

■ このスレッドは過去ログ倉庫に格納されています
2006/02/28(火) 20:40:12ID:MvXDyxzs
マルチプラットホームな汎用ゲームライブラリの
SDLについてのスレッドです。
最新情報、参考になるソース、質問等なんでもどうぞ

本家
ttp://www.libsdl.org/

SDL_mixer ttp://www.libsdl.org/projects/SDL_mixer/
SDL_image ttp://www.libsdl.org/projects/SDL_image/

SDLdoc-jp ttp://www.tacoworks.jp/software/SDLdoc-jp/
GamDev ttp://gamdev.org/w/?%5B%5BSDL%5D%5D
初心者の初心者による初心者の為のSDL ttp://tokyo.cool.ne.jp/sdl/

前スレ
http://pc8.2ch.net/test/read.cgi/gamedev/1005469181/
2008/06/19(木) 19:19:28ID:xHUnW9Cs
>>328
どう見ても動かなくて当然です。
C/C++勉強しなおしましょう。
2008/06/19(木) 19:48:29ID:fSacriq7
どうみてもこれですね本当にありがとうございました
ttp://www.tacoworks.jp/software/SDLdoc-jp/html/sdlgetkeystate.html
>返されたポインタはSDL内部の配列へのポインタですので、 呼び出し側で解放してはいけません。

やっぱ変だとは思ったんだけど、なんでデバッグで通しで実行した時だけ止まるのか気になって
2008/06/19(木) 22:02:16ID:kP83Im28
それ以前の問題だよ
ポインタ勉強しなおせ
2008/06/20(金) 01:30:22ID:U0K3TT78
newする必要なんてない
しかも、そのnewしたやつは開放されてない
2008/06/21(土) 06:03:14ID:O+pYZwaV
>>330
デバッグ版のほうが不正なコードに対するチェックきついんだよ。特にメモリまわりはね。
2008/06/26(木) 08:37:32ID:7bFpPbg4
サンクスコ
だから動かなかったんですか
理由もわかったしデバッガとかのバグでなくてすっきりした

>>331-332
330の時点でその辺は分かってるyo
自分でもなんでこんなの書いたのかすげー不思議だ
2008/08/10(日) 20:17:35ID:QtI/u+OG
SDL1.2.10以降でSDL_WM_SetCaptionに日本語を使うと文字化けしてしまうのですが、
2byte文字を化けないようにする方法はないでしょうか。
2008/08/10(日) 20:23:46ID:+PbZDGrT
つSetWindowText
2008/08/10(日) 21:25:51ID:g7T3hWwX
>>335
UTF8で渡せとかそういう話じゃなかったっけか?
2008/08/10(日) 22:29:28ID:OHMslPTs
ソースをUTF-8で保存してればできたような。(≒>>337
SDL_EnableUNICODEしないといけないんだっけ?
2008/08/10(日) 23:42:34ID:g7T3hWwX
ソースをUTF-8ってか関数に渡すバイト列がUTF-8になればいい。
SDL_EnableUNICODEはキーイベントの振舞を変える関数だから関係ないはず。
2008/08/10(日) 23:52:29ID:OHMslPTs
そうでした、ゴメン
2008/08/11(月) 10:01:30ID:TzozCFk6
こっちこそゴメン…
あやまるから、もう一度やり直そうぜ!
342名前は開発中のものです。
垢版 |
2008/08/22(金) 23:29:32ID:a5tEqmFR
SDLに付属のサンプルプログラム testgl.c に関する質問です。

icon.bmpの周りの黒い部分を切り取った状態で、スマイルのみを
表示するように改造するにはどのようにしたらよいのでしょうか。

描画前に以下を追加すればよいとの情報がありましたが、うまくいきませんでした。

glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
glColor4d(1.0, 1.0, 1.0, 1.0);

そもそもこのbmpにはアルファ値が含まれていないのでしょうか。
2008/08/23(土) 03:01:36ID:W5iXsx8o
bmpは普通アルファチャネル入ってないしょ。
今ならPNGあたりが妥当か。あとはTGAとか。
2008/08/23(土) 04:55:52ID:aWRf8BFC
SDLなんだし、パレットからアルファチャネル捏造してもよさそうだな
2008/08/23(土) 09:26:27ID:M4/vsM9q
>>342
-logocursor や -logo で出てくるicon.bmpのテクスチャだよな?
icon.bmp は 4bit カラーの DIB なんて当然アルファとか入ってない。

SDL_LoadBMP() で icon.bmp をロードした後に
SDL_SetColorKey(image, (SDL_SRCCOLORKEY|SDL_RLEACCEL),*(Uint8 *)image->pixels);
とかやって透過色を指定してやる。そうすると SDL_GL_LoadTexture()でアルファ付きの
テクスチャにしてくれるはず。そうした上で描画前に
glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
glColor4d(1.0, 1.0, 1.0, 1.0);
とする。あるいは、
glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE);
とかでテクスチャの色でポリゴンの色を置き換ちゃってもいいかも。
2008/08/23(土) 12:10:17ID:ERkLBf3o
>>345

できました!!本当にありがとうございました。
こんなことで2日ほど悩んでました。

ちなみに、このSDL_SetColorKey()で指定しているキーというのは、画像のはじっこの色を
指定している、という理解であってますか?
2008/08/23(土) 23:35:27ID:aWRf8BFC
*(Uint8 *)image->pixelsが左上のピクセルを指してるので、その理解で合ってる。
SDL_MapRGBで任意の色を指定してもいいよ。
2008/08/24(日) 11:30:01ID:bnMWkYhk
なるほど、ありがとうございました。
いろいろ弄ってみます。
2008/08/24(日) 17:04:07ID:XYqjm2r9
>>348
いろいろがんがれ!
2008/09/27(土) 13:13:40ID:xyM4h4Xe
あげ
2008/09/28(日) 13:49:02ID:39sKe8im
SDLのKEYUP/KEYDOWNのエッジ検出というか変化した瞬間の検出する機能ってないですよね?
2008/09/28(日) 14:03:24ID:mKd/H6dR
event.type
2008/09/29(月) 14:52:31ID:qSKBf54P
>>351
普通にイベント処理するか、ゲームみたいに扱うキーが少ない
なら自分で1フレーム前の状態を記憶しておくかじゃね?
2008/10/06(月) 05:57:12ID:ObKXGS8z
サンクスコ
イベント処理ってのがよくわからなかった('A`)
ので、記憶させるほう作って終わしますた
bool isKeyboardPressAndRelease(int key){
 Uint8 *keys = SDL_GetKeyState(NULL);
 static int oldkeys[SDLK_LAST];
 if(keys[key] == SDL_PRESSED ) {
  oldkeys[key] = SDL_PRESSED;
  return false;
 }else if(oldkeys[key] == SDL_PRESSED ) {
  oldkeys[key] = SDL_RELEASED;
  return true;
 }
 return false;
}
2008/11/03(月) 19:07:48ID:tPLnRv3h
sdl_ffmpegなんてものもあるんだな
ただmplayerで再生するより重くなっちゃうけど
2008/11/03(月) 20:26:03ID:c53J3lOT
よく見てないが出来るのはデコードだけなのか
エンコードも出来ればリプレイをそのままようつべにうpとか
夢が広がりまくりんぐなんだが
2008/12/01(月) 14:35:06ID:BRHpuMYs
サイト消えてる?
2008/12/01(月) 14:41:26ID:xsXgZLI2
アクセスできんね
2008/12/01(月) 23:07:39ID:5vnxLKEg
復帰してる模様
2008/12/01(月) 23:10:13ID:xsXgZLI2
Note: We've moved libsdl.org to new hosting and the mailing lists have not been restored yet.
This is a high priority and will be fixed as soon as possible.
Please report any other issues you find ASAP.
Thanks!

サーバ変更か
2009/01/25(日) 18:52:56ID:sWufHJjM
SDLも十分扱いやすいんだが、DXライブラリほどではないんだよな
ちょっとSDLのラッパー作ったらはやるんじゃないか?これ
マルチプラットフォームだし
2009/01/25(日) 19:53:52ID:xbGYEaS9
SDLのラッパーなんて腐るほど出てるよ
Cスタイルで手軽に使えるのが特徴なんだから需要ないと思う
DXライブラリみたいにハンドルまで何でもかんでもint型でラップしないと使えないようなこともないし
2009/01/25(日) 23:29:40ID:sWufHJjM
勢いないから誰も居ないと思ったらROMがいるようで安心した
考えてみればSDL使うやつは自分でラッパー作るなりしてやってるな
2009/01/28(水) 16:17:21ID:wlJakLRQ
SDL_gfxの日本語ドキュメントあれば教えてください。
ぐぐったけど無いみたいで…ソース読むしかないですか
365名前は開発中のものです。
垢版 |
2009/02/07(土) 22:39:18ID:bTB7pSPh
亀レスだけど初心者のSDLに少しだけかいてあったかも
2009/02/16(月) 21:47:27ID:O9Y7RbWH
OpenGL使ってゲーム作ろうと思うんだが
SDLとGLUTの違い教えてください
二つもAPI覚えてたら頭パンクしちゃいます。OpenGLでもうカオスなのに
367名前は開発中のものです。
垢版 |
2009/02/16(月) 21:49:55ID:xXiGjaIE
使ってる鳥を晒せ
教えるかどうかはそれ次第だ
2009/02/17(火) 11:39:20ID:dKP1WtQr
OpenGL自体は計算しか行わないので、計算結果をディスプレイへ表示するためには
何か他のライブラリを使って行う必要がある。

SDLは画像の表示、音声の再生、(マウスやゲームパッドなど)入力機器のコントロールを行うためのライブラリ。タイマーやスレッドなどの機能も提供。
GLUTは画像の表示と、(マウスやキーボードなど)入力機器のコントロールを行うためのライブラリ。

ゲームを作りたいだけならGLUTは捨ててSDLに絞ればいい。
2009/02/17(火) 15:58:53ID:EqX1F4ey
>>367
Ubuntu

>>368
ありがとう。とてもわかりやすかった
SDLとOpenGLでマルチプラットフォームなゲーム作りに挑戦するよ
370名前は開発中のものです。
垢版 |
2009/02/17(火) 19:32:01ID:YFalwF47
ごらんの有様
371名前は開発中のものです。
垢版 |
2009/02/17(火) 19:51:58ID:yVzrSt+7
Glutがあればティーポットが簡単に表示できるだろうが
2009/02/18(水) 00:39:57ID:GUh5vf0M
ティーポットをキャラにしてゲームを作りたいなら両方リンクすればいいじゃない
2009/02/18(水) 21:30:45ID:e8tzFuLM
>>371 glutがなくてもgluがあればティーポットは表示できる。
しかしゲームでティーポットだけの表示もないだろ
2009/02/19(木) 22:27:25ID:F3Q74QBZ
>>373
>しかしゲームでティーポットだけの表示もないだろ
ネタにマジレスすぎだろ…

あと glutWireTeaport() や glutSolidTeapot() で簡単に表示できるって話じゃないの?
2009/02/19(木) 22:46:48ID:+EY8y50g
マジかよ…
俺のこの5年は一体…
376名前は開発中のものです。
垢版 |
2009/02/27(金) 10:02:33ID:E56wit0d
SDL_LoadBMP で確保したSDL_Surface(1) と
SDL_CreateRGBSurface で確保したSDL_Surface(2) で
何か違うのかな?
それぞれscreenに表示する関数に渡した後、
(1)は描画されるのに
(2)は何も描画されない(アプリが落ちることもない)
関数に渡さず、どちらも確保した関数内で
screenにSDL_BlitSurface+SDL_UpdateRectした場合は、表示されるんだけどね
2009/02/27(金) 18:53:07ID:VYJJoF0I
SDL_LoadBMP内ではSDL_CreateRGBSurfaceが呼ばれてるから本質的には何も違わない。
SDL_Surface構造体の中身を表示して比べてみればいいんじゃない。
2009/02/27(金) 21:35:29ID:YQ8iFWgu
ABAのようにSDLでゲーム開発していてオープンソースなところを教えてください
コード見て勉強したいです
2009/02/27(金) 21:56:50ID:xmgpHz+a
>>378
「ペンギンコマンド」とかどうよ。
http://www.linux-games.com/penguin-command/
2009/02/28(土) 15:50:05ID:1IBOSKyZ
SDL.NETで作ったソース公開されてるゲームないかな?
SDL.NET自体情報が少なくて、へたれな俺にはぴんとこない。
codezineでやってたのでやっと少し理解できたぐらいで。
できれば日本人が作ってるのがいいんだが・・・
2009/02/28(土) 16:52:59ID:VMgU4zCi
>>379
海外か。やっぱ国内のは少ないのか…
見てみる。ありがとう
2009/02/28(土) 17:27:49ID:5UqeQdYc
>>380
ttp://d.hatena.ne.jp/fslasht/20080722#1216721957
2009/03/14(土) 12:14:01ID:9btw4Mc8
質問です。
SDL_DisplayFormatAlphaでα情報を持たせたSurfaceに
SDL_SetAlphaで全体α情報を付加させたいのですが
どうもうまくいきません。
これは仕様で出来ないのでしょうか?
2009/03/14(土) 12:34:44ID:I07kl7uF
>>383
本家のドキュメントWiki( http://www.libsdl.org/cgi/docwiki.cgi/SDL_SetAlpha ) に、
> RGBA->RGB with SDL_SRCALPHA
> The source is alpha-blended with the destination, using the alpha channel. SDL_SRCCOLORKEY and the per-surface alpha are ignored.
とあるので、仕様で不可能になってるんだと思います。
2009/03/14(土) 13:19:06ID:9btw4Mc8
そうですか…
何回やっても出来ないわけだ

素早い回答ありがとうございました。
2009/03/23(月) 16:42:47ID:6VLsDElv
SDLでフルスクリーンを使用するときに、使っているディスプレイでの最大の解像度(1680x1050)でフルスクリーンにしようとするとウィンドウ化、フルスクリーンを繰り返してしまいます
それ以下の対応した解像度(たとえば1440x900)では正常に表示されます
原因として何が考えられますか?
387名前は開発中のものです。
垢版 |
2009/04/06(月) 12:16:57ID:pBRyt7pq
>386
カメレスだが
OSはWindows?
下で動作してる古いDirectXが対応してないとか
2009/05/26(火) 00:29:44ID:TaTh536w
こんなスレあったのか。これこそ俺が求めてたスレ
しかし過疎ってんな
2009/05/26(火) 10:46:45ID:RE6nhW1+
プログラム板にも類似スレあるからなぁ
http://pc12.2ch.net/test/read.cgi/tech/1103655588/
2009/05/26(火) 11:44:26ID:g1iwHtNj
Linux板にもあるんだな
http://pc11.2ch.net/test/read.cgi/linux/1025048946/

どこも過疎なんだな
2009/05/26(火) 13:00:07ID:ury5peHE
まぁどの板も見てる人は同じだったりするんだがなー
2009/05/27(水) 15:13:44ID:J1ZUF3NO
>>391
あるあ…あるあるwww
2009/05/27(水) 20:27:22ID:tvwU/dRy
>>391
禿同
2009/06/20(土) 19:00:42ID:NcF3Cdso
pitchってなんなんだよ
2009/06/21(日) 00:59:00ID:pYdSfSIz
サーフェスが内部で持ってるバッファの横幅のバイト数

主に効率の理由で、SDL_CreateRGBSurfaceは要求されたwidthより多めにバッファを確保することがある
そのためwidthとは別に、実際のバッファサイズpitchを提供している
2009/06/21(日) 11:20:50ID:zSv4yW5k
大抵は
width * BytesPerPixels == pitch
になるんだがwidthが中途半端な値の時に行末にパッディングを入れて
効率よくアクセスできる様に行頭位置を調整したりする環境があったりする。
そういう環境では、
width * BytesPerPixels != pitch
になるんで座標(x, y)の値をpixelsから得るときなどpitchを使う方ようにする。
2009/06/21(日) 23:15:51ID:E25maqZD
SDLで垂直同期待ちをするにはどうしたらいいのでしょうか
2009/06/22(月) 00:20:15ID:O+mIJJsX
SDL_SetVideoModeでSDL_FULLSCREEN | SDL_HWSURFACE | SDL_DOUBLEBUFを指定してSDL_Flip()
2009/06/23(火) 00:52:22ID:joZZV7Mo
できないです
2009/06/23(火) 12:13:46ID:/PVOVvfC
>>397
環境が分からんけど OpenGL 使うなら
SDL_GL_SetAttribute() で SDL_GL_SWAP_CONTROL に 1 を設定する
401名前は開発中のものです。
垢版 |
2009/06/27(土) 18:30:43ID:sDHPm4PI
ローグライクのようなビジュアル的な計算が不要なゲームだと、
OpenGL使わずSDLだけでも十分って認識でおk?age
2009/06/27(土) 19:19:02ID:KWqzL4Cx
>>401
SDLもいらね。CUIで十分だ。
403名前は開発中のものです。
垢版 |
2009/06/28(日) 00:08:39ID:ywJLJ5bX
SDLの本が全く無いのがおかしいと思います
2009/06/28(日) 00:34:11ID:HORigyY6
じゃあ書くしかないよね!期待してる
2009/06/28(日) 00:34:35ID:bZPPtuvi
シンプルなのに本が必要って理解できない。
関数の説明とかサンプルがあれば十分だと思う。
言語を本を見て勉強する人も理解できない。
文法なんて数日で慣れるし、実際にコーディングした方が早い。
406名前は開発中のものです。
垢版 |
2009/06/28(日) 00:37:11ID:UHxRgRz6
>>402
タイル版が好きです。
2009/07/27(月) 22:27:56ID:pwgcLYGU
実行ファイルに埋め込んだリソースのBMPを読み込むにはどうしたらいいんですか
2009/07/29(水) 19:46:46ID:hxaVetwq
SDL_RWFromMem と SDL_LoadBMP_RW で
2009/07/30(木) 03:02:11ID:7LpS17TZ
プログラムの中でgzファイルを解凍して使うにはどうしたらいいですか
2009/07/30(木) 08:59:42ID:X32fjlJI
もうそれ SDL 関係なくね?
zlib 用意して gzopen, gzread, gzclose
あとはここ
http://www.gzip.org/zlib/rfc-gzip.html
2009/07/30(木) 20:26:22ID:z/8BAJ4t
>>408
すいません。SDL_RWFromMemに与えるべき引数が分かりません。
VisualStudioでresource.rcという下記内容のファイルを作って、
RSC_BMP BITMAP "./test.bmp"
test.bmpを実行ファイルに埋め込むことはできているのですが、どうやって取り出したらいいのでしょうか。
2009/07/30(木) 21:21:20ID:X32fjlJI
え、そこから?
なら FindResource, LoadResource, LockResource で
2009/08/02(日) 03:20:05ID:YWNjq98X
実行優先度を設定する関数とかない?

今のところ窓でしか使ってないんだけど、
せっかくのマルチプラットフォームでWin32API使うの勿体無い('A`)
2009/08/02(日) 14:19:49ID:lj8fHqwo
可搬性のあるやり方は未だ無いと思う
__WIN32, __darwin, __linux, __unix, __FreeBSD で場合分けするしか無いんじゃない?
415名前は開発中のものです。
垢版 |
2009/08/02(日) 18:20:43ID:jIK/N1/Y
結局そうなるよね。
2009/08/02(日) 18:49:37ID:MeotJZ+F
マルチプラットフォームw
2009/08/02(日) 19:33:44ID:P5gI9MRs
>>416
は何がおかしいのか分からない。
2009/08/02(日) 19:45:31ID:qKXo/Ur3
時々居るよね。意味もなく笑う人。
2009/08/02(日) 20:38:25ID:8opud4vC
Winだと、printfとかが使えなくなかったっけ。
2009/08/02(日) 20:44:50ID:Ra9uEb/u
そんなことないよ
2009/08/02(日) 20:47:12ID:we+x1PU3
>>419
標準出力の内容がstdout.txtに書き出されるとかそういうのじゃなくて?
2009/08/02(日) 22:29:17ID:8opud4vC
>>421
そう、それです。めんどくさいよね。
2009/08/03(月) 02:33:22ID:iR0h6COQ
SDL_SetVideoModeを繰り返し呼んでも問題ないでしょうか
2009/08/03(月) 03:43:12ID:iR0h6COQ
SMPEG_playで再生中の動画の現在の再生時間を得るにはどうしたらいいですか
2009/08/03(月) 03:51:05ID:iR0h6COQ
SDL_getinfo()でできましたありがとうございました。
2009/08/03(月) 05:22:51ID:zcH5fUUq
サンクスコ
とりあえず__WIN32のだけ適当に作るわ
2009/08/03(月) 14:13:15ID:LWn7Xmbh
_WIN32はあったけど__WIN32はなかったような
2009/08/04(火) 01:32:24ID:fCZ60H43
やけにCPU使用率高いなと思ったらSDL_VideoDriverName()の結果が"windib"でさらに
SDL_SetVideoModeの戻り値のflags見たらSDL_HWSURFACEがセットされてねえし。
ネットの情報調べたらデフォルトでwindib使うようになっててハードウェアアクセラレーション使いたかったら
opengl使えとか書いてあるしまじ糞ライブラリ
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

ニューススポーツなんでも実況