SDL=Simple DirectMedia Layerでゲームだ

■ このスレッドは過去ログ倉庫に格納されています
1デフォルトの名無しさん
垢版 |
NGNG
DirectXなんて捨てちまえ。
これからはSDL。

本家
http://www.libsdl.org/index.php

ゲームとか
http://adas.lolipop.jp/digit/index.php?SDL

サンプル
http://saka.moo.jp/Linux/SDL.html
2006/12/03(日) 04:08:41
>>285

断言できるんだw
2006/12/03(日) 04:46:11
どっかの企業が作ったライブラリが原型じゃないっけ?
ってことはその原型のライブラリは
その企業では一応使われてたんでないかと
288デフォルトの名無しさん
垢版 |
2006/12/03(日) 04:48:40
XNAでおk
289デフォルトの名無しさん
垢版 |
2007/01/19(金) 08:28:09
サーバーやたら重くね?
2007/01/20(土) 10:35:05
XNA厨があばれててうざい
2007/02/11(日) 14:01:50
ものすごく恥ずかしい質問かもしれないけど・・・
ウィンドウタイトルに日本語は使えないの?
2007/02/11(日) 14:11:29
使える
2007/02/15(木) 03:02:50
>>291
少なくともWindowsでは使えない。
文字列をutf-8に変更した時からみたいだね。

バグ報告は出ているけど、いつ直ることやら。
って思ったら、とりあえずパッチが上がってた。

古いバージョンを使うか、バグ報告どおりに自分で直すと良いかと。

ttp://bugzilla.libsdl.org/show_bug.cgi?id=365
2007/04/23(月) 07:32:03
便乗して恥ずかしい質問してみるけど、Alt+F4ってどう実装してる?
メインループのPollEventで、下のようにやってもAltを認識してくれないぽ
環境はwin2k、DevC++(gcc+mingw)、SDL1.2.11

bool PollEvent(){
 SDL_Event ev;
 while(SDL_PollEvent(&ev)){
  switch(ev.type){
   case SDL_QUIT:
    return false;
    break;
   case SDL_KEYDOWN:
    if((ev.key.keysym.sym == SDLK_F4) && (ev.key.keysym.mod == KMOD_ALT)) return false;
    break;
  }
 }
 return true;
}
2007/04/23(月) 11:38:35
ev.key.keysym.mod & KMOD_ALT
2007/04/23(月) 22:32:25
泣いた

サンクスコ
それだとうまくいきました
ビットごとに違うフラグあるんだから全体を==で比較しちゃ駄目ですね
2007/05/09(水) 15:20:17
SDL_ttfのこの辺って戻り値が参照渡しだけど、もしかしてこの関数内でサーフェス用に確保されたメモリってほったらかしだと解放されないで、新しく確保した領域にポインタが更新されるだけ?
ループの中でテキスト生成させてたら、秒速1MBでメモリ増えてくんだけど(;'A`)
>SDL_Surface *TTF_RenderUTF8_Solid(TTF_Font *font, const char *text, SDL_Color fg)
2007/05/09(水) 15:47:56
>>297
SDL_ttfの戻り値は自分で開放するもんだ.
ってかループ中に使うものじゃない.
299デフォルトの名無しさん
垢版 |
2007/06/17(日) 15:03:37
あげ
300デフォルトの名無しさん
垢版 |
2007/06/20(水) 14:35:46
さてこれからC++とSDLで勉強しようと思う俺様が通りますよ

301デフォルトの名無しさん
垢版 |
2007/06/20(水) 21:19:00
>300
とりあえず初心者の〜に行ってこい
2007/08/13(月) 17:37:28
SDL1.2.12になってからVisualC++ 2005 EE SP1でコンパイルしても実行出来なくなったんですが
原因が分かる方居ますか?
303デフォルトの名無しさん
垢版 |
2007/08/19(日) 20:16:49
1.2.12いれたら -ansiオプションで警告出たのでなんだろと思ったら
SDL/begin_code.hの93,94行目のコメントがC++形式だった
2007/08/19(日) 21:43:36
>>303
ほんとだw
svn見てみたらそっちは直ってたよ
2007/08/19(日) 23:13:34
http://www.freewebs.com/activetv/?YTV=Return+to+Forever
2007/09/07(金) 11:32:36
移転先

SDLスレ ver.2.0
http://pc11.2ch.net/test/read.cgi/gamedev/1141126812/
2007/09/07(金) 17:46:02
>>306
さよなら。いってらっしゃい。

↓続きをドゾ
2007/09/27(木) 23:59:43
SDL使ってゲームを作り始めました。ここで質問なんですが、
SDL_GetKeyState()はゲームのメインループ1回に1度呼び出すのと、
SDL_PollEvent()でSDL_KeyboardEventを拾った時に呼ぶのとどっちがいいんでしょう?
前者では常にそのタイミングでスキャンでき、
後者ではOSがイベントを中継する分だけ(処理落ちが激しいときなどでは)反応が遅れる可能性があるが
キーボードに触れられなければSDL_GetKeyState()が呼ばれないためその分軽い(1msも掛からないと思うけど・・・
ということじゃないかと考えているのですけど、一般的にはどちらが使われる、とかありますか?

あと、SDL_PollEvent()でイベントが何もきていないときにゲームメインループを進めているのですが、
ウィンドウのタイトルバーを右クリックしてポップアップメニューが表示されている間や、
タイトルバーをドラッグしてウィンドウが動いている間などはゲームメインループが進みません。
こういった状態でもゲームメインループをまわすにはどうしたらいいですか?
(Windowsでの話です。)
2007/09/28(金) 03:28:33
>>308
普通は毎フレーム呼ぶんじゃないかな?
ソース読めばわかるけど SDL_GetKeyState() は実はポインタを返すだけの処理だから
どっちでも大差ないだろうけど.最適化を考えるなら1フレームあたり1回しか
呼ばれない低負荷の関数コールを削ることを考えるよりもどこがボトルネックに
なっているか調べてほかに重い場所を探したらいいと思うよ?

# 実は最初に一回呼んでポインタを保存しておいてループ内ではそれを参照するとかでも
# 動く気がするけどその動作が保証されてるわけじゃないから…まぁ適当にやってくれ
310308
垢版 |
2007/09/28(金) 22:57:22
>>309
ありがとうございました。ポインタを返すだけだったのか!
2007/10/08(月) 10:02:45
SDL 1.3の新機能についてRyanさんが書いてる。
ttp://icculus.org/cgi-bin/finger/finger.pl?user=icculus&date=2007-10-07§ion=sdl13
2007/10/08(月) 12:51:23
ついにマルチウィンドウが来ますな。
過去互換性も整理する方向みたいね。
いつ頃投入予定なのかな?SDL1.3
2007/10/08(月) 12:59:24
マルチウィンドウ出来たら Gtk+ の代わりに使えるかな
2007/10/08(月) 13:27:31
それはパーツの種類が少ないからムリだと思う。
SDLの上にウィジェット・ツールキットを構築するのはありだと思うけど。
2007/10/12(金) 01:34:04
RubyでSDLを弄り始めたんですが、これはスタンドアロン専用ですか?
CGIでは使えない?
2007/10/12(金) 02:49:11
>>315
CGIで何に使うんだ?画像生成とか?
2007/10/12(金) 03:38:31
>>316
CGIと言うか、RubyとかWEBアプリ用と聞いたので、
当然ライブラリとかもWEB上で使えると思ったんだけど・・・
2007/10/12(金) 03:51:17
RubyがWEBアプリ用とかいう認識が根本的に間違ってることを理解してくれ
# まぁ向いてる分野ではあるけど
2007/10/12(金) 13:09:09
> RubyとかWEBアプリ用と聞いたので、
違うよ。全然違うよ。

> 当然ライブラリとかもWEB上で使えると思ったんだけど・・・
なんで?WEB上ってどこで?
普通、クライアントサイドで動かす、SDLを
サーバーで動かす利点は何だろう?

2007/10/12(金) 17:39:12
>>317
そもそもその情報をどこで知ったの?
2007/10/12(金) 18:23:09
SDLと関係ない話になりそうな流れだな……。
別にもうこれ以上掘り下げなくてよくね?
2007/10/13(土) 05:23:23
Ruby/SDLで書いたゲームスクリプトを投稿すると
サーバの向こう側に常時待機しているおっさんがそれを遊んで
スコアを返すWebアプリを思いついた

アイデアの権利は放棄するからお前ら自由に実装していいぞ
2007/10/13(土) 10:07:22
なんでおっさん限定なんだよww
2007/10/13(土) 12:41:29
何その、サーチエンジンはやぶさ
2007/10/19(金) 22:34:05
複数のテキストをOpenGLの画面に渡すためにSDL_ttfを使っているのですが、

TTF_RenderUTF8_Solidして作ったいくつかのSDL_Surfaceを、
SDL_BlitSurfaceで、既にOpenGLのフォーマットにしてある大きなサーフィスにコピーして集めて画面をつくり、
その大きなサーフィスをglTexSubImage2DでOpenGLテクスチャとして更新して表示

という方法で、やりたいことはできたのですが、
テキスト1行1行を別々のテクスチャとして扱いたかったのに加えて、
ここの処理だけSDL側でコピーするのも気持ち悪いな、と思い、

TTF_RenderUTF8_Solidして作ったSDL_Surfaceを
SDL_ConvertSurfaceを用いてOpenGLのフォーマットに変換して、
glTexSubImage2DでOpenGLのテクスチャを部分更新して転送する

という方法に変えたところ、テキストのテクスチャの背景部分が透過されなくなってしまいました。
OpenGLテクスチャ上では、文字部分はα値1でカラー値さまざま かつ 文字の無い部分はα値0で完全に透明
にしたいのですが、どうしたらいいのですか?

もともとの方法では、SDL_BlitSurfaceの時に、TTF_RenderUTF8_Solidの作ったサーフィスの文字の無い部分は
自動的に透過されたのですが、SDL_ConvertSurfaceをする場合は、同じように透過されないのでしょうか?
2007/10/20(土) 04:00:34
>>325
ConvertSurfaceでできたSDL_Surfaceの pixel 値を
覗いてみて希望の状態になってるか見てみれ
2007/10/20(土) 21:34:26
>>326
ありがとうございました、解決しました。
覗いてみたところ、透過したいところのαが0、表示したいところのαが255、と、
OpenGL側の透過値と全く反対で扱われていました。
gl側の混合処理で、GL_SRC_ALPHAからGL_ONE_MINUS_SRC_ALPHAにしたらうまくいきました。
解決のヒントを与えてくれてありがとうございました。
328デフォルトの名無しさん
垢版 |
2007/11/24(土) 15:09:08
補助ライブラリを日本語で紹介してるサイトないですか?
2007/11/25(日) 14:27:29
ひょっとしてこのライブラリもう誰も使ってない?
2007/11/25(日) 14:28:27
結構使われていると思うけど
2007/11/26(月) 02:59:31
>>329
解説が必要なほど複雑なAPIないからなぁ…
2007/12/08(土) 06:48:31
325とは逆に作ったサーフェスに全く表示されないのを一晩悩んだ漏れが来ましたよ
FillRectで特定の値書き込んだ所や貼り付けた特定の画像上だけしか重ね貼りした画像表示しなくて、
真っ黒な0でのFillRectと並べてやっと気付いたorz

もう弄りすぎてソースが焼きそば並にぐちゃぐちゃだぜ
2007/12/09(日) 00:25:56
SDLで半透明ウインドウできますか?
334デフォルトの名無しさん
垢版 |
2007/12/28(金) 00:39:37
cairoとの相性いいみたいですね
フォントとか画像ファイル関係はcairoで代用できそう
335デフォルトの名無しさん
垢版 |
2008/01/05(土) 01:27:38
板違いだったらすいません。

ちょっと質問なんですが、Ruby/SDLを使用しようと思って、必要なものをインスコして、
プログラムを書き、コンパイルしたら、

ALSA lib confmisc.c:数字
ALSA lib conf.c:数字
ALSA lib pcm.c:数字

こういうものが多数出てきて、実行できませんでした。

環境は、Linuxのubuntu7.10を使っています。
SDLやRuby/SDLは元々入っていたものをパッケージャから入れました。

どうしたら実行できるでしょうか?
2008/01/06(日) 00:41:57
こういうものが多数・・・と手書きするんじゃなくて
可能な限りをコピー&ペーストしなさい
数字の後にもエラーメッセージ続いてたろ?
337デフォルトの名無しさん
垢版 |
2008/01/07(月) 01:23:00
>>335です。
実行できなかったのは、ソースファイルの打ち間違いでした。すいません。
しかし、>>335に書いたエラーが出てから実行されます。

>>336
すいません。VMwarePlayerでLinuxを使っていて、
それではネットにつなげるように設定していなかったので
コピペできませんでした。

ALSA lib confmisc.c:769:(parse_card) cannot find card ''
ALSA lib conf.c:3510:(_snd_config_evaluate) function snd_func_card_driver returned error: No such device
ALSA lib confmisc.c:392:(snd_func_concat) error evaluating strings
ALSA lib conf.c:3510:(_snd_config_evaluate) function snd_func_concat returned error: No such device
ALSA lib confmisc.c:1251:(snd_func_refer) error evaluating name
ALSA lib conf.c:3510:(_snd_config_evaluate) function snd_func_refer returned error: No such device
ALSA lib conf.c:3982:(snd_config_expand) Evaluate error: No such device
ALSA lib pcm.c:2144:(snd_pcm_open_noupdate) Unknown PCM default

これが出てたエラーです。
2008/01/17(木) 00:25:47
マルチプラットフォームなこのライブラリですが
多少の手直し程度の移植可能(なように作れる)プラットフォームは
どれとどれでしょうか?
2008/01/17(木) 01:02:45
>>337
サウンドデバイスが見つからないと言っている

>>338
Linux, Windows, Windows CE, BeOS, MacOS, Mac OS X, FreeBSD, NetBSD, OpenBSD, BSD/OS, Solaris, IRIX, and QNX.
2008/03/03(月) 05:22:10
SDL_ttfについて質問です
TTF_RenderText_Solid等をして返ったサーフェースは自分でSDL_FreeSurfaceで開放しなくてはいけませんか?
2008/03/03(月) 13:55:39
>>340
開放しなくてはいけませんか?(Y/yes)
2008/03/03(月) 22:14:36
>>340
開放しなくても、プログラムが止まることは無いでしょう(多分)
なので開放しなくても大丈夫です
2008/03/04(火) 02:12:30
毎フレームフォントをラスタライズするようなアホプログラムなら直ぐに止まりそうだけどね…
2008/03/08(土) 18:26:01
>>340
毎フレームフォントをラスタライズかつ開放しないアホプログラムを実行してタスクマネージャのメモリの項を見ましょう

つかやっぱり毎回作っては開放してって重いのかな('A`)
2008/03/08(土) 18:40:37
サーフェスに文字を詰め込んでいって
毎フレーム自分でレイアウトして描画するようにしたほうがいい気がする
ちょっと面倒だけど作ってしまえば更新頻度とか気にせず使える
2008/03/08(土) 18:45:07
>>344
毎フレームってことなら当然糞重いでしょ。
サイズにもよるが、メモリの確保&解放だけで結構なボトルネックになるとみた。
既存サーフェスに描画してくれる機能ってあったっけ?
347デフォルトの名無しさん
垢版 |
2008/03/15(土) 21:48:06
sage
348デフォルトの名無しさん
垢版 |
2008/04/11(金) 00:41:48
あげ
349デフォルトの名無しさん
垢版 |
2008/06/14(土) 07:06:13
320x224の解像度でフルスクリーンにすると画面が90度回転してしまうんですが、
解像度は変えないか320x240でこれを発生させない解決方法ってないでしょうか?
2008/06/15(日) 03:38:37
>>349
環境くらい書いたら?
2008/06/15(日) 10:22:11
すっかり忘れました。ごめんなさい。

ハードはThinkPad X60s
Win XP + Mingw GCC + SDLソースインスコ
です。
2008/06/15(日) 13:31:05
PCEngineのエミュレータでも作ってるのかね
353デフォルトの名無しさん
垢版 |
2008/06/22(日) 08:59:52
先生!こんなのありましたけど、昔ながらの行番号BASICからSDLが使えるんですか?

SDL_basic
http://www.libsdl.org/applications.php?match_id=1905
354デフォルトの名無しさん
垢版 |
2008/06/26(木) 22:43:48
解像度を640*480にする
355デフォルトの名無しさん
垢版 |
2008/09/06(土) 21:21:37
保守
356デフォルトの名無しさん
垢版 |
2008/10/21(火) 21:28:12
保守
2008/10/22(水) 20:51:43
何か話題はあるのか?
2008/10/22(水) 21:41:45
ない
2008/10/23(木) 16:36:44
SDLとか糞やん
360デフォルトの名無しさん
垢版 |
2008/11/27(木) 02:21:48
人居ないな
361デフォルトの名無しさん
垢版 |
2008/11/28(金) 12:27:33
*nixでもWinでも動作するクロスプラットフォームなSTGを作り始めて数ヵ月。
お約束の、エンジンだけできて、ゲームができない状態に陥りますた!
2008/11/28(金) 16:06:52
エンジンができたのなら次はゲーム作ればいいじゃない
ライブラリばかりに気を取られるお約束が悪いのではなくて
途中で投げ出す方の「お約束」が悪いんでしょう
2008/11/28(金) 16:39:18
手さえ止めなきゃ、時期や品質はどうあれ
いずれは何かが出来上がるものな。
364361
垢版 |
2008/11/28(金) 23:07:17
しょーがないから作った

やる夫STG
http://www.uploader.jp/dl/sample/sample_uljp00781.zip.html
(yaruostg-winの中にある「やる夫STG.bat」が起動スクリプトになってる。)
2008/11/28(金) 23:26:11
yaruoshoot.xml でオブジェクトやステージや画面やらを全部を定義してるんだね
2008/11/28(金) 23:49:31
>>365
そうだよ。
そのまま別のSTGのエンジンとしても使えるすぐれものだ。
2008/11/29(土) 01:07:27
かっこいいなぁ。5回当たると死亡?ソース見て勉強したい・・・
368自称365
垢版 |
2008/11/29(土) 01:39:53
>>367
一応、ライフは10。敵との接触や敵弾のダメージは1に設定してあるつもり。

ソースはまだ公開する準備できてない。

ちなみに
[F]でフルスクリーン切替え、
[V]で3-way弾を追加発射、
[M]で内部モニター起動 (文字は白いので見えない) (たまに起動しない)

最後まで行っても特に何もないのは仕様。
っていうか、やる夫の当たり判定が大きすぎて最後まで行けない。
2008/11/29(土) 04:13:12
モナーがいっぱいでてくるところまでいけたけど難しいね!
370デフォルトの名無しさん
垢版 |
2008/11/29(土) 05:15:41


ソースクレ警報発令!


367 名前:デフォルトの名無しさん 投稿日:2008/11/29(土) 01:07:27
かっこいいなぁ。5回当たると死亡?ソース見て勉強したい・・・


ソースクレ警報発令!


367 名前:デフォルトの名無しさん 投稿日:2008/11/29(土) 01:07:27
かっこいいなぁ。5回当たると死亡?ソース見て勉強したい・・・


ソースクレ警報発令!


367 名前:デフォルトの名無しさん 投稿日:2008/11/29(土) 01:07:27
かっこいいなぁ。5回当たると死亡?ソース見て勉強したい・・・


ソースクレ警報発令!



2008/11/29(土) 09:36:41
シンプルだけどちゃんとゲームになってるから
俺もソース見て勉強したいお
2008/11/29(土) 12:17:51
スピード速すぎて操作できん…
速度切り替えつけんと無理
2008/11/29(土) 13:37:56
>>372
FPS33を保つために、
フルスクリーン切替えや過負荷によってコマ落ちが発生した場合、
一時的にFPS33を越えて遅れた分を取り戻そうとします……とか
2008/11/29(土) 13:54:49
ああ、えっと何が言いたいかというと、
スピードが速すぎると感じた場合は、
しばらく放置すると改善する場合があります。ってこと。
2008/11/29(土) 15:39:20
diablo2とかそんな感じだね
今の主流とは外れてるけど
376デフォルトの名無しさん
垢版 |
2008/12/16(火) 23:59:49
SDLはVisualStudio2008には対応してないんでしょうか?
ダウンロードには2005しかないんで。

使うなら、2005をインストしないとだめ?
2008/12/17(水) 01:13:21
>>376
だめな理由もないと思うが…
気になるならソースからコンパイルして使えlば?
378デフォルトの名無しさん
垢版 |
2008/12/17(水) 20:53:25
>>377

了解です。ありがとうございました。
379デフォルトの名無しさん
垢版 |
2009/02/01(日) 17:39:14
あげておくか
380デフォルトの名無しさん
垢版 |
2009/02/08(日) 19:38:23
SDL_SetDisplayMode関数を複数実行して
フルスクリーンとかOpenGL切り替えをしようと考えてるんですが

SDL_SetDisplayMode関数を実行する毎に
前のSDL_SetDisplayModeで確保したSDL_Screanって
Freeしなくても大丈夫ですか?
2009/02/08(日) 22:09:31
freeしとかんといかんとおもう
2009/02/10(火) 08:26:41
>>380
SDL_SetDisplayModeっての戻り値ってintだろ…
SDL_SetVideoMode() の戻り値なら SDL_Quit() で開放されることに
なってるので開放すべきではないということになってたはず
2009/02/23(月) 20:30:54
いくつかの画像フォーマットと描画速度(読み込み速度ではない)の関係を調べていたのですが、
gifが最速という結果が出ました。
ただ、予想に反してgifがbmpよりも速かったことに戸惑いを感じています。
みなさんの環境でもgifの表示はbmpよりも高速でしょうか?


===ここから詳細===
SDL/SDL_imageによる画像の描画速度に関してですが、
私の環境では、速い順に gif > bmp(32bit ARGB) > jpg >> png の順になり、gifが最速でした。
gifはjpgより2倍速く、pngはjpgより2倍遅いという結果になりました。
ただし、gifの場合、α値がうまく反映されず、半透明部分が半透明になりませんでした。
(しかし、完全に透明な部分は問題なく表示されませんでした。)
bmpは24bit/16bitRGBに変更しても描画速度に大した変化が見られませんでした。
環境はOpenSUSE11.1/SDL1.2/SDL_image1.2、グラフィックカードはオンボードです。
画像はGIMPを用いて作成しました。
2009/02/23(月) 20:44:03
ヒント:gifは8bit
2009/02/23(月) 21:04:42
>>383
元の画像のフォーマットが何かということを考えるよりも
- ロードして出来上がったSDL_Surface のフォーマット(depthとかビットマスクとか)がどんなものか
- 転送先のSDL_Surface のフォーマットがどんなものか
が問題なのでは?
SDLやSDL_Imageでロードしてできる SDL_Surface は大抵の場合
画像ファイルのフォーマットに近いもにになるんでつまり>>384ってことじゃない?

#スクリーンに描画してるなら SDL_DisplayFormat() するといいかも
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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