SDL=Simple DirectMedia Layerでゲームだ
■ このスレッドは過去ログ倉庫に格納されています
なんかSDL 1.3色々変わってるね。
個人的にはSDL rendering APIの変更が結構影響大きかった。 SDL 1.2 だけど、
Mac で SDL Application テンプレートで作った時、
メニューを作ってくれる割に Command+Q(終了)とかが効かないんだけど、
自分で実装しないといけないの?
Command+Q はともかく Command+H(隠す)とか Command+M(最小化)とか
Cocoaよく知らないからめどいし
Macかどうかで処理の分岐が必要になるのが嫌なんだけど仕方ないのかね >>482
SDL が使われる主要な目的を考えると、Command+H 等が勝手にメニュー処理に
取られちゃったら困るんじゃない?
それらの処理を自分で実装するのはそれほど難しくないと思われ。
mac.m みたいなファイルを作って Mac OS X 専用のルーチンをまとめておけば
ソースコード上もスッキリするんじゃないかな。 >>479
そのソフトウェアスタックを見ると、Zen of Palm はまだ生きてるんだなあ >>483
確かにフルスクリーンでも効いちゃったら困るとかありそうなので自前で実装した
なるべく#ifdef使いたくなかったけどこれは仕方ないね・・・ Command+Qで終了するのを自前で実装したけど、
終了直前にビープ音らしき音が鳴るのが気になる。
SDLのイベントでキー判定しているのがまずいのだろうか…
>>487
無効なキー入力をしたときに鳴る音と同じ音が鳴るんだよね。
たとえばアプリ実行中にCommand+Aなどの無効なキーを入力するとビープ音(うちだとFunk)が鳴るんだけど、
その音が鳴りながらアプリが終了する(のでビープ音も途中までしか鳴らない)。
具体的には以下のコードみたいに終了イベントやキーを受け取ってメインループを終わらせてる。
もっとちゃんとショートカットキーを実装する方法があるのかな。
SDL_Event event;
while (SDL_PollEvent(&event)) {
if (event.type == SDL_QUIT ||
event.type == SDL_WINDOWEVENT && event.window.event == SDL_WINDOWEVENT_CLOSE ||
event.type == SDL_KEYDOWN && event.key.keysym.sym == SDLK_q && (event.key.keysym.mod == KMOD_LGUI || event.key.keysym.mod == KMOD_RGUI)) {
done_ = true; // メインループを抜けさせる
}
}
俺はCommand+Qで終わる時は
SDL_QuitEvent event = { SDL_QUIT };
SDL_PushEvent((SDL_Event*)&event);
って終了イベント投げてるけど
そもそも無効なキー入力で音が鳴るという現象がうちは無いんだよな・・・
どんなキーでも押せば全部SDL_KEYDOWNに流れてくるので
有効無効とかがそもそもない気がする >>489
短いテストコードを書いてSDL 1.3、SDL 1.2のそれぞれhg先端を使ってコンパイルしてみた。
Command(RMATAまたはLMETA)+Q を押すと0.5秒待った後アプリ終了。
0.5秒待つのは音が鳴るのを確認するため。
http://ideone.com/TiLg8
SDL 1.2 … Command+Qなどを押しても音が鳴らない。
SDL 1.3 … Command+Qなどを押すとビープ音が鳴る。
ということで今のところ「SDL 1.3を使う」が原因っぽい。
対応は考え中だけど、深追いするとハマリそう… >>453
SDLのビルド手順が掲載されているサイトはありませんか?
教えていただければ幸いです。 環境によるだろ
ソース落としてREADME.fooとINSTALL読め
http://www.libsdl.org/download-1.2.php
特殊な環境でない限りソースからは入れないけどな
1.2.14をLinuxに試しに入れてみた、それ以外は知らん SDL_image を使ってpng画像を使えるようにしようと思って
gccを使ってコンパイルまでできたのですが、
実効しようとしたら以下のようなメッセージが表示されて実行できません。
libpng warning: Application was compiled with png.h from libpng-1.4.2
libpng warning: Application is running with png.c from libpng-1.2.43
libpng error: Incompatible libpng version in application and library
どういう意味なのでしょうか?
解決策を教えてください。お願いします libpng error: Incompatible libpng version in application and library >>494
アプリケーションとライブラリのlibpngのバージョンに互換性がない
と言うことですか? SDL_imageをコンパイルした時に使ったlibpngのバージョンと
実行するときに使おうとしてるlibpngのバージョンが違う 短い音だとやっぱMix_PlayChannelが終了する前に
Mix_ChannelFinishedで登録した関数がコールバックされる事とか、
もっと言えば終了とコールバックが同時実行されるとか、
何も対策しなければスレッドアンセーフな状況になるの? 2バイト文字と1バイト文字が混載しているテキストデーターから文字を1文字ずつ切りだして
SDL_ttfのTTF_GlyphMetrics()関数の第2引数に送って第7引数のトータルの文字幅を求めるコードが必要になったんだが
Unidodeに変換するためにiconvを使うとしたらどういう実装にすればいいかな? SDL.dllだけ1.3に差し替えたら
SDL_imageがセグメンテーションエラー起こしやがった・・・
imageも作りなおさないといけないのか・・・ >>500
逆になぜそのまま動くと思ったのか知りたい。 たぶん、全然別物だって知らなかったんでしょ。
1.2.14→1.3って番号だけ見ると互換性ありげだし。2.0とかにしちゃえばいいのにね。 英語ブログでオッサンが
1.3とsdl-imgeでvery fineみたいなこと言ってたから
とりあえずぶち込んでみたんだ
なんかjpegがビルド失敗するしあきらめるか SDL1.3期待したがmacの日本語入力ができないなぁ
自分で作るか・・・ SDL1.3もLGPLですか?
なんか商用ライセンスとか書いてあるような…… >>505
新しい方のページにzlibライセンスって書いてあるし、パッケージ本体にもそう書いてある。
1.2時代のページには1.3もLGPLとか書いてあって紛らわしいな。
とはいえ、sdl_imageとかsdl_mixerなんかzlibライセンスにならない限り、あんまり意味無いかも。 SDL 1.3は今年の4月頃にzlibライセンスへ移行したけど、
ウェブサイトの更新はちょうどライセンス切り替え直前あたりで止まってる模様(hgのsdlwebのログで確認)。
指摘すれば更新してくれるんじゃないかな。 SDLで簡単なアニメーション(とキー受付)をしたいのですが、そのプログラムで使う変数の値をどうやって入力しようか思案中です。
最悪の場合設定ファイルをテキスト形式で用意する案も考えていますが、もうすこしユーザーフレンドリーな入力方法としてwxWidgetsを使えないかと考えています。
wxWidgetsからSDLプログラムを走らせると速度が遅くなったりしますか?(というか、そんなことは可能ですか?)
他にもなにかお勧めの方法があったら教えてください。
>>510
あ・・・SDL-widgetsってのがあるのですね・・・。 次期バージョンのSDL_mixerでFluidSynthをサポートするみたいね SDLでEAXみたいな3Dサウンドって出来ないんでしょうか SDL_mixer:
Mix_SetPosition
角度と距離を指定すると音の位置が変化する
Mix_RegisterEffect
効果音単体・出力直前のバッファを弄れるフック関数を登録する
chanがMIX_CHANNEL_POSTの時、streamにBGM・効果音合成済みの出力直前バッファが渡される
もちろん3Dな音響を適用するエフェクトは全て自作していく
Mix_SetPostMix
出力直前のバッファを弄れるフック関数を登録する
streamにBGM・効果音合成済みの出力直前バッファが渡される
こちらもエフェクトは全て自作していく
Mix_RegisterEffectと共存OK >>521
マジ便利だよ。それにどんなOSでも使えるから一生もんの技術だよ SDL_mixerとSDL_imageが全然動かない・・・
libogg.dll, libvorbis.dll, libvorbisfile.dllをビルドして置いても
MIX_INIT_OGG指定すると初期化に失敗するし、
libpng15.dllをビルドして置いても
IMG_INIT_PNG指定すると初期化に失敗するし、
もう訳分からん・・・ 画像に関してはBMPにすれば何とかなるかもしれないが
音楽は流石にWAVにするのはきつい・・・
どうにかならないものか >>524
何かエラーメッセージは無いの?
エラー発生直後にSDL_GetError()の戻り値は確認してる? おおう、要求されるDLL名が
デフォルトで作成されるものと違っていたようです
ありがとうございました ちょっと使ったことあるけど、
このライブラリ煩雑すぎじゃね
SDLをもう一段階ラップしないと使い物にならない 全員がそうではないけど、
そうしないと使えない人がいてもおかしくはない。
むしろラップして使うものだし
俺俺ライブラリ作るの楽しいです(^ρ^) MacのSnow LeopardでSDLをフルスクリーンにすると
画面真っ黒でOSに戻れなくなる件は治ったんだろうか… 独自の画像読み込みはどうすればいいですか?rawなんとか? あるピクセルが透過ピクセルかチェックする処理を作っています。
32bit(ARGB)surfaceの場合、A値が255かチェックすれば良いと思って
IMG_Loadで透過なしARGB(32bit)pngを読み込んでみたところ
surface->pixelsをみたらAが0x00になってました
透過なしなら0xffが正しいと思うんです
透過かどうかの判断材料は他にあるんでしょうか
SDLのバージョンはSDL 1.2.14、SDL_image 1.2.12です >>535
CreateSurfaceとかCreateSurfaceFromとか
>>536
SurfaceってAlpha使うかどうかのフラグ無かったっけ >>535
32bit RGBAの空サーフェス作って、それのpixelsにデコードしたのぶっこむ。
当然フォーマットはきちんと(8ビットづつ)RGBAの位置を設定してからサーフェス作ること。
ここまでちゃんとできたら、後はBlitSurfaceしてやりゃ自動でフォーマット変換やってくれるから、マシンやターゲットの色表示ビット数は考慮しないでいい。 >>536
とりあえず、png読んだ側のサーフェスのフォーマット見れ。
特にamaskとashift。 sdl.dllを自前で作りたいんだけどVisual C++ 2010 ExpressでSDLのビルドって出来ない? SDL 2.0.0のリリース候補版が出た模様。
Windows x86/x64とMac OS X intel向けバイナリも用意されている。 SDLのイベント処理の使い方がいまいちわからないんだけど、どういうふうに使うものなのかな?
今までDXライブラリを使ってきたけど、プレイヤーのキー操作は
必要になったときにだけ関数で取得してた。
だから、すべてのオブジェクトを1フレームに1回更新するって時にも
オブジェクトにとって必要になったときだけキー入力を取得して更新してた。
SDLのリファレンスのイベントの例だと、
『キー入力イベントが発生してたら、それが「→」キーかどうか判断して右に数ピクセル移動する』
みたいな感じだったけど、これは上記みたいに「すべてのオブジェクトを1フレームに1回更新したい」
時にはすごく相性が悪そう。(1ループ中にいろんな種類のイベントが複数回発生するから) >>545
SDL_JoystickGetButton とか SDL_GetKeyState (2.0からはSDL_GetKeyboardState) とかそのへんは?
自分の処理の仕方に合わせて好きな方使えばいいんじゃね SDLのSurfaceにOpenGLを描画してるんでねーの?
勉強に、使うか使わないか分からないDirectXみたいな複雑なものなんて触りたくない SDL2のサンプルって大体SDL_Texture使ってるけどSDL_Surfaceのほうが使いやすいな 子供の頃にゲームを作りたいって思っても、年取るとゲームを作ろうって気力が無くなるな 小さいものでも作ってみて、「ああ、楽しいな」って思えればいいんだけどな。
自己効力感というか。
まあ、気力のでない理由なんて人それぞれだとは思うけど、
こういうスレ覗いてるなら誰しも作りたい気持ちはあるはずだし、
やる気のでないことも誰しもあると思うんで、負けないでほしいよね。
スレチの上に長文だね。すまんね。 努力によって獲られるものが、あまりにも小さく需要がない >>559
ゲームって子供しかしないからだと思う
ゲームってプレイするために作られるけど
自分が大人になってから作っても、友達とかもみんな大人になってるからゲームなんてしてくれないじゃん
情熱云々以前にそうした環境が要因だと思われ 自分の子供と遊べばいいんだよ・・・・・・(遠い目) Androidゲームを意識するならSDLで作っておいた方が潰しが利きますか? 細々と生き残るんじゃないの。
今までと変わりなく。 マウスホイールの情報ってmouse.hでは扱えないんですか? SDL_GetMouseState(&x, &y) & SDL_BUTTON(SDL_BUTTON_WHEELUP)みたいな
でも普通にマウスイベントじゃだめなの? >>576
http://hg.libsdl.org/SDL/file/default/include/SDL_mouse.h
SDL_BUTTON_WHEELUPがなくなってますよ。
マウスだけならSDL_mouse.hの方が楽だと思ったんですけど、ホイールが扱えないならやっぱりEventでやるべきですね。 それにGetMouseStateだとホイールは拾い損ねるので 現在画面に表示されてるのが透けて見えるように、半透明で塗りつぶしたいんですけど、
SDL_RenderClearやSDL_RenderFillRectでやると半透明になりませんでした。
どうやればいいんでしょうか? そりゃ半透明にならないのは当たり前じゃないか。
何が不思議なの? ■ このスレッドは過去ログ倉庫に格納されています