SDL=Simple DirectMedia Layerでゲームだ
■ このスレッドは過去ログ倉庫に格納されています
たった今解決しました。(汗
公式サイトの
ttp://www.libsdl.org/release/SDL-1.2.11-1.i386.rpm
をインストールしなおしたあとで動くようになりました。
ただ、SDL_mixerのconfigure時にsdl-configのパスが間違っていたっぽかったので
そっちだったのかもしれません(それでもconfigureは通るんですよね)。
x) /usr/local/bin/sdl-config
o) /usr/bin/sdl-config
結局具体的に何がどうだったのかいまいち不明です。
なんだか参考にならなそうですみません。
>>279さんの書き込み見る前にニアミスで解決しちゃったんで、ありがとうございます、ではないですけど・・・おさわがせしました〜。
いちおう書いておくと、SDL_mixerのmixer.cの SDL_OpenAudio のとこ(300行付近)↓
で止まってました。
/* Accept nearly any audio format */
if ( SDL_OpenAudio(&desired, &mixer) < 0 ) {
return(-1);
}
日本で、これを使ってゲームを販売している会社はあるの? どっかの企業が作ったライブラリが原型じゃないっけ?
ってことはその原型のライブラリは
その企業では一応使われてたんでないかと ものすごく恥ずかしい質問かもしれないけど・・・
ウィンドウタイトルに日本語は使えないの? >>291
少なくともWindowsでは使えない。
文字列をutf-8に変更した時からみたいだね。
バグ報告は出ているけど、いつ直ることやら。
って思ったら、とりあえずパッチが上がってた。
古いバージョンを使うか、バグ報告どおりに自分で直すと良いかと。
ttp://bugzilla.libsdl.org/show_bug.cgi?id=365 便乗して恥ずかしい質問してみるけど、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;
} ev.key.keysym.mod & KMOD_ALT 泣いた
サンクスコ
それだとうまくいきました
ビットごとに違うフラグあるんだから全体を==で比較しちゃ駄目ですね SDL_ttfのこの辺って戻り値が参照渡しだけど、もしかしてこの関数内でサーフェス用に確保されたメモリってほったらかしだと解放されないで、新しく確保した領域にポインタが更新されるだけ?
ループの中でテキスト生成させてたら、秒速1MBでメモリ増えてくんだけど(;'A`)
>SDL_Surface *TTF_RenderUTF8_Solid(TTF_Font *font, const char *text, SDL_Color fg) >>297
SDL_ttfの戻り値は自分で開放するもんだ.
ってかループ中に使うものじゃない. さてこれからC++とSDLで勉強しようと思う俺様が通りますよ
SDL1.2.12になってからVisualC++ 2005 EE SP1でコンパイルしても実行出来なくなったんですが
原因が分かる方居ますか? 1.2.12いれたら -ansiオプションで警告出たのでなんだろと思ったら
SDL/begin_code.hの93,94行目のコメントがC++形式だった
>>303
ほんとだw
svn見てみたらそっちは直ってたよ >>306
さよなら。いってらっしゃい。
↓続きをドゾ SDL使ってゲームを作り始めました。ここで質問なんですが、
SDL_GetKeyState()はゲームのメインループ1回に1度呼び出すのと、
SDL_PollEvent()でSDL_KeyboardEventを拾った時に呼ぶのとどっちがいいんでしょう?
前者では常にそのタイミングでスキャンでき、
後者ではOSがイベントを中継する分だけ(処理落ちが激しいときなどでは)反応が遅れる可能性があるが
キーボードに触れられなければSDL_GetKeyState()が呼ばれないためその分軽い(1msも掛からないと思うけど・・・
ということじゃないかと考えているのですけど、一般的にはどちらが使われる、とかありますか?
あと、SDL_PollEvent()でイベントが何もきていないときにゲームメインループを進めているのですが、
ウィンドウのタイトルバーを右クリックしてポップアップメニューが表示されている間や、
タイトルバーをドラッグしてウィンドウが動いている間などはゲームメインループが進みません。
こういった状態でもゲームメインループをまわすにはどうしたらいいですか?
(Windowsでの話です。) >>308
普通は毎フレーム呼ぶんじゃないかな?
ソース読めばわかるけど SDL_GetKeyState() は実はポインタを返すだけの処理だから
どっちでも大差ないだろうけど.最適化を考えるなら1フレームあたり1回しか
呼ばれない低負荷の関数コールを削ることを考えるよりもどこがボトルネックに
なっているか調べてほかに重い場所を探したらいいと思うよ?
# 実は最初に一回呼んでポインタを保存しておいてループ内ではそれを参照するとかでも
# 動く気がするけどその動作が保証されてるわけじゃないから…まぁ適当にやってくれ >>309
ありがとうございました。ポインタを返すだけだったのか! SDL 1.3の新機能についてRyanさんが書いてる。
ttp://icculus.org/cgi-bin/finger/finger.pl?user=icculus&date=2007-10-07§ion=sdl13
ついにマルチウィンドウが来ますな。
過去互換性も整理する方向みたいね。
いつ頃投入予定なのかな?SDL1.3 マルチウィンドウ出来たら Gtk+ の代わりに使えるかな それはパーツの種類が少ないからムリだと思う。
SDLの上にウィジェット・ツールキットを構築するのはありだと思うけど。
RubyでSDLを弄り始めたんですが、これはスタンドアロン専用ですか?
CGIでは使えない? >>316
CGIと言うか、RubyとかWEBアプリ用と聞いたので、
当然ライブラリとかもWEB上で使えると思ったんだけど・・・ RubyがWEBアプリ用とかいう認識が根本的に間違ってることを理解してくれ
# まぁ向いてる分野ではあるけど > RubyとかWEBアプリ用と聞いたので、
違うよ。全然違うよ。
> 当然ライブラリとかもWEB上で使えると思ったんだけど・・・
なんで?WEB上ってどこで?
普通、クライアントサイドで動かす、SDLを
サーバーで動かす利点は何だろう?
SDLと関係ない話になりそうな流れだな……。
別にもうこれ以上掘り下げなくてよくね? Ruby/SDLで書いたゲームスクリプトを投稿すると
サーバの向こう側に常時待機しているおっさんがそれを遊んで
スコアを返すWebアプリを思いついた
アイデアの権利は放棄するからお前ら自由に実装していいぞ 複数のテキストを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をする場合は、同じように透過されないのでしょうか? >>325
ConvertSurfaceでできたSDL_Surfaceの pixel 値を
覗いてみて希望の状態になってるか見てみれ >>326
ありがとうございました、解決しました。
覗いてみたところ、透過したいところのαが0、表示したいところのαが255、と、
OpenGL側の透過値と全く反対で扱われていました。
gl側の混合処理で、GL_SRC_ALPHAからGL_ONE_MINUS_SRC_ALPHAにしたらうまくいきました。
解決のヒントを与えてくれてありがとうございました。 補助ライブラリを日本語で紹介してるサイトないですか? >>329
解説が必要なほど複雑なAPIないからなぁ… 325とは逆に作ったサーフェスに全く表示されないのを一晩悩んだ漏れが来ましたよ
FillRectで特定の値書き込んだ所や貼り付けた特定の画像上だけしか重ね貼りした画像表示しなくて、
真っ黒な0でのFillRectと並べてやっと気付いたorz
もう弄りすぎてソースが焼きそば並にぐちゃぐちゃだぜ cairoとの相性いいみたいですね
フォントとか画像ファイル関係はcairoで代用できそう 板違いだったらすいません。
ちょっと質問なんですが、Ruby/SDLを使用しようと思って、必要なものをインスコして、
プログラムを書き、コンパイルしたら、
ALSA lib confmisc.c:数字
ALSA lib conf.c:数字
ALSA lib pcm.c:数字
こういうものが多数出てきて、実行できませんでした。
環境は、Linuxのubuntu7.10を使っています。
SDLやRuby/SDLは元々入っていたものをパッケージャから入れました。
どうしたら実行できるでしょうか? こういうものが多数・・・と手書きするんじゃなくて
可能な限りをコピー&ペーストしなさい
数字の後にもエラーメッセージ続いてたろ? >>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
これが出てたエラーです。 マルチプラットフォームなこのライブラリですが
多少の手直し程度の移植可能(なように作れる)プラットフォームは
どれとどれでしょうか? >>337
サウンドデバイスが見つからないと言っている
>>338
Linux, Windows, Windows CE, BeOS, MacOS, Mac OS X, FreeBSD, NetBSD, OpenBSD, BSD/OS, Solaris, IRIX, and QNX. SDL_ttfについて質問です
TTF_RenderText_Solid等をして返ったサーフェースは自分でSDL_FreeSurfaceで開放しなくてはいけませんか? >>340
開放しなくてはいけませんか?(Y/yes) >>340
開放しなくても、プログラムが止まることは無いでしょう(多分)
なので開放しなくても大丈夫です 毎フレームフォントをラスタライズするようなアホプログラムなら直ぐに止まりそうだけどね… >>340
毎フレームフォントをラスタライズかつ開放しないアホプログラムを実行してタスクマネージャのメモリの項を見ましょう
つかやっぱり毎回作っては開放してって重いのかな('A`) サーフェスに文字を詰め込んでいって
毎フレーム自分でレイアウトして描画するようにしたほうがいい気がする
ちょっと面倒だけど作ってしまえば更新頻度とか気にせず使える >>344
毎フレームってことなら当然糞重いでしょ。
サイズにもよるが、メモリの確保&解放だけで結構なボトルネックになるとみた。
既存サーフェスに描画してくれる機能ってあったっけ? 320x224の解像度でフルスクリーンにすると画面が90度回転してしまうんですが、
解像度は変えないか320x240でこれを発生させない解決方法ってないでしょうか?
すっかり忘れました。ごめんなさい。
ハードはThinkPad X60s
Win XP + Mingw GCC + SDLソースインスコ
です。
先生!こんなのありましたけど、昔ながらの行番号BASICからSDLが使えるんですか?
SDL_basic
http://www.libsdl.org/applications.php?match_id=1905 *nixでもWinでも動作するクロスプラットフォームなSTGを作り始めて数ヵ月。
お約束の、エンジンだけできて、ゲームができない状態に陥りますた! エンジンができたのなら次はゲーム作ればいいじゃない
ライブラリばかりに気を取られるお約束が悪いのではなくて
途中で投げ出す方の「お約束」が悪いんでしょう 手さえ止めなきゃ、時期や品質はどうあれ
いずれは何かが出来上がるものな。 しょーがないから作った
やる夫STG
http://www.uploader.jp/dl/sample/sample_uljp00781.zip.html
(yaruostg-winの中にある「やる夫STG.bat」が起動スクリプトになってる。)
yaruoshoot.xml でオブジェクトやステージや画面やらを全部を定義してるんだね >>365
そうだよ。
そのまま別のSTGのエンジンとしても使えるすぐれものだ。 かっこいいなぁ。5回当たると死亡?ソース見て勉強したい・・・ >>367
一応、ライフは10。敵との接触や敵弾のダメージは1に設定してあるつもり。
ソースはまだ公開する準備できてない。
ちなみに
[F]でフルスクリーン切替え、
[V]で3-way弾を追加発射、
[M]で内部モニター起動 (文字は白いので見えない) (たまに起動しない)
最後まで行っても特に何もないのは仕様。
っていうか、やる夫の当たり判定が大きすぎて最後まで行けない。
モナーがいっぱいでてくるところまでいけたけど難しいね!
ソースクレ警報発令!
367 名前:デフォルトの名無しさん 投稿日:2008/11/29(土) 01:07:27
かっこいいなぁ。5回当たると死亡?ソース見て勉強したい・・・
ソースクレ警報発令!
367 名前:デフォルトの名無しさん 投稿日:2008/11/29(土) 01:07:27
かっこいいなぁ。5回当たると死亡?ソース見て勉強したい・・・
ソースクレ警報発令!
367 名前:デフォルトの名無しさん 投稿日:2008/11/29(土) 01:07:27
かっこいいなぁ。5回当たると死亡?ソース見て勉強したい・・・
ソースクレ警報発令!
シンプルだけどちゃんとゲームになってるから
俺もソース見て勉強したいお スピード速すぎて操作できん…
速度切り替えつけんと無理 >>372
FPS33を保つために、
フルスクリーン切替えや過負荷によってコマ落ちが発生した場合、
一時的にFPS33を越えて遅れた分を取り戻そうとします……とか ああ、えっと何が言いたいかというと、
スピードが速すぎると感じた場合は、
しばらく放置すると改善する場合があります。ってこと。 diablo2とかそんな感じだね
今の主流とは外れてるけど SDLはVisualStudio2008には対応してないんでしょうか?
ダウンロードには2005しかないんで。
使うなら、2005をインストしないとだめ? >>376
だめな理由もないと思うが…
気になるならソースからコンパイルして使えlば? SDL_SetDisplayMode関数を複数実行して
フルスクリーンとかOpenGL切り替えをしようと考えてるんですが
SDL_SetDisplayMode関数を実行する毎に
前のSDL_SetDisplayModeで確保したSDL_Screanって
Freeしなくても大丈夫ですか? ■ このスレッドは過去ログ倉庫に格納されています