SDL=Simple DirectMedia Layerでゲームだ
■ このスレッドは過去ログ倉庫に格納されています
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しなくても大丈夫ですか? >>380
SDL_SetDisplayModeっての戻り値ってintだろ…
SDL_SetVideoMode() の戻り値なら SDL_Quit() で開放されることに
なってるので開放すべきではないということになってたはず いくつかの画像フォーマットと描画速度(読み込み速度ではない)の関係を調べていたのですが、
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を用いて作成しました。 >>383
元の画像のフォーマットが何かということを考えるよりも
- ロードして出来上がったSDL_Surface のフォーマット(depthとかビットマスクとか)がどんなものか
- 転送先のSDL_Surface のフォーマットがどんなものか
が問題なのでは?
SDLやSDL_Imageでロードしてできる SDL_Surface は大抵の場合
画像ファイルのフォーマットに近いもにになるんでつまり>>384ってことじゃない?
#スクリーンに描画してるなら SDL_DisplayFormat() するといいかも >>384-385
確かに、SDL_DisplayFormatで変換したところ、描画が高速になりました。
内部フォーマットが描画速度に大きな影響を与えるんですね。
なんだかすっきりしました。ありがとうございます。 普段 Perl を使ってるので
SDL_perlモジュールで SDL を使って
ゲームを作ってみようかと思うのですが
perldoc では情報が少なくてイマイチ使い方がわかりません
何か参考になる良さげなものは無いのでしょうか?
http://sdl.perl.org/
当然チュートリアルは読んでいるものとして
それでも分からないならCか何か他の言語で使い方だけ理解すれば >>388
ありがとうございます。
C での使い方をきちんと理解してから SDL_perl を使おうと思います。 SDL_mixerの音楽再生について、ひとつ質問させてください。
SDL_mixerを使ってogg形式のBGMを演奏しようとしているのですが
曲の演奏時に、定常的なノイズが入ってしまいます。
(特にループ再生の2回目以降で、大きなノイズがかかります)
これを回避できる方法はないでしょうか?
再生環境は以下の通りです。
・Windows XP
・Ruby 1.8.7 + Ruby/SDL 2.1.0を使用
・SDL_mixer 1.2.9
・open時のパラメータは44.1kHz、S16SYS、2ch、1KB-chunk
また、曲を入れ替えながら試してみたところ、以下のような傾向があるようです。
・ファイルサイズが大きい(曲が長い&音質が良い)とノイズが入りやすい
・open時の周波数を上げる(たとえば88.2kHzにする)とノイズが減る すみません、SDLのバージョンを書き忘れていました。SDL 1.2.13です。 そのノイズって、プチッ・・プチッ・・と音が乗るノイズのことか? 表現しづらいですが、プチッ・・・というよりは
ザザザザ・・・という風な感じです
音が鳴るのに合わせてザザザザ・・・というノイズが重なっているような
ノイズの再現用に、oggを再生するだけの小さなプログラムを作ろうとしたのですが
そちらのプログラムでは何度やってもノイズが乗りませんでした。謎だ。
(同じ音楽ファイル・パラメータを使いました)
ひとまず、もう少し自力で原因を探ってみようと思います。
もし「これが原因じゃない?」と思い当たる節のある方がおられましたら
助言をいただけると幸いです。 多分バッファアンダーランだと思うんだが
ザザザ・・・だったらより深刻だな いま原因を検証しているのですが
どうも音楽の音量変更に何かがあるらしい、というところまで分かってきました
音量変更がなければ綺麗に再生されます 音量が128(最大)であればノイズは入らず
それ以外の値であれば常に入るようです(64, 127などで確認) 自動焼人 ★ = 自動保守 ◆KAWORUKOFI = 自動保守#K9K?_D[L
名言集 その3
『いつもサボってばかりのキャップがウゼえ』
http://yutori7.2ch.net/test/read.cgi/news4vip/1249830540/ ID:PVAf+dux0 = 自動焼人 ★
> 71 :以下、名無しにかわりましてVIPがお送りします [sage] :2009/08/10(月) 00:58:57.28 ID:PVAf+dux0
> >>69
> 大変って言うか
> 毎日、報告されたのを見て、判断して、処理して、完了報告して、以下ループ。
> ちょっとでもミスすると、普段は作業もしてないキャップさんたちがさんざん文句言ってきて
> その言いわけを考えないと、キャップはく奪されたりアカウント凍結されたりするから
>
> 登録されてから一年以上経って、やっといいたいこと言えるようになってきたよ。
----------------------------------------------
この自動焼人 ★メールマガジンの配信停止をご希望される方は
http://qb5.2ch.net/test/read.cgi/sec2chd/1250169591/
にて自動焼人 ★までご連絡ください SDL_ttfでDroidフォント(Androidのフォント)が
表示できないのはなぜでしょう?
これは仕方の無いことなのでしょうか?
Apacheライセンスで、全世界のフォントが含まれているらしいので
便利なんですが・・・ どのフォント使っているの
とりあえず日本語使いたかったら
MD5 4caeadd734f4be9973163bdf02ea6cf5 DroidSansFallback.ttf
これ使っとけば 今の日本語入力方法ってどうなっているのでしょう・・・? ここにまとめてあった表拝借
http://www.nbrains.net/php/pukiwiki/index.php?link%BD%B8%2FSDL
SDLSKK ・・・ OSのIME使ってない
SDL-IM(Input Method support in SDL) / SDL_imm ・・・ 古くて使えない
SDL_inputmethod -> 後継 SDL_textmanager ・・・ 中途半端というか未完成
SDL 1.3 内蔵されるが開発中
という認識で良いんでしょうか? SDL_ttf.libリンク
SDL_ttf.hインクルード
なんで_TTF_FONTが認識できない型エラーになるんですか><
教えてください TTF_Font -> TTF_Font*に修正したら解決しました SDLの2D機能とOpenGLを同時に使用する事は可能ですか?
例えば、SDLの描画機能でサーフェスの一部にbmpで描画し、
OpenGLでポリゴンも同時に描画し、ダブルバッファを切り替えると
bmpとポリゴンが両方表示される。の様な感じです。
OpenGLの2D機能を使えと言うのは無しで。
あれはゲロ吐く程遅いので。
ゲロ吐くほど遅いものを
うんこ出るほど遅いものと一緒に使用しようとするのは何故なんだろうな? 速度を重視するなら,3Dの特殊な場合と考えて,OpenGLで板ポリとして作るべきだな あれ、そんなことはない……どころか新たな書き込みがあった。ごめん。 今回のF5祭りで一部の専ブラが全スレdat落ちと誤認したようだぞ
新たな書き込みがあれば復活するらしい やっとinputmethodが実装されたらしい。
http://hg.libsdl.org/SDL-gsoc2010_IME/rev/863ba7d1f029
誰か試してみましたか?まだ終わってないのかな。
さて、1.3はいつ出るのでしょうね。 SDLの描画って重いってよく聞くけど重い?
Windows版だとDirectXを内部で使ったりしてるって聞いたけど
各プラットフォーム毎で高速に描画できるようにチューンされてる感じ?
SDLはイベントとサウンドに使って描画はOpenGL使うケースを多く見たんだけど >>415
昔は結構遅かったが、最近はDirectXやMMX/SSEを使ったりもしてるので
結構速くなってるんじゃないかな。
ペナルティが無いわけではないけどね。
OSX版が異様に遅かったが解消されたのかな。 ■ このスレッドは過去ログ倉庫に格納されています