1 :
login:Penguin :
01/11/11 17:59 ID:u0HMN7qC
2 :
名無しさん@お腹いっぱい。 :01/11/11 18:15 ID:jfiPYGos
恐らくこの板の住人のほとんどがWindowsオンリーのプログラマであるためか こういうものに見向きもされないね・・・。
いや、実はつい最近知って手を出してみようとは思っているのだが まだ何もやってないのでなんとも書けないのだ
5 :
名無しさん@お腹いっぱい。 :01/11/12 01:18 ID:DmTmPUJO
>3 そんなことないよ。
6 :
名無しさん@お腹いっぱい。 :01/11/12 01:57 ID:Owf81e9Y
うあ、結構簡単に作れるんだね。萌える。なにかやってみようかな
8 :
:01/11/12 18:59 ID:???
こういうものをうまく使ってマルチプラットホームのゲーム出そうなんて 奇特な国内メーカーいないかな
9 :
名無しさん@お腹いっぱい。 :01/11/12 19:20 ID:DmTmPUJO
前使ったときはアルファブレンディングのパフォーマンスが悪かったのですが 改善されたのでしょうか?ちなみにWindowsの話です。
えここでファイトの作者はこれ使ってたような… だからいろんな機種に対応できるのかな。
>>10 PS2のLinuxにも対応してたしなー。ま、そんなに速度は出なかったようだが。
12 :
名無しさん@お腹いっぱい。 :01/11/12 21:47 ID:kcOnH9jV
>>9 Win版のソース見たこと無いけどライブラリ内でDirectX使ってるんじゃないかな?
もしかしたら前使ったバージョンってのがソフトでやってたのかもしれないけど・・・。
SDLはDirectXが入ってる環境では自動的に使ってくれるらしい。 ソース見てないけど。
14 :
名無しさん@お腹いっぱい。 :01/11/13 10:53 ID:PbpUkqCT
15 :
名無しさん@お腹いっぱい。 :01/11/13 20:04 ID:ClbS1Bbe
グラフィックはOpenGLベースでジョイパッド対応やオーディオのみ SDLみたいな使い方を解説しているHPとかないでしょうか?
17 :
名無しさん@お腹いっぱい。 :01/11/14 22:16 ID:yJ3mZr76
>ヘッダとライブラリは必要。 開発環境にはってこと。 実行時にはDirectXを自動的に使ってくれる。
19 :
名無しさん@お腹いっぱい。 :01/11/18 08:00 ID:l+W9gEoZ
MacOS X / ProjectBuilderで使おうとしたら準備に3時間かかった。 変なディレクトリ構成でインストールしちゃったり、 SDL.hがフレームワークに入ってなかったり PBProjects.tar.gzの最新版が壊れて(?)たり 鬱だ、、、
20 :
:01/11/18 13:46 ID:???
Allegroのほうが使いやすいと思う。
21 :
名無しさん@お腹いっぱい。 :01/11/18 14:16 ID:uGlRUOgo
22 :
名無しさん@お腹いっぱい。 :01/11/21 02:04 ID:8gboFG9q
allegroをBCBで使ってる人っています? インストールの段階でつまづいて困ってるんですけど…
23 :
22 :01/11/21 23:16 ID:???
結局mingwに逃げちゃいました。 とりあえずインストールまで完了。
24 :
22 :01/11/23 10:39 ID:???
>>22 が使ってるVerおよび環境は?
ウチはver3.9.40 +Win2k でmakefile.bcc の記述ミスによる
コンパイルエラーを確認したが。
※出力を良く見たら、ソースのパスから\が抜けていたので、
エディタで行末以外の\を\\に置き換えてやったらうまくいった。
26 :
22 :01/11/24 21:25 ID:???
自分もver3.9.40+w2kです。 all3940.zipを解凍してfix.bat bcc32と実行するところまではOKなんですけど、 その後makeしようとすると「指定されたファイルが見つかりません」って出てしまいます。 \を\\で置き換えるのもやってみましたけど、同じでした。 mingwでインストールできちゃってるので、あんまり深くは追求しないことにします。 すいません。
27 :
25 :01/11/25 01:32 ID:???
後学の為にももう少し追及すべし!! …とは言わん。対応するコンパイラの多さもAllegroのウリだし。 ところで「指定されたファイルが見つかりません」等と下手に 翻訳するより、原文載せた方が原因判明しやすいと思うヨ。 何となく BCC32DIR のパス指定ミスとか、 GNU make じゃなくてBCC付属のmake使ってるとか、 必要なファイルの不足とかいった原因が思い浮かぶが、 実際のエラー文を見てみないと良くワカラン。
28 :
22 :01/11/25 02:13 ID:???
BCBは、f:\w2k\Borland\CBuilder5にインストールされてます。 BCC32DIRの設定は > set BCC32DIR=f:\w2k\Borland\CBuilder5 とやりました。 make しようとすると、 H:\temp\all3940\allegro>f:\w2k\mingw\bin\make.exe process_begin: CreateProcess((null), echo Compiling Allegro for BCC32, optimised . Please wait..., ...) failed. make (e=2): 指定されたファイルが見つかりません。 f:\w2k\mingw\bin\make.exe: *** [msg] Error 2 と出てしまいます。 もうちょっと調べてみます
29 :
25 :01/11/25 14:57 ID:???
30 :
22 :01/11/26 07:45 ID:???
うーん、上のmakeはcygwinのじゃなくてmingwのdos用のなんですよね。 cygwinのmakeを使うと copy: not found って出ます。 一応makeだけ落としなおしてみましたけど結局同じでしたんで、 今回はあきらめることにします。 どうもありがとうございました。
31 :
22 :01/11/26 07:45 ID:???
上のmake=28で使ったmake ってことです。
sage
33 :
名前は開発中のものです。 :01/12/23 23:10 ID:lg6LImo6
このスレ盛り上がらないね
最近はSDLを使いつつ、OpenGLで2D描画するのがはやってるらしいよ。
35 :
名前は開発中のものです。 :01/12/24 01:51 ID:L8voSXpA
うーん、まぁ Ruby/SDL とか見てみて思ったのが、 やっぱ型付けが強い言語がゲームとか複雑な実装には 向いているのかなぁと。 (Rubyとかは業務機関とか単純な実装に使うのがいいやね。)
36 :
名前は開発中のものです。 :01/12/24 02:08 ID:9LVHa4NS
Cマガの来月号に何か載るらしい
以前SDL+OpenGLは遅いと聞いたけど、改善されたん?
>>034
38 :
名前は開発中のものです。 :01/12/24 05:10 ID:ducal9m3
>>35 よろしければ具体的な理由(そう感じた決定打?)を教えてください。
Ruby/SDLのサンプル見た感じではそんなに悪い印象を感じませんでしたが、
Cとかの方が有利な点があればぜひ知りたいです。
SDLってGPLだかLGPL縛りじゃん。 感染しちゃうよ。ソース公開だとかどうしてるの?みんな
40 :
名無しさん@Emacs :01/12/24 09:56 ID:8rf6wve4
>>34 SDL_OPENGLBLITのことでしょうか?今でも遅いですよ。
SDL_OPENGLでハードウェア使える環境なら、少なくとも2Dでは充分な速さが出ます。
>>39 SDLはLGPLです。ソースは公開しなくても良いです。
ただ再リンクが可能なようにオブジェクトも配布しないといけないんだっけか?
ヘタレなので詳しくはわかりませぬ。調べて下され。
SDL_OPENGLBLITは気の迷いなので使うなってことになってるらしいよ。 OpenGL使うのは、Windows以外の2D描画でハードウェアアクセラレーションを 利用する手段が無いことじゃなかったかな。
42 :
名無しさん@Emacs :01/12/24 12:17 ID:8rf6wve4
重箱の隅つつきですけど。 Windowsの2Dで提供されているぐらいのハードウェアアクセラレー ションならSDLの各環境でも可能なら利用するように実装されてま すね。
43 :
名前は開発中のものです。 :01/12/24 13:54 ID:L8voSXpA
>>38 Ruby は Cよりはよっぽどいいんですけども、ただ、
JavaやC++は型が間違っていると実行前に気づかせて
くれるので、ゲームのようにテストのしづらいものを
作る場合は型づけが強いほうが楽かなー。と思ったん
ですけども。
44 :
名前は開発中のものです。 :01/12/24 23:08 ID:UrCj+faV
45 :
名前は開発中のものです。 :01/12/25 14:58 ID:fIdcRD6/
> 実際にRuby/SDLなりその他のバインディング(っていうんでしたっけ?)での > ゲームの実例があればもう少し話を広げられそうなんですが、 いろいろ考えてみたんですけど、まぁ、型づけが強くないとテスト しづらいっていうのは、もともとテストしづらい設計で、こ のまま作っていても、あんまりよくないっていうことを暗に 示しているのかなと思うようになりました。 型づけの強い言語でもそうだけど、型づけの弱い言語ならなおさら、 徹底した XP 張りのテストが必要になるなぁ、と。
46 :
名前は開発中のものです。 :01/12/27 05:06 ID:zYDgayx3
だんだんスレ違いなレスになってしまって申し訳ありません。
>>45 XPといってもRubyUnitをほんの少し触ったことしかありませんが、
単に型に注目するだけでしたら、引数の型が正しいかどうかを
確認するテストを各メソッド毎に用意する、みたいな。
C等のプロトタイプ(宣言?)をテストで補う感じでしょうか。
それとは別にゲーム…特にリアルタイム系のゲームにに特化した
テストがあると良いのかもしれませんね。
例えば入力機器(マウスとかジョイスティックとか)が吐き出すデータを
仮想的に生成して、それをリアルタイムにテストしていく…
なんか自分で書いてて良くわかりませんが。
47 :
名前は開発中のものです。 :01/12/27 14:35 ID:zrY5itRv
>>46 > 単に型に注目するだけでしたら、
つまりたとえば、シューティングゲーム作るときに、ステージの最期に
ボスシーンがあるわけですが、多分、多くのゲームプログラマは、
ステージの構成を Scene クラスとして、それを継承して BossScene クラス
みたいなものを作ると思うんですけども。
もし、間違えて Scene オブジェクトじゃなく int オブジェクトを
渡してしまっても、その間違いに気づくには、ボスシーンまで辿り
つかないといけないという、、、。ちょっと、これは、、、、うーん。
(まぁそれを未然に防ぐ手だてはいくつかあると思うんですけどもね。)
Ruby のような気軽に使われることを想定しているプログラミング言語
の場合は型なんて無いほうがメリットが多いので、それはそれでいいん
ですけども、ちょっと複雑なものになってしまったとき、Ruby じゃなく
C++ や Java の方がいいんじゃないかなと。
例外は method missing や type error で出ることが多いけど、 結局はロジックの間違いなんだよね、ほとんど。 Java の null pointer exception もしかり。 型があることで設計がしやすいケース以外では 型が無くて困ることはないなあ。特にユニットテストし始めてからは。 ただ、ゲームではまだ試してないからわからないけど。
つまり異なる型のオブジェクトを同一の変数にいれちゃうのが誤り。
そんなことしてないって言うんなら、バグの出る危険性は型なしでも強い型付けでも同じ。
まぁ、タイプミスやボケててで紛らわしい変数渡しちゃったりするのの防止には
なるかもね>強い型付け言語
経験的に
>>47 が言ってるようなバグで苦しんだことは無いぞ。
ゲームじゃない分野の話だけど。
>>47 Rubyは変数自体に型が無いだけで、変数が指すオブジェクト自体には
型があります。ですからそれを本チャン前にチェックするような手順を
踏めば、CやC++のコンパイル時の型チェックと似たようなことを行う
事は可能です。ただ、CやC++は言語仕様として型チェック機能
があって(っていっても良いの?)、RubyやPerl等には無いと。
コードを書く際に言語を選択する時、おそらくどのようにして開発していくのか
というのは予め考えられていると思うんですよ。なので、Perlで書くにしても
Javaで書くにしてもそれなりに作っていけるものだと思います。
ですので
>>47 さんがC++やJavaの方が良いという話は、
その方が「自分に向いている」ということと解釈しました。多分そうですよね?
強引にSDLがらみに話を持っていくと、Ruby/SDLのコード量を見て
Cで書いた場合より少ない、というのがとても好印象でした。ただ、Rubyの
優位性の話をしたいわけじゃなくて、同じ機能のコードを書くのであれば、
書く量が少ないほど不具合に対処しやすいのではないかと。
ちょっと強引でしたねsage。
ああ、書き損ない。
>>50 誤: Ruby/SDLのコード量を見て
正: Ruby/SDLのサンプルコードのコード量を見て
>>44 流し読みしたけど。見るだけでもう疲れちゃった( ´∀`)
53 :
名前は開発中のものです。 :01/12/30 05:45 ID:apMyMob6
SDL-1.2.3+cygwin で -mno-cygwin オプションをつけると undefined reference エラーがたくさんでるのですが cygwin で -mno-cygwin オプションって鬼門なんでしょうか?
54 :
53 :01/12/31 03:52 ID:???
解決しました。どうも。
原因はなんだったの?
56 :
名前は開発中のものです。 :02/01/02 01:49 ID:VzsaD8C7
schemeをゲームのスクリプトにしたことあるけど、 ゲームは乱数・ユーザー入力などの不確定要素の影響が大きい ↓ 単体テスト・自動テストが難しく、レアケースも多い ↓ 型付けが弱いと凡ミスの発見が遅れる っていうのはあったよ。 やっぱり型は合った方がいいけど、 まあ事前に相応の開発手法をちゃんと練っておけば 対処できない範囲内でもない、といったところかな。 生Cをつかうくらいなら圧倒的にRuby使った方がいいと思うけど。 C++と比べたらC++を採る。俺なら。
57 :
名前は開発中のものです。 :02/01/11 01:41 ID:f0gNm/Wm
>> 57 まさか Sam へのインタビュー付きとは思わなかった。
Ruby/SDL の本が出るみたいね。時期はわからんけど。
違うみたい。
66 :
名前は開発中のものです。 :02/01/28 12:59 ID:z3on8a9k
SDLゲームコンテストの入賞作品ってどうよ?
>>66 上位ランクの方から順に試そうとしたんだが、正直、げんなりした。
センスの違いとゆーか。
SDL_IMEとか誰か作ってくれないかなぁ? そのまえにSDLだと日本語表示が問題なんだっけ?
>SDL_IMEとか誰か作ってくれないかなぁ? おめーが作れよ。
71 :
名前は開発中のものです。 :02/02/23 06:33 ID:a2u9firL
SDLでイベント(キー入力)とシーンの描画を別のスレッドで処理すると ウインドウが停止してしまいました。 N64やGameCubeみたいにイベントとビデオを別のスレッドで動かすことは できないよう少しがっかりしています。WindowsではDirectInputで直に 取ってくるしかないのでしょうか。
>>071 SDL_SetEventFilter() 使ってメッセージをフックすれ。
フック後の処理を別スレッドしたいなら、フック関数内でスレッド生成すれ。
あとmutex忘れるなよ。
73 :
71 :02/02/23 20:17 ID:+rToCvhx
>>72 あ..なるほど...! この手法ならうまく書けそうですね。
72さんご助言大変参考になりました。ありがとうございます!
75 :
71 :02/02/26 07:13 ID:nHGqkL6j
>>74 数日かかりましたが、別スレッドでうまく動かせるようになりました。(^^;)
74=72?さんのおかげです。ありがとうございました。
ようやくスタートラインでゴールは遠いですが…。
これからはリファレンスじっくり見るように心がけます。
76 :
71=75 :02/02/26 11:35 ID:O5eBq1eX
何度もすみません…。できた、と思ったのですが、チェックしてみると SDL_SetEventFilter() のフィルタリングは SDL_PumpEvents() の直後 にしか発生しないようでした。私としては、PumpEvents とは非同期で イベントが発生したときに来ると思っていたのですが SDL_PumpEvents() で汲み取らないとフィルタリングも発生しないようです。 ある時点のマウスの状態をそのまま取得できれば良いのですが… そういう関数は無いですよね…。どうしたら良いのでしょうか…。 --- モニタ --- [VIDEO/CORE] ユニットイニシャライズ [CORE] 処理開始(インターバルタイム 25 ms) [CORE] フレーム 9 : マウス( 590, 242 ) [VIDEO] シーン描画開始(CondSignalを受けて) [CORE] フレーム 10 : マウス( 292, 466 ) :マウス位置の更新がフリーズ < フィルタリングが機能していない...? > [CORE] フレーム 22 : マウス( 292, 466 ) [VIDEO] シーン描画終了(SDL_PumpEvents 実行) [CORE] フレーム 23 : マウス( 148, 43 ) [CORE] フレーム 24 : マウス( 149, 21 ) [CORE] 終了リクエスト [VIDEO/CORE] シャットダウン
79 :
76 :02/02/27 02:06 ID:JQVw0zDd
すいません、何度も…。(^^;) GetMouseState は使っているのですが PumpEvents(またはPollEvent)を 呼ばないと、更新されないようで…。 えっと…、やりたいことは以下の通りなのですが(↓任天堂方式) イベントスレッド:イベントだけを処理 ビデオスレッド:必要なら描画 メインスレッド:イベント・描画に関係なく一定時間で起動(コマ落ち対策あり) SDLの制限ではビデオとイベントは分離できない仕様になっていて ビデオ処理→イベント処理を繰り返し一つのスレッドで行わないといけないようです。 状態を取得したくても PumpEvents() を置かないと読みとってくれないので(^^;) 非同期で割り込みでイベントを感知する手段がSDLになくて、イベントの入力が 画面の描画後でしか読みとってくれない(^^;)です。 ビデオの速いマシンでは問題ないのですが、遅いマシンでは入力まで遅くなって しまいます。(^^;) これって、イベントドリブン式の弱点…なんですよね…。 リアルタイムゲームをつくるとき、イベント直後に割り込みでフックしてくるか そのまま入力を読み取るパターンがないと困ると思うんですが、PumpEvents() (PollEvent) が前提になってるみたいで…。
80 :
名前は開発中のものです。 :02/03/09 01:07 ID:cjQ6leFr
IBMあげ www-6.ibm.com/jp/developerworks/linux/sdl/sdl.html
81 :
名前は開発中のものです。 :02/03/10 18:06 ID:149HiR+p
重複age
83 :
名前は開発中のものです。 :02/03/18 08:48 ID:5Rsci23c
age
84 :
taku :02/03/18 13:52 ID:???
ゲーム制作初心者が集まって、ゲーム制作をしたいと思ってます。 ゲーム作りに興味がある人は、メールをください♪ 思っているだけで、まったくゲーム制作をしたことがない人でも結構です♪ とりあえず、私も少しは、やっていますが、初心者なので、みんなで勉強をしながらゲームを作っていきたいと思ってます♪ 基本的に、web上でやる、フリーゲームで、ジャンルとしては、RPGを考えています。(いろいろなジャンルも作ろうと考えていますが・・・) それでは、とりあえず、メールをください♪
Web上でやるゲ-ムなのにSDLつかうのか?
86 :
名前は開発中のものです。 :02/04/14 11:55 ID:lp2DMwsU
age
87 :
名前は開発中のものです。 :02/04/14 11:56 ID:lp2DMwsU
使ってる人いないのかー?
居るよ!! 安心したかい?
スマソ。漏れソースをGPLにしたくないからAllegroを研究中。
90 :
87 :02/04/17 01:40 ID:B2sY58og
>>88 さんだけかよっ!
ちょっと覚えるために弄ってたら、
簡単にMODが再生出来てかなり感動したんだけど、
みんなは、これに魅力を感じないのかな?
91 :
名前は開発中のものです。 :02/04/17 09:04 ID:JVlCUCtA
>>90 お気楽だよね、SDL。
英語読むのたるいから、LinuxJapanの連載で情報収集してるけど、
周辺ライブラリも含めると、ほんと、楽。
Win用のソースをちょこっといじってLinuxで動いたときは
正直感動した。
>>89 SDLはLGPLだから、自分のソースをGPLにする必要ねーだろ。
DLLつかうか、リンク前のオブジェクトを一緒に配ればOKだ。
>>90 ライセンスの問題が把握できず躊躇している人が多いと思われ。
漏れもその一人だが。
>>91 SDL-MLの有志の方々がdocのja化を進めてます。
最近、SDLでデモ作るコーダーも少なからずいますね。
それらのアーカイブには、ソースついてないから、ソースはつけなくて・・・いいのかな?
でもパフォーマンス的にまだAllegroのほうが優れてんだよな、周辺ライブラリも・・・。所詮WINAPIもどき。
Allegroは日本語リソースが少ないのがアレなのかも。
95 :
89 :02/04/17 23:55 ID:???
ちうかAllegroはフォントが独自形式なのが最大のネック。 RPG等の文字情報の多いゲームが作りづらいっつーか作れん。 AllegroでTTFを扱う為のライブラリがあったはずなんだが、 今は影も形も無い…
1.2.4 stable released
Allegroの作者はコンシューマ系の人のようですね。 (ライブラリの設計見ただけで分かるけど(ワラ) その辺の好みで使い分けるのもいいかも風来のシレン。
98 :
名前は開発中のものです。 :02/04/24 06:39 ID:es9pDMEY
SDL はシンプルなのがいい。 Allegro はゴテゴテしすぎ。
えー、俺はAllegroのほうがシンプルだと思うにょ。
SDLのどこがシンプルなんだよ・・・(w
>>101 サウンドの再生。つーか、シンプルすぎてSDL_mixer使わんと、ちょっと...
103 :
名前は開発中のものです。 :02/05/02 03:43 ID:sX.bsevc
Allegroはグラフィックの描画では スプライン曲線、ポリゴン、スプライト、テキスト描画といったもの、 サウンドではネイティヴでのMIDI再生だとか、 場合によっては余分な機能が含まれている。 SDLではグラフィックの描画はFillとBlitのみ。 サウンドはPCMを垂れ流すだけ、みたいな。 これはシンプルだと思うけどなー。 ま、なんでも自分でやりたい俺みたいのは SDL が好きだ、 という話。 ライブラリ内部の話となると、SDL もシンプルじゃないけどね。
ま、結局SDL_mixerやSDL_imageは使ってるけどね。 こういうのが分離出来るようになっているほうが落ち着く。
>>101 DirectXと比較して(w
初代Direct3Dの初期化書いてみな。ゲイツ殺したくなるから。
微妙にほほえましいやり取りしてるな、キミら。
>>106 俺は二度と書きたくない。
何をどう初期化したのか後から見ても理解できんし。
初期化ごときに時間かけるのもアホらしい。
まあ、いまさら文句言うなや。マイクロソフトがCOMに狂ってた頃の遺産だからしょうがない。
SDLの魅力って何ですか?
>>103 別にAllegroでもFillとBlitのみ利用して、
スプラインとかポリゴンは自分でってのは可能だと思うが。
ライブラリに余分なバイナリが含まれているからって、
実行形式ファイルも太るわけではないし。
むしろSDLのように複数のライブラリを組合わせて使うという方式は、
無駄(コードの重複)が生じやすい。
112 :
名前は開発中のものです。 :02/05/03 11:52 ID:QXZFUo7o
気分の問題です。
113 :
名前は開発中のものです。 :02/05/03 18:22 ID:P7bmG2Tg
SDL初心者です. mingwを使っています. 実行ファイルが SDL.dllを必要としないように コンパイルすることは可能ですか?
ソースを公開せずにスタティックリンク?
それはライセンス違反ですにょ。
>>113 SDLはLGPLなのでソースを公開する、しないにかかわらず
DLLリンクで十分なはずです。
115 :
名前は開発中のものです。 :02/05/04 02:46 ID:IDR1uRSY
116 :
113 :02/05/04 02:50 ID:IDR1uRSY
あともうひとつ質問したいのです mingwでリソースもコンパイルして exeにいれますよね? SDLのAPIみたら 画像の読み込みは fileポインタ渡してたみたいなんです これはどういうことなんですか? あとexeに画像ファイルを埋め込むプログラムは Linuxに移植は容易にできるのでしょうか?
おいらはソース出してもらわないとよくわからないけど 実行ファイルに絵のファイルを結合してるだけなら、その実行ファイルと 絵の開始位置さえわかれば fileポインタで十分読み込めるのではないかと。 fp = fopen( ... ); fseek( fp, ... ); // 実行ファイルを開いて開始位置までシーク ReadPicture( FILE *fp, ... ) { fread( ... ); // いきなり読み込みでも開始位置まで来てるので問題ない } そこんところの仕組みがわからないけど、(WINネイティブな何かを使っているのか) 仕組み的には難しくなさそうですが…。 俺は素人なので偉い人タノム…。
118 :
名前は開発中のものです。 :02/05/04 11:29 ID:wX/OJnJI
Windowsリソース用の SDL_RWops を書けは行けるんじゃない?
119 :
113 :02/05/04 11:47 ID:IDR1uRSY
>>116 まだソース書いてないです
疑問に思ったもんで。
初心者でよくわからないのですが
fopenの引数はファイル名
だったと
>>118 見てみます
「書けば行けるんじゃない」
ということは
こんな風に普通はしないのですか?
画像はexeに入れないのでしょうか?
>>113 fileポインタって何の事を言っているのかちゃんと書けや、このボケが。
121 :
113 :02/05/04 12:52 ID:IDR1uRSY
>>120 char* filename
初心者でごめんなさい
画像が少なければ、const char hoge[] = { 0x00, ... };みたいな感じで画像を埋め込んでもいいだろうけど 数やサイズが結構あるなら実行ファイルと他データをまとめた データファイルに分けるほうがスマートだと思う。 SDLを使うとかに関わらず・・・。
123 :
113 :02/05/04 18:18 ID:???
商用向けソフトならBMPやWAVデータとか解析されないように、 小細工しながら固めるけど趣味でSDL使うんなら、 外部から生のファイルを読むようにオープンに作ってほしいね。
ファイルを1つにパックする理由は解析防止が主な理由ではなく、無駄にディスク容量を消費しないようにする為の工夫ですよ。
ゲームでbmpとか wavが見えたら 冷めるから 一個に固めたいです
>>126 俺は、wav見えても気にしないけど、そーゆー問題じゃないんだよね?
root権を使わせてもらってもいいなら、ext2フォーマットのファイル
システムイメージを配って、それをloopディバイスつかってmountして
読み込ませるってのも手だねぇ。もちろん、ローダの中で自動化して
しまえば、ユーザには(表立っては)見えない。
普通は、中身をtarファイルにしておいて、実行時に/tmpに展開ってのかな。
HDDの空き容量必要だけど。
>>127 なかなか難しいですね
レスありがとうございました
研究してみます
>>127 OSに依存しそうだな・・・せっかくのSDLやAllegroが・・・。
まあなんつーか がんばれやとしかいえんな。萎え。
>>126 データが見えて萎える? つまんねー奴だな。
データを簡単に交換出来れば色々改造出来て楽しいだろーが。
実行ファイルをトップディレクトリにおいて、データは別のディレクトリに入れておけば、 生でも気が付かないものだ。 というか、実際気が付かないことが多かった。
133 :
名前は開発中のものです。 :02/05/06 03:48 ID:1PpldsKY
bcc32でSDLを使おうと思ったのですが、 > bcc32 -tW -O2 -DWIN32 -c SDL_main.c しようとすると Must use C++ for STDCOMP.H というエラーが出てしまい、 だったらと今度は -P をつけると今度は $(bcc)\include\alloc.h 107: オーバーロード関数群の中の一つだけしか"C"にできない などと怒られてしまいます。 どうしたらいいのでしょうか?
mp3やmidiをmixer使って鳴らしたいが鳴らん。 どうしたら良いんだろう。
135 :
_ :02/05/06 09:05 ID:???
ageとく
136 :
名前は開発中のものです。 :02/05/06 18:16 ID:U532U/fU
SDL_mixerがmp3とmidiが再生できるようになっていない (無効にしてコンパイルされている)んじゃない?
SDLは糞コードでもカリカリ動くからおもろい。 サイキョーまんせー。
139 :
名前は開発中のものです。 :02/05/14 21:44 ID:x.mXxrcs
そういえば、SDLSKKなんてものが出てるんだね。 日本語入力に関しても解決の兆しが…?
バックバッファにアクセスするにはどうすれば…
142 :
名前は開発中のものです。 :02/06/28 01:18 ID:EdGR6DaM
age
, ‐ァ'⌒ヾヽ ァ'⌒-‐-、 {___{==O}}.}⌒ ⌒ー-::,,.}ユ、 ∧∧ r「-‐ヾ、ァ'´,::'´/ハヾ::、、ヽ、ノ < 2 ハ _,、_/:::/::::/ ノ }ノ \i} ト、 < g . /:..l`ト⌒ヾ.、::/⌒` ⌒`// .:ヽ. < e {:::::|::iヽ、 、 ){ァ'T.ヽ .ハヾ/ハ::::::::l < t ヾ、::l ヽ 'ヾ:l {__ツ {ツ.'{ノ .l:i::ツ. < ! ヾ ハ ,__ト, ''.'' (⌒ ツ::} レ'^ < ! 〉ニ,,_ノヽ` ー‐''´ヾシ' < ! l、 ノl/iニ)、ヾ、 <!! `} '´ 〈 〉^ツ ∨∨ / == `ー' 〉‐っ /、_...._ ヾ〉┘ 〈ー、 ,,..,, .``ヽ、... ,べヽ  ̄ ~`´iー`ヽ、_,,..=-、ハノ l | | l {,、,、,i, l,、,、| [ ェュソ[ ,ェ}_ F=ィ⌒ヽ =ィ'⌒ヽ [、_ノ⌒l_ノ⌒}
144 :
フォント使いたい :02/09/09 19:58 ID:bRdadYVo
Cygwin + SDL-1.2.4 + SDL_ttf-2.0.5 + freetype-2.1.2でTruetype Fontを使いたいのですが、 freetypeをインストールしたあと、SDL_ttfでリンクに失敗してしまいます。 コンパイルオプション等を付け加えなければいけないのでしょうか。 情報お持ちの方、よろしくお願いします。
ごく普通にコンパイルできたけどなあ。 エラーメッセージをコピペしてみてちょ。
147 :
超初心者 :02/10/10 03:49 ID:TCFGsPft
VC6.0にSDLをインストールする方法がわかりません!! 落としたファイルは"SDL-devel-1.2.5a-VC6.zip"です。 解凍後出来たサブディレクトリ"Include"と"lib"はVC6.0のどこに入れたらいいんでしょうか? また何か設定があるのでしたら是非教えてください!! お願いします!!
>>147 ツール->オプション の ディレクトリ を
選択して、インクルードファイルとライブラリ
ファイルの場所をそれぞれ指定すれば良い
のではなかろうか。よく知らんけど。
149 :
名前は開発中のものです。 :02/10/13 01:14 ID:7Mz0/fi+
1.2.5に DreamCast 対応?っぽい奇術があるんだけど、どうやってGD-ROMに するんでしょうか?
個人で使う分ににはRで十分では?
最新版出せや( ゚Д゚)ゴルァ!!
↑自己解決しました・・・ BCCで遊んでたときにWindowsフォルダにつっこんでたDLLが 呼ばれてたぽいでした。迂闊。
SDLとその周辺ライブラリは、機能が絞り込んであって、 開発者としては好きなものを組み合わせて作れる、 という大きなメリットになんですが、遊ぶ側としてはどうでしょう? 個々に集めるのは面倒ですし、同梱は若干無駄(場合によってはGPL違反)です。 別々のアーカイブにまとめて一緒に配布、というのが理想だと思いますが、 旧Verのdllを持ってるユーザーが、本体のみ落としてエラーに悩む、 といったバージョン管理の問題や、dll配布元へのリンクのみ掲載していた 場合のリンク切れ、といった問題もあります。 この辺、一度考えるべきだと思ったのですがどうでしょう。
>>154 スタティックライブラリにコンパイルすれば良いんでは?
>>155 ソース非公開のゲームとかに SDL をスタティックにリンクして配布
したら LGPL 違反になったりしない??
>>154 インストール時か初回実行時に DLL を自動ダウンロード。
んでリンク切れで騒ぐ厨房を生み出す、と。
ダウンロード先のリストをゲームの配布元が提供して随時更新すればいい。
>>154 Windows でバイナリを配布する場合の話だとして…
>同梱は若干無駄(場合によってはGPL違反)です。
同封してGPL違反ってのはどういう場合なんでしょうか??
俺は開発に使ったdllをゲームに同封するのが最善…っていうか
別配布は現実的じゃないと思ってるんだけど…
理由はバージョンよるAPIの非互換性だけじゃなくて各種dllをコンパイル
するときのオプションによっても使える機能(oggやmp3の再生は?とか)
が変るせいで,他サイトで配布しているdllが自分の作ったゲームに
使えるかわからない.
一元的な配布元のあるdllですら非互換性に苦しめられることを考えると
同封が一番確実っぽい気がします.
配布物の容量が増えるのは確かに無駄だけど最近のネットワーク速度
やHDD容量を考えたらたいしたことはないと思うし…
ソースを公開しないと GPL 違反
LGPLでもソース未公開・dll同梱は違反。
LGPLの場合ダイナミックリンクすれば別バイナリと再リンク可能に なるからそれだけでOKかと思ってたよ…(鬱 #こうしてソース非公開な人はAllegroに流れるのだろうか…? じゃあどこまでがdll同梱になるんだろうか? 1.プログラムとdllを同じzipアーカイブに含めて配布(×らすぃ) 2.プログラムとdllを別ディレクトリに置いた一枚のCD-ROMを配布 3.プログラムを入れたzipとdll入れたzipを同じCD-ROMに入れて配布 4.プログラムを入れたzipとdll入れたzipを同じサイトで配布
Allegro調べてみた。 すげー、giftwareだってよ。贈り物だなんていえないねえ、なかなか。 Delphiからも使えるみたいだし、ちょっと試してみる。
>>165 >>164 でのソース未公開とは、ライブラリのソースの事だと思ふ。
ライブラリのバイナリを配る時には、ライブラリのソースを同梱するか、
ソースを別のアーカイブなどにして、同じサイトで同時にダウンロードできるようにしておくと、
ライブラリのバイナリを得る時に、ソースを得るチャンスがあったっていうことで、
後腐れが無くて良いらしい。
>LGPLでもソース未公開・dll同梱は違反。 「ソース未公開」と「LGPL」が矛盾してるから,ここで言ってるソースがLGPLなライブラリのソースだとは思いもしなかったよ…(鬱 公開,未公開の話しじゃなくてSDLのバイナリを配るときにそのバイナリの元になったソースを入手可能な状態にしておけって話ね… そのための唯一確実な方法がSDLのDLLの入ったアーカイブにSDLのソースを同梱することであると… でも実際GPLなソフトのバイナリを配布してるところでも同じアーカイブにソース入れて配布することってほとんどないよね… ってことでプログラムのバイナリのアーカイブにSDLのDLLを同梱しても同じ場所(WebとかCD-ROMとか)にDLLの元になったSDLのソースを置いておけばほぼOKってこと?
>>168 > 同じ場所(WebとかCD-ROMとか)にDLLの元になったSDLのソースを置いておけば
> ほぼOKってこと?
そう思わないと、やっていけないでつ。
ソースを同じサイトorメディア上で提供するにしても、 本体とdllを単一アーカイブにまとめてしまうと、 LGPLを正しく理解してない厨房が騒ぐ元になるから、 本体とdllは別アーカイブにしとくのが吉かと。
>>170 ドキュメント読まない厨房のことまで知らんよ…
と,言いたいところだけど過去なにかのソフトでそういう騒ぎが
あったんかな??
保守sage
ほっしゅsage
ほしゅーぬsage
SDLのおかげで小一時間程度でゲームをMacintoshに移植できますた。 SDLってほんと素晴らしいですね。
ちょーほっしゅ
ふぉしゅ
179 :
名前は開発中のものです。 :03/01/29 17:53 ID:vjQjG8Ot
SDL+OpenGLでの開発が 現在のクロスプラットフォームゲーム開発のトレンドですか?
クロスプラットフォーム開発かぁ。 Windowsだけで充分なんだがなぁ。ELですかやっぱり。
ソースさえ公開しておけば、誰かか勝手にディストリビュートしてくれるという ささやかな甘い夢を見ていましたが、徒労も虚しく散りました。
>>181 誰かに勝手に再配布してほしかったんですか?
>distribute
>〈動)〈他〉1 を分配する,配給する;
>>82 。・゚・(ノД`)・゚・。
つっこんでくれてありがとう。
こういうのは、もっともらしい言葉ではなんて言うんだろう。
「誰かが勝手に、*改変、配布*してくれるという」
と言いたかっただけです。
linuxのディストリビューション的なイメージで使ったのがまずかったでつね。 バリアントとでも言えばいいのか・・・。
contribute
なるほど。thx
187 :
デフォルトの名無しさん :03/03/07 04:08 ID:kGU2rVVw
LGPLなのでありがたくソースは公開しません。 ところでSDL.dllはアーカイブに同梱してもよいのでしょうか。 SDL本家HPへのリンクをドキュメントに書いておけば平気と 理解しているのですが
∧ ∧ ∧ ∧ /⌒~~~⌒\ ( ,,) (,,・Д・) / ( ゚〟д〟゚ )y─┛~~ ~(___ノ ~(___ノ ,γ_ (_ ノγ U ∩_∩) THANK YOU 2ch ┌───────┐ \ α___J _J and (| ● ● | ヽ / ̄ ̄ ̄ ̄\ GOOD-BYE 2ch WORLD! /.| .┌▽▽▽▽┐ .|____|__||_| )) / ● ●、 ( ┤ .| | .|□━□ ) |Y Y \ またどこかで会おうね \. .└△△△△┘ .| J |) |.| | .▼ | | \あ\ | ∀ ノ | \/ _人|∧∧∩゛冫、 .∧_∧ | \り.\ . | - ′ | _/)/)/( ゚Д゚)/ ` . (´∀` )..ヽ(´ー`)ノ \が\ . | ) \ / 〔/\〕 U / ∩∩ ( ) (___) \と.\ .|/ | | | c(*・_・) | |ヽ(´ー`)ノ_| | | | |~ /\.\う\| (-_-) (__)_) UUUU /∪∪ (___)(_(__) ◎ ̄ ̄◎─┘ .└──┘.(∩∩)
189 :
名前は開発中のものです。 :03/03/07 09:41 ID:DwiBfiZf
>>187 それで良いと思うけど、SDLのソースくれっていう奴のために手元にソースを
おいといた方が良いと思う。
本家にも古いバージョンのソースはないみたいだし。
o /  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ / / このスレは無事に / / 終了いたしました / / ありがとうございました / / / / モララーより / / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄/ ∧_∧ / /∧_∧ ( ・∀・) / /(・∀・ ) ( )つ ⊂( ) | | | | | | (__)_) (_(__)
>>189 187じゃないがいいことを聞いた。
ありがとう。
保守
保守
194 :
名前は開発中のものです。 :03/04/19 15:18 ID:Thepg4nc
age
195 :
動画直リン :03/04/19 15:39 ID:uRI4tDpp
□□□□■□□□□□■□□□□□□□□□□□□□□□□□□□□□ □□□■■□□□□□■□□□□□□□■■■■■■■■■■■■□□ □□■■□□□□□■■■■■■□□□□□□□□□□□□□■■□□ □■■□□■□□□■□□□□■□□□□□□□□□□□□■■□□□ □□■□■■□□■■■□□■■□□□□□□□□□□□■■□□□□ □□□■■□□■■□■■■■□□□□□□□□□□□■■□□□□□ □□■■□□□□□□□■■□□□□□□□□□□□■■□□□□□□ □□■□□□■□□□■■■■□□□□□□□□□□■□□□□□□□ □■■■■■■□□■■□□■■□□□□□□□□□■□□□□□□□ □□□□■□□□■■□□□□■■□□□□□□□□■□□□□□□□ □□■□■□■□□□□■■□□□□□□□□□□□■□□□□□□□ □□■□■□■□□□□□■■□□□□□□□□□□■□□□□□□□ □■■□■□■□□□□□□□□□□□□□□□□□■□□□□□□□ □■□□■□□□□■■■□□□□□□□□□□□□■□□□□□□□ □□□□■□□□□□□■■■□□□□□□□□□□■□□□□□□□ □□□□■□□□□□□□□■■□□□□□□■■■■□□□□□□□
197 :
うんこ :03/04/21 12:06 ID:bNIVCvJy
OpenGLやDirectXが3Dマンセーになった以上 ちょっとした2DゲームでAPI使うぐらいなら SDL使った方がいいかなって思って使ってるんですが 盛り上がってないですね、このスレw 「みんなageれ、なだれこうげきだ!!」
198 :
うんこ :03/04/21 12:21 ID:bNIVCvJy
199 :
うんこ :03/04/21 12:32 ID:bNIVCvJy
●VCネタ (VC6 で動作確認済み) ○VCでコンソールウィンドウを殺す (OpenGL + GLUT と同じ方法です) #pragma comment(linker, "/SUBSYSTEM:WINDOWS /ENTRY:\"mainCRTStartup\"") ○ライブラリのリンクとか (マルチスレッド用ライブラリに切り替える方法を ソースで設定する方法がわからなかったので プロジェクトで指定してください。 ていうか誰か博識な方、ソースで設定する方法教えてください…) #pragma comment(lib, "SDL.lib") #pragma comment(lib, "SDLmain.lib") #pragma comment(linker, "/NODEFAULTLIB:\"libcd\"") #ifdef _DEBUG #pragma comment(linker, "/NODEFAULTLIB:\"msvcrt.lib\"") #endif
200 :
うんこ :03/04/21 12:33 ID:bNIVCvJy
ここまですれば、少しは盛り上がるかなって甘い期待…
201 :
動画直リン :03/04/21 12:39 ID:DDjPtBC+
□□□□■□□□□□■□□□□□□□□□□□□□□□□□□□□□ □□□■■□□□□□■□□□□□□□■■■■■■■■■■■■□□ □□■■□□□□□■■■■■■□□□□□□□□□□□□□■■□□ □■■□□■□□□■□□□□■□□□□□□□□□□□□■■□□□ □□■□■■□□■■■□□■■□□□□□□□□□□□■■□□□□ □□□■■□□■■□■■■■□□□□□□□□□□□■■□□□□□ □□■■□□□□□□□■■□□□□□□□□□□□■■□□□□□□ □□■□□□■□□□■■■■□□□□□□□□□□■□□□□□□□ □■■■■■■□□■■□□■■□□□□□□□□□■□□□□□□□ □□□□■□□□■■□□□□■■□□□□□□□□■□□□□□□□ □□■□■□■□□□□■■□□□□□□□□□□□■□□□□□□□ □□■□■□■□□□□□■■□□□□□□□□□□■□□□□□□□ □■■□■□■□□□□□□□□□□□□□□□□□■□□□□□□□ □■□□■□□□□■■■□□□□□□□□□□□□■□□□□□□□ □□□□■□□□□□□■■■□□□□□□□□□□■□□□□□□□ □□□□■□□□□□□□□■■□□□□□□■■■■□□□□□□□
ていうか、ネタがないんじゃ? 最近大きな動きあったっけか? SDL-Watchの真似事デモする? もしくは、SDLのC言語以外のバインディングの評価をしてみるとか。 ・Perl/SDL(前使ったときは、まだ未完成だった) ・Pygame(よく出来てる。描画関係以外のクラスをどううまく使うかが高速化のカギ) ・Ruby/SDL(使ったこと無い) ・Lua/SDL(ってあったっけ?) ・C++Wrapper(いくつかあるけどよく知らない) : とか。
∧∧ / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ (,,゚Д゚) < なんだ、このスレもう終りか / つつ∬ \___________ ~(,,_,,)旦 【THE END】
だれかWin+Eclipse+SDLでHelloWorld+簡単なグラフィクス描写までを実現するプログラム 作成を順を追って説明してください 日本語情報少なくてcygwinとかmingwとか入れたけど訳わからん。なんでコンパイル 通らないんだー 趣味プログラマ苦戦一日目
SJIS -> Unicode変換して日本語表示をする方法がわからん だれか教えれ
209 :
名前は開発中のものです。 :03/05/06 15:01 ID:hsPppZCr
SDLって、スプライトは使えないんですか?
210 :
bloom :03/05/06 15:11 ID:E5msO/hk
,,,,,,iiiilll!l″ ,,,,,,iiiil!!!llllll!゙° ,,,,,,iiill!!!゙゙゙`,,iill!l゙’ liill!!l゙゙゙’ .iiiiil!!゙゜ ` lllllll ,,iiil,,,,,,iiiillll゙′ lllllll ,illll!!l゙゙゙,ill!゙′ lllllll .,iilll",,,,,,,ill!!llliiiiilllll,,,,,,,,,,, .,,,,,lllll!″ ,,iill!゚,,ill!゙゙,,il!゙’.,,lill!!!!!!!!!!!!゙′ ゙!!゙゙゙″ ..,,iillllliiiill!゙liliiii,,.,,iill!lll,iiiiiiiiilト `゙”゙゙lllllliil!!゙゙゙゙lll!l゙’'゙゙゙゙゙,,,,,,,,,,,i、 .,iiill!!゙゙llllll.lllllli,、.,iiiillll!!!!!!!!!° ..゙',iiii"llllll ゙!!゙"  ̄ : ,lllll`.llllll ..l゙゙゙゜ .!!゙゙′
>>209 スプライトが透過部分のある画像転送って意味なら標準でできるよ。
スプライト用のライブラリもあるみたいだけど、機能を要求しないなら
自分で作ってもそれほど手間はかからないと思う。
ペン4 2.4GHz、GeForce4、DDR-RDRAM512MBでWIN XPな環境なんだが。 testsprite.exeで-fastオプションつけたらFPSが60以下だった。他の オプションだと全部200超えてるのになんでだ?? -fastつけたとき、コンソールにはスクリーンもスプライトもビデオメモリに とって、ダブルバッファ使ってるらしき表示が出てたけど、それがまずいの?
214 :
サンプルです :03/05/30 01:53 ID:scAvCgte
< < 終 了ーーーーーーーーーーーーーーーー!!!! < ∨∨∨∨∨∨∨∨∨∨∨\ /∨∨∨∨∨∨∨∨∨∨ /:|. | | /:| / .:::| ∨ / :::| | ...:::::| / ::::| i  ̄ ̄⌒゙゙^――/ ::::::::| /_,,___ . _,,,,__,_ :::::::::::\ / ゙^\ヽ.. , /゙ ¨\,.-z ::::::::::\ 「 ● | 》 l| ● ゙》 ミ.. .::::::\ /i,. .,ノ .l| 《 ..|´_ilト ::::::::::\ / \___,,,,,_/ .'″ ^=u,,,,_ v/.. :::::::::::::l! |  ̄ ,,、 i し./::::::::.} | / ,,____ _,/ ̄ \ \ ノ ( ::::::::::| | |.. | /└└└└\../\ \ '~ヽ ::::::::::::::} | .∨.|llllllllllllllllllllllllllllllllllllllll| ::::::::::{ | |.|llllllllllll;/⌒/⌒ 〕 :::::::::::} | |.|lllllllll; ./ . . | ::::::::::[ .| |.|llllll|′ / . | .| :::::::::::| .| |.|llll| | .∧〔 / :::::::::::::/ / }.∧lll | ../ / / :::::::::::::::::\ / /| \┌┌┌┌┌/./ /::: :::::::::::::::::\ ( ゙゙^^¨^¨゙゙¨  ̄ ̄ ̄ /::::::::::: ::::::::::\ ヽー─¬ー~ー――― :::::::::::::
>213 >testsprite.exeで-fastオプションつけたらFPSが60以下だった。 60近辺なら、vsyncに同期取ってるってオチはないのかな?
>>217 あ、そっか!
謎が思いっきり解けますた。
現在、荒らしによってこの板の利用が困難になっているため、避難所を作成しています。
出来ればこちらに移動するのをお勧めします。
ゲ製作技術板(避難所)
http://bbs.gamdev.org/gamedev/ ↓こんな感じにするのがお勧めです。
-----
9 名前:名無しさん@ゲムデヴ[] 投稿日:2003/05/28 21:33
とりあえずOpenJaneに登録した
板一覧の上で右クリック→新規追加→板名とアドレス入れるだけ
220 :
名前は開発中のものです。 :03/06/19 07:12 ID:wnNHJfqc
221 :
名前は開発中のものです。 :03/06/19 08:03 ID:+MtqR3wC
おおageられている・・・
>>220 win98とXPだけど
「Win32 Application」
でなく
「Win32 Console Application」
にしても動いたよ
223 :
名前は開発中のものです。 :03/06/19 10:14 ID:sQJsiDlb
SDLで、日本語を使うには、どうすれば良いのか SDLで、日本語を使うには、どうすれば良いのか SDLで、日本語を使うには、どうすれば良いのか SDLで、日本語を使うには、どうすれば良いのか SDLで、日本語を使うには、どうすれば良いのか SDLで、日本語を使うには、どうすれば良いのか SDLで、日本語を使うには、どうすれば良いのか SDLで、日本語を使うには、どうすれば良いのか
>>222 出来ました。
「Win32 Console Application」 で
>>同「オブジェクト/ライブラリモジュール」に、SDL.lib SDLmain.libを追加する。
>>この2つ以外は消去してもかまわない(結局SDLライブラリから使用されるが)。
↑の所の 「この2つ以外は消去してもかまわない」の 所を消さずに追加してやったら
コンソールに出力されるようになりました。
どうもありがとうございました。
(Win32 Console Applicationでも出来たんですね)
>>223 一行でいいだろ・・・。やったことはないがC MAGAZINEの2002年2月号のp.40に書いているが
>>223 追加:
UnicodeマッピングのTrueTypeフォントを使うんだってさ
228 :
名前は開発中のものです。 :03/06/20 09:24 ID:Z3ggKriT
>>227 これって、フォントファイルは自分で用意すんの?
230 :
名前は開発中のものです。 :03/06/20 12:09 ID:Z3ggKriT
>>229 おぉ、おりがとう、なんだか、みんな親切だな。
みんな情報の少なさには苦労しているんだろうなあ・・・
SDLは結構日本語情報あるんじゃない?日本語MLもあるし。
日本語MLかぁSDL-fan-jp なんか、レベルの差を感じて質問するのに 気が引けますが?
もうちょっと初心者向けのドキュメントとかあってもいいかもなあ。漏れはホスィ でも漏れはSDLそのもので苦労することはあまりないか 結局OpenGLと一緒に使ってるからGLの方で苦労することはあるが
SDLの日本語ドキュメント
ttp://www.ya.sakura.ne.jp/~logion/SDLdoc-jp/html/ があったから入ってこれたけど最初から英語だけだったら
やってなかったと思う。
(英語の弱さを悔やむこの頃)
やってみればDirectXより簡単だし、ソース付きで公開されているから
低レベルな所もわかるし良いもんだと思う。
サブライブラリが英語なのはWeb翻訳とかしながらやってるから
なんとなる。めんどうなファイル読み込みをライブラリに任せて自分は
ネットの勉強が出来るからおもしろい。
OpenGLもそのうちやりたいけど。今はネットゲームを作りたいのですた。
発展途上のAPIみたいなものの情報を探すときにはアチコチ覗いて情報を脳内補完しないといかんから 英語力も結構高い英語力が要求されるのがいやーん。ネットで使われる口語英語なんか嫌いでつ
Microsoftされるのがいやーん。
>>238 LinuxでもMacでもSDL使った開発はできるよ
240 :
名前は開発中のものです。 :03/06/22 12:47 ID:i61swhch
SDL_Kanjiに、付いてた testSDL_kanji.c の文字列部分が、 DEV-C++のエディターで、文字化けするんだけど、 どうすればいいですか? きちんと書き換えると、こんどはプログラムのほうで、 文字化けするし。
>>240 文字コードの問題。
testSDL_kanji.cは、EUCで書いてあるね。
READMEより引用
------------------
void Kanji_SetCodingSystem(Kanji_Font* font, Kanji_CodingSystem sys);
文字コードを指定します。sys には、
KANJI_JIS, KANJI_SJIS, KANJI_EUC が指定できます。
デフォルトでは KANJI_JIS が入っています。
------------------
だれかSDLで作ったゲームやらせてぇ~ このスレの人が作ったゲームがやりたいのぉ
煽りか
まじでぇ、ゲームやらしてぇ
246 :
:03/06/28 00:10 ID:BDO1zZrl
MSVCRTD.lib(cinitexe.obj) : warning LNK4098: defaultlib "msvcrt.lib" は他のライブラリの使用と競合しています; /NODEFAULTLIB:library を使用してください って警告でたんですけどさっぱりどうすればいいのかわかんないです・・・わかるひと教えてください。゚(ノД`)゚。
リンクオプションだかでマルチスレッド対応のライブラリを使用するとかそういうオプションを 選択すればOKだったようなきがする。禿げしくうろ覚えなままかいてるけど。
>248でおそらく正解。[プロジェクト]-[設定]-[c++]-[コード生成]で ランタイムライブラリの種類を選べるので、これを正しく設定。 同じプロジェクトで違うライブラリをリンクしてるとそのメッセージが出ます。 その手のメッセージは、たとえばLNK4098とかmsvcrt.libとかでぐぐると、 いろいろ参考資料が見つかるよ。
まあ情報が増えるのはよいことだろう
2DはSDL_gfx使ってますが 3Dでおすすめのライブラリ ありますか?
254 :
名前は開発中のものです。 :03/07/27 11:26 ID:STOtHZvX
sdl関係のページてばリンク切れが多い 移転多いのもわかるけどたまにはメンテして欲しいような
SDLでDirectXを有効にするためには、 何かファイルや設定が必要でしょうか? >17-18を参照して、 テストプログラムがコンパイルできるかどうか、、、 調べようと思ったんですが、何処のテストプログラムか 判断付きません(鼻血 bcc55で環境構築しましたが、 ページが書かれた当時とバージョン違うようで、 bcc用のSDL.lib(SDL_image.libも!)も最初から SDLのパッケージに入っていました。なんとお手軽な。 不足していたヘッダもコソーリ入ってるんじゃ ないのかなと期待してるのですが、、、 アマちゃんですか?
256 :
名前は開発中のものです。 :03/07/29 01:04 ID:gu85yN8H
257 :
名前は開発中のものです。 :03/07/29 01:18 ID:gPIbAMiY
>>255 17の
>>SDLはDirectXが入ってる環境では自動的に使ってくれるらしい。
>ヘッダとライブラリは必要。
ってのはgccとか使ってSDL自体を自前でコンパイルする場合だと思われ
bcc + SDLのバイナリ配布
でプログラミングするだけなら特にDirectX関連で別途用意する
ものはないと思う。
(バイナリ配布されているSDL.dll自体が使えるなら
DirectXを使う設定でコンパイルされているので)
あと今どのビデオドライバを使っているかどうかは
ttp://sdldoc.csn.ul.ie/sdlvideodrivername.php でわかると思う。
259 :
名前は開発中のものです。 :03/07/29 18:30 ID://nB7mSB
SDLってゲーム用のライブラリなの? 通常のアプリにはQtとかwxWindowsとかの方が使われている気がする
>>258 ぉぉ、なるほど早速参考にしてみます。
で、やりました。
>directx
ありがとうありがとう(涙
>>256 さんに紹介されたページ見て、
実はcygwinとかmingwで環境構築するのに挫折しますた。
なんて言えなかったんです。directxの初期化で挫折してSDLに流れたとも言えない。
お手軽なsdl+bcc++の環境は、
ものぐさプログラマには最適な環境だと思います。
ゲームのフレームワークを作っている段階ですので、
見せられるものはないですが、いずれ。
261 :
256 :03/07/30 01:17 ID:9leRKFRF
>>260 あぁ、bccでの話でしたか。
こっちこそ、よく見てなくてスマソ。
# 私自身は MinGW + MSYS で環境構築して利用してるんで、つい。
263 :
260 :03/07/30 14:41 ID:XcasW74I
ぐふ、いずれクロスコンパイル環境作るときに使ってみます。 cygwin自体はQt開発のお遊び用に入ってたりして(;´Д`) bccで環境作った手順 1.bcc55インストール 2.sdl1.2.5,sdl_image etcを展開→c:\sdl\include c:\sdl\lib へ 3.sdl1.2.5のbcc用アーカイブからライブラリをc:\sdl\libへ移動 4.sdl_imageなどbccアーカイブに入っていないライブラリを dllからimplibで取り出しc:\sdl\libへ移動 5.ilink32.cfg bcc32.cfgを用意 6.makefileを用意 あとはテキストエディタとコマンドプロンプトでちまちまと。
264 :
260 :03/07/30 21:22 ID:etHIwd/w
帰宅中で暇なので駄レス sdl触って2週間。c/c++のブランク4年です。 悪戦苦闘しながらようやくゲームループとタスクシステム、 登録型描画の仕組みとフレームスキップが実装出来ました。 あと、入力を最低限抽象化。(joystickは放置中) C/S型のゲームを作りたいので、 オブジェクトは敵味方自分問わず、 IDとメッセージを受け取って処理を行う形。 まだコントロールする部分は作ってないので、 入力から直接オブジェクトにメッセージ送ってみたり。 マウスクリックしたところにキャラがアニメーションしながら 移動するようにはなってる。 8方向移動画像がないので歩くとは言えない罠。 先は長いぞ
まだまだ着かない 入力部分組んだ時に文字列入力にも対応。 通常時Enterを押すと文字入力に移るような感じ。 連動してunicode_enable(だっけ)も制御。 入力文字列はバッファに保持しつつ、 ビットマップフォントで表示。 ログ管理を実装すればchatも可能かな。 ローマ字入力だけですが何か?
やりたい事 背景描画として32x32の画像を640x480の画面に敷き詰める。 ・手順A 毎周期screen(表示サーフェイス)にmapchipを直接描画 // 描画周期 for(x=0; x<20; x++){ for(y=0; y<15; y++){ dst_rect.x = x*32; dst_rect.y = y*32; SDL_BlitSurface(mapchip, &src_rect, screen, &dst_rect); } } ・手順B あらかじめmapchipを敷き詰めたbg用サーフェイスを作成し、 毎周期screenにbgを転送(一般的な手法ですね) // bgサーフェイス生成 bg = SDL_CreateRGBSurface(SDL_SWSURFACE, SCR_W, SCR_H, SCR_BPP,rmask, gmask, bmask, amask) // 続いてbgへmapchipを敷き詰める for(x=0; x<20; x++){ for(y=0; y<15; y++){ dst_rect.x = x*32; dst_rect.y = y*32; SDL_BlitSurface(mapchip, &src_rect, bg, &dst_rect); } } // 描画周期 bgをscreenにBlit(各rectは640x480を設定) SDL_BlitSurface(bg, &src_rect, screen, &dst_rect);
30fpsでループを回している状態で、 手順Aは30fpsで描画されるのに対して、 手順Bは15fps程度しか出ないのです。普通逆だろうと。 bg作成時にSDL_CreateRGBSurfaceでSDL_HWSURFACEとか |SDL_DOUBLEBUFとかやってみたのですが全く変化がありません。 ひょっとしてSDL_CreateRGBSurfaceを使う事自体が誤りなんでしょうか?
自己レス 人のソースを眺め見ました。 で、見つけたもの SDL_DisplayFormat -- サーフェスを表示フォーマットに変換します。 bg = SDL_DisplayFormat(tmpbg); としてワンクッション置くと速度低下はなくなりました。
game no main // デバッグ表示設定 rend_dbg=render_reg_text(REND_PRI_DBG,str); // メインループ while(input_main()==TRUE){ task_call(); if(!frame_skip){ fps++; render_draw(); // 一括描画 } maxfps++; frame_skip=true; while(true){ dw0 = SDL_GetTicks(); // 経過時間 dw1 = (dw0 - time_last) * 3 + time_mod; if(dw1>100) break; SDL_Delay(1); frame_skip=false; } time_last = dw0; time_mod = dw1 % 100; if((time_last - time_start)>=1000){ sprintf(str,"fps:%d/%d",fps,maxfps); fps=0; maxfps=0; time_start=time_last; } } render_free_obj(rend_dbg);
SDLの欠点は、実際にゲームを作ろうとすると、 フォントやGUIが面倒なこと。 日本語表示がデフォルトのライブラリーキボンヌ
日本語の入力もね。 SKKじゃなー
SDLでゲームを作ってるんですが、 画像のRGB値を変えて画像を赤っぽくしたり、 フェードさせたりしたいんですが、 どこかにサンプルでもないでしょうか?
誰かに SDL_ime を作ってほしいね…
281 :
279 :03/08/04 11:44 ID:fZqC0/Lp
>アルファチャンネルをいじる 思いつきで書こうとしたゴミが残ってました 気にしないでください気にしないでください
pngで真っ赤な画像を作成する。 アルファを50%ぐらいに設定で書き出し。 SDL_imageで読み込み 画像描画後のscreenにBlitしてやる。 一番簡単な簡単な赤色フィルタのできあがり。 速度的に問題なければこんなんでも いいじゃんと思う
>>282 # 速度的な問題はおいておくとして
仮にその方法でやるにしてもpng画像はつくらずに,
* SDL_CreateRGBSurface() で Surface つくって
* SDL_FillRect() で赤く塗って
* SDL_SetAlpha() で半透明にして
半透明の赤画像作るんじゃない?
(これならSDL_Imageもいらないし…)
284 :
282 :03/08/05 21:48 ID:eW46RnuS
>>283 秘密だがな、
SDL_SetAlphaの説明で泡を噴いた
pngだと半透過もプログラム無しで自由自在だ!
フェードに使いたいと思うのですが、 >283さんみたいな方法で半透明のグラデーション(?)って、 どうやって作るんでしょうか SDL_MapRGBAでピクセル単位で設定していくのかな プログラムの流れが掴めないんです...
>>285 すごく冗長に書くけど下のような処理でいいの?
screen = SDL_SetVideoMode(640, 480, 32, SDL_SWSURFACE);
tmp = SDL_LoadBMP("back.bmp");
back = SDL_DisplayFormat(tmp);
tmp = SDL_CreateRGBSurface(SDL_SWSURFACE, 640, 480, 32, 0xff000000, 0xff0000, 0xff00, 0xff);
for (i = 0;i < tmp->h;i++){
SDL_Rect dstRect = {0, i, tmp->w, 1};
SDL_FillRect(tmp, &dstRect, SDL_MapRGBA(tmp->format, 0xff, 0, 0, i * 0xff / tmp->h ));
}
redGradation = tmp;
SDL_BlitSurface(back, NULL, screen, NULL);
SDL_BlitSurface(redGradation, NULL, screen, NULL);
# 実際やるなら pixels を直接書き変えるかもだけど…
287 :
285 :03/08/07 01:12 ID:ecuGQ5wX
>286 ははぁそんな風に使うのですか ># 実際やるなら pixels を直接書き変えるかもだけど… 処理の速度もスマートもこっちの方が良さそうですね... ともあれ、ありがとうございました!
288 :
277 :03/08/10 22:04 ID:3fyZnj/b
>>279 -
色々とありがとうございます。
昔ながらの256色イメージだけで作りたいので
アルファは使わずにパレット操作で
なんとかできるようにがんばってみます。
SDL自身はLGPLだからDynamic Linkすれば、 アプリケーション側はライセンスに縛られない。 ここまではいいとして、WindowsやMacの場合はlibSDLmainを スタティックリンクせざるを得ない気がするんだが、 これのライセンスは大丈夫なのか?
>>289 SDL-1.2.5/src/main/win32/SDL_main.cを見ると
> SDL_main.c, placed in the public domain by Sam Lantinga 4/13/98
って書いてあるから win32 の場合は問題ない.
beos や macos, macosx の SDL_main のソースには LGPL
っぽいことが書いてあるので厳密に見ると libSDLmain を
スタティックリンクするとアプリケーションのソース公開の
必要が出てくるはず.
ただし SDL 作ってるところがそれを要求することはなさそうだし,
win32 バージョンがパブリックドメインになってるところを見ると,
スタティックリンクの問題は認識してるっぽい…
要望さえすれば win32 以外の libSDLmain のソースコードの
ライセンスも変更してくれる可能性は高いんじゃないかな??
Mac 版バイナリとか配布したくてどうしても気になるならメール
してみれば??
>>290 ありがトン。
今回Win32とMacOSXを考えてたんですが、
OSXのほうは厳密に見たらアウトっぽいでつね。
ただ、先程本家SDL-mlの過去ログとかあさってみたんですが、
それで問題になってるケースは無いようなんで、
気にしすぎなければいいだけなのかも、と思えてきました。
# 今年の2月ごろにLicense変更の議論があったみたいですが、
# 変わるとしても次バージョン(SDL-1.2.6)からなのかな?
本当は、
> Mac 版バイナリとか配布したくてどうしても気になるならメール
> してみれば??
するのが正しい対処なんだろうけど英語読むのはともかく書くのが苦手で…。
>>291 ごめん.よく見たら SDL-1.2.5/src/main/macosx/SDLmain.m には
> Feel free to customize this file to suit your needs
って書いてあるだけで LGPL だとは書いてないね.
これがライセンスに相当するのかよくわからんけど,
問題ないのかも…
293 :
名前は開発中のものです。 :03/08/15 23:07 ID:PGk8s/Xy
SDLを簡単に使える統合開発環境無いですか?
>>293 VC++でもProject Builderでもお好きにどうぞ。
そもそもSDL自体がウィンドウにWidgetペタペタってタイプのライブラリじゃないんで、
統合環境使っても便利なデバッガぐらいの意味しかない。
295 :
名前は開発中のものです。 :03/08/16 06:04 ID:Pwn6a/b8
296 :
名前は開発中のものです。 :03/08/16 16:13 ID:UdbGIJgL
sdlで開発していてソースを公開していないとこ ありますか?良いのかダメなのかという議論より そっちを探した方が早いと思うんだけど 自分でも探してきまーす
>>297 >ライセンス上(法律上)問題がないことが確認できないと使えない(会社の許可がおりないとか)
会社の許可があろうがあるまいが、ライセンス上の問題を抱えたまま使うわけにはいかないだろ。
299 :
297じゃないが :03/08/19 22:51 ID:pK/wVDNB
300 :
_ :03/08/19 23:39 ID:o8K5C254
301 :
名前は開発中のものです。 :03/08/20 01:58 ID:GLauqFru
302 :
297 :03/08/20 08:54 ID:jwy9xvpt
>>296 298 みたいのに叩かれないようにライセンスはちゃんと
チェックしましょうってことですね…
303 :
名前は開発中のものです。 :03/08/20 15:33 ID:2JkP3biW
SDLでゲームを作ってるんですが、 ウィンドウハンドルやインスタンスハンドル の取得はできないのでしょうかね? 後、DLLをEXEと同じフォルダに置いていますが 違うフォルダにおけたらいいなと思ってるのですが これもやっぱり無理なんでしょうか・・・ よろしければ教えてください。
>>303 あれ?SDL.dllの方はsystem32とかに置いても動くんじゃなかったっけ?
>>303 DLL一般に言えることだけどパスの通ったディレクトリ
ならどこに置いてもいいんでない?
保守っと。
>>307 内部で作ったサーフェイスで回転させて
SDL_SetAlphaでAlpha設定した後
表示サーフェイスにBlitしてもダメ?
309 :
307 :03/09/02 11:03 ID:TJ4A1y2c
>>308 内部で作ったサーフェイス、っていうのがよくわかりません・・・(初心者ですみません)
どうもSDL_SetAlphaで設定したAlphaが無視(?)されてるような感じなんです。
>>307 半透明にしようとしているSurfaceのフォーマットと
SDL_SetAlphaの引数あたりが怪しい…
ってか状況を再現できる最小限のソースコード
くらい出してくれないと。
こっそり保守。
なんかSDLで作ったソフトを起動してる間NumLockとかCapsLockとかの 切り替えができなくなるのは俺だけ? 押してもキーボードのNumLockとか光ってるところが反応しない。 俺だけだったら放っておいて下さい。
>>312 とりあえず試しにWin2K, MinGWな環境で
SDL1.2.5のtestglとか走らせてみたがそんなことにはならなかった。
>>313 レスどうもです。
うちは98SEの1.2.5なのだけど、サンプルのソースとか他の公開されてる
SDL使用のソフトとかを実行してもそうなります。
多分俺の脳がどこか腐ってるんだと思います。
315 :
名前は開発中のものです。 :03/10/02 11:19 ID:IlayBond
CTRL+左キーが利かないキーボードあるんだけど、 そんなのは関係ないのかな。
SDL for Delphi ってあるでしょうか?? Ver0.5というのはあったんだけど、、
>>316 試しにググってみたけど何か違うものばかり引っかかりますな。
bc++5.5でSDLが動いてるようだから、技術的には可能そうだけど。
プログラミング初心者でSDL弄ってるんだけどさ、実行中 常にCPU使用率が100%になるのを防ぐ手立てって無いものかな。
>>319 適宜SDL_Delay()を使う。
SDL_gfxのFramerate controlモジュールを使う。
Routine-Workさんのサイトを参考に、WinXPPro+MinGW3.1.0-1+MSYS1.0.9で SDLをmakeしてみた。 SDL -> OK 問題なし SDL_mix -> makeは問題ないが、出来たDLLをロードすると落ちる。 SDL_image -> 同上。 何か間違えたかと思い、 MinGWのバージョンを2.0.0-3に落としてみたところ、 全て問題なし。むー。ウチの環境だけの問題なんだろうか?
>>321 あ。微妙にミス&書き忘れ。
使用したライブラリのバージョンはそれぞれ、
SDL-1.2.6.tar.gz
SDL_mixer-1.2.5.tar.gz(<-mixじゃなくてmixerですた)
SDL_image-1.2.3.tar.gz
です。
SDLでS3TC読み込み用の関数とかはありますか?
>>321 うちでも同じ状態です…
SDL_mixer というか SMPEG を MinGW 3.X でコンパイルしてできた
DLLを使うと落ちる感じ。
SMPEG サポートなしで SDL_mixer をコンパイルするか
MinGW 2.0でコンパイルしたものを使うかで回避してるけど
対処法あったらおれも教えてほしい。
うちは、DLL集めてエクスプローラから起動するとOK cygwin shell上から実行するとDLL読み込みエラーで落ちる
>>324 >>325 ありがとう、ウチだけの問題じゃないと解かって一安心です。
ただ、
> SDL_mixer というか SMPEG を MinGW 3.X でコンパイルしてできた
> DLLを使うと落ちる感じ。
これはこちらとはちょっと現象が違う模様。
こちらで落ちたSDL_mixerは、libogg,libvorbis有り、SMPEG無しで
makeした物だったんで。
ちなみに、SDL_imageはjpeg,pngサポート有りでmakeしたものです。
しかし、困ったモンですな。MinGW、SDL_mixerどちらの問題なんだろう?
327 :
321 :03/11/29 00:19 ID:+Zau//Z5
328 :
名前は開発中のものです。 :03/11/30 21:34 ID:8v/2nacI
関連する情報持ってる人キボンage
WinXP + MinGW 3.1 + MSYS 1.0.9 でちょっと試してみた。 SDL だけを使った場合落ちないけど以下ライブラリをコンパイルして 出来たDLLをロードすると落ちる。この環境でコンパイルしたDLLだと shellから起動しようがexporlerから起動しようがダメでした。 * smpeg * SDL_mix(vorbisあり,mp3あり) * SDL_mix(vorbisあり) * SDL_image * SDL_net DLLだけを他の環境でコンパイルしたもの(公式サイトで配布 されているやつとか)に置き換えたら動いたのでやっぱ生成された DLLがマズそうな感じ…。やっぱMinGWの問題だろうか?
空いた時間をつぶす時はSDL_Waitで十分かな?
331 :
名前は開発中のものです。 :03/12/02 23:30 ID:KcbsioGe
D言語でもSDL使えるんだね。あげ
SDL_Delay()だね。 SDL_gfxのフレームレートモジュールを使うのも手
たまには保守。
D言語スレをROMってたんだけど、C#でもつかえるんだってね。
Windows以外でも?
dreamcastでSDL開発してる香具師いらっしゃいますか?
>>337 > dreamcastでSDL開発してる香具師いらっしゃいますか?
SDL-fan-jp MLでたまに見かける人に一人いるみたい、って以外は知らないなぁ。
339 :
名前は開発中のものです。 :03/12/28 20:49 ID:qtY7Eg01
>336 それ、SDL.NET-1.5.1.zip落として解凍すると、 0kbなんだけど…なんか特殊なのかな? どこから(ミラーサイト等)でも同じ現象。。。
340 :
名前は開発中のものです。 :03/12/29 19:28 ID:w1hTPfgh
書き込み頻度を見ると、ネラーのSDL使用って少ないのかな? WinでDirectX使うより簡単だし始め易いと思うんだけど…
>>341 同意。SDLはしきい低いと思う。
けど、描画で凝ったことしようとするとOpenGL使うか、
他の周辺ライブラリ使うかになることが多い気がするが、
ここで難しいという印象を与えてしまってる部分がある予感。
343 :
ぁきまさ :03/12/31 10:27 ID:uPGIOmXx
DirectXforVB→SDL→DirectXに移ってみた者ですが、 感想としては、DirectXめんどくさすぎです…。 SDLなら一行でできることをDirectXでは長々と書かなければいけないのは苦痛です。 そのくせ、SDLならマルチプラットフォームを簡単に実現できることを考えるとDirectXでやることは考えられません。 2Dのゲームに限っては、ですが…。 以下個人的理由です: SDLでOpenGLを使って複雑なシーンを構築する際、 DirectXにはXFileというとっても楽ちんなものがありますが、 OpenGLにはそれに相当する物はあるのでしょうか? 外部ファイルによる物体の表示だけならまだしも、 アニメーションまでやろうとするとそれだけでかなり労力を割かれて萎える気がするのですが…。
>>343 なんかあった気がする。
無かったら作っちゃえよ。
>>343 海外のチュートリアルサイト見れば3dsファイルとかlwoファイルとか
Quakeとかのmd2, md3とかQuake BSPファイルとかを表示する
サンプルプログラムが腐るほど落ちてるよ(Xファイルのもある)。
中には自由に使えるものも結構ある。探してみるべし。
個人的には、D3DXSpriteで出来ることくらいは出来てほしい>GL以外のSDL 具体的に言うと回転が高速に出来てほしいわけだけど…。 実装されないのはPC Unix方面で何かネックとなるものがあるのかな…?
347 :
ぁきまさ :04/01/06 08:58 ID:ZNIQCPQq
>>345 そうなんですか。
ありがとうございます。
やっぱり、海外の方が情報が多い。のでしょうか…。
348 :
名前は開発中のものです。 :04/01/06 13:15 ID:Q68qBWfA
>>348 お!情報サンクス。
しかし、そのメールの日付が2004/01/05ってことは、
えらい最近まで原因判明してなかったのかー。
351 :
名前は開発中のものです。 :04/01/07 12:16 ID:kS7ua9BI
>>346 もうOpenGLメインにした方がいいかもなー。
DirectXは3D機能で2Dを表現するのが主流になってきてるそうだし。
回転などの「インタフェース」を用意してもいい時期ではないかと、 そろそろ思うわけだけどね。 まぁ、glutやWGLみたいなOpenGLフレームワークの一つとして収まるつもりなら、 別にそれでもいいと思うけど。
>>353 「SDL Request For Implementation」、略して「SRFI」ってノリか。……Schemeと名前被るけど。
355 :
名前は開発中のものです。 :04/01/11 05:04 ID:kHguDFRk
mingw(gcc3.3.1)+msys1.0.9+SDL1.2.6でエラーが出て SDLをビルドできないんですが・・・。 > c:\mingw\bin\..\lib\gcc-lib\mingw32\3.3.1\..\..\..\..\mingw32\bin\ld.exe: > .libs/libSDL.lax/libhermes.al/mmxp2_32.lo: bad reloc address 0x87 in section `.text' binutilsというかld-2.14.90のバグらしいのでSDLだけ ldを2.13.90に差し替えてビルドしましたけど、大丈夫ですかね…。 早めにバグ取ってupdateしてほすいですな…>binutils
>>355 確信はないけど、大丈夫なんじゃない?
そのぐらいで毎度問題出るんだったら、
公式で配ってるバイナリ配布版なんて誰も使えないことに。
357 :
名前は開発中のものです。 :04/01/12 10:30 ID:oW00NT9Y
【ゴールデンレス】 このレスを見た人はコピペでもいいので 10分以内に3つのスレへ貼り付けてください。 そうすれば14日後好きな人から告白されるわ宝くじは当たるわ 出世しまくるわ体の悪い所全部治るわでえらい事です
358 :
355 :04/01/12 16:22 ID:k60kLF8M
>>356 できたSDL.dllをmingwでコンパイルした
メインプログラムと組み合わせると動いたのですが
VCでコンパイルしたメインプログラムとあわせると落ちてしまいました。
バイナリ配布のSDL.dllでは両方動くので
何か間違えてしまったかもしれませんです。ld だけ換えたせいなのかな…。
make install まで通ったので、あまりこだわらないことにします。(^^;
359 :
名前は開発中のものです。 :04/01/22 13:27 ID:+O9pXp3N
>>357 そのコピペの頭の悪そうな感じが大好き。
フルスクリーンにしてSDL_FillRect使うとものすうんごく遅いんですが、 こんなもんなんでしょうか? SDL_FillRectを使わなければ60fpsくらい出るものが1以下に...
>>362 あなたの環境でフルスクリーンでSDL_FillRect使って
ものすうんごく遅くなる最小限のサンプルプログラムを
示してくれればみんなテストしてくれると思うよ?
364 :
362 :04/02/04 11:41 ID:URHwb4SZ
>>363 長くなるので一部省略します。
if(fullScreen)
screenSrf = SDL_SetVideoMode(640, 480, 16, SDL_HWSURFACE | SDL_FULLSCREEN | SDL_DOUBLEBUF);
else
screenSrf = SDL_SetVideoMode(640, 480, 16, SDL_SWSURFACE);
while(1) {
static int px = 0;
SDL_Rect area = {0, 0, 640/2, 480};
SDL_FillRect(screenSrf, NULL, SDL_MapRGB(screenSrf->format, 255, 255, 255));
if(px > 640 / 2) px = 0;
else px++;
area.x = px;
SDL_FillRect(screenSrf, &area, SDL_MapRGB(screenSrf->format, 0, 0, 0));
SDL_Flip(screenSrf);
waitByFPS();
printf("FPS=%d\n", nowFps);
}
365 :
362 :04/02/04 11:44 ID:URHwb4SZ
waitByFPSの中身です。 static void waitByFPS() { Uint32 nowtime,lefttime; static Uint32 lasttime=0; const Uint32 interval=1000/fps; nowtime = SDL_GetTicks(); lefttime = lasttime+interval-nowtime; if(lasttime+interval>nowtime) { SDL_Delay(lefttime); lasttime=nowtime+lefttime; nowFps = fps; } else { nowFps = 1000 / (nowtime - lasttime); lasttime=nowtime; } } 変数fpsはint型で60、nowFpsには現在のFPSが入っています。
366 :
362 :04/02/04 11:50 ID:URHwb4SZ
っと、ここまで貼ったのですが、このプログラムの場合、 フルスクリーンにしたときにFPSが下がるのではなく、 何も写らなくなってしまいます。 問題が発生した元のプログラムも、どうやらSDL_FillRect又はSDL_Flipに 時間がかかっているのではなく、画面が実際に更新されていないだけのようです。 (つまり、nowFpsにはちゃんと60が入っている) 機種固有の問題でしょうか? よろしくお願いします。
>>362 以下の環境で試してみましたがどの環境でも
フルスクリーン,ウィンドウモードの両方とも
正常に画面は更新されました。
ThinkPad X30, WinXP, cygwin + SDL 1.2.6
自作PC, Win2k, MinGW + SDL 1.2.6
自作PC, Linux2.4.22, SDL 1.2.5
# せめてコンパイル可能なプログラムを…
368 :
362 :04/02/07 20:35 ID:O0CtMFQf
>>367 ありがとうございます。そんなにたくさんの環境で...
やっぱり環境固有の問題みたいですね。
# 途中省略ってのはまずかったみたいですね。
# いや、ソース読むだけで判断するかなと...
# 想像以上に親切で迷惑をかけてしまったようです。スイマセン
SDL version 1.2.7 リリース! ってことで保守
SDL_archive っての作ってみたよ。
アーカイブファイルを元に内部のファイルのインデックス作って、
そこから SDL_RWops を生成できるってもの。
http://qas.sourceforge.jp/libraries/ VisualC++ と BCC のビルド環境しか入れてないから
gcc な人とかは自分で全ファイルをコンパイル&リンクして適当に作ってくだちい。
>>370 そこに置いてあるpatchって本家にマージせんの?
>>370 ちょっと本職が忙しくて睡眠時間すら削り取られてて、本家に投げる暇が無いのよ。
それに英語苦手なもんで……誰かパッチ投げだけやってくれる人いないかな。
SDL_gfxのImageFilterって使い方がいまいち分からない。 Test/ディレクトリにあるサンプルは適当な配列をいじってベンチマークしてるだけだし。 どっかに実際に使ってるdemoとかgameありませんか?
SDL_net使ってるのですが、SDLNet_SocketSetの使い方がわかりません。 これにcliantのsocketをSDLNet_AddSocket()で登録していくのだろうなーというのは なんとなく察しがつくんですが、ここに登録したcliantに対して操作する場合、 どのようにしたらいいんでしょうか? ドキュメントにはポインターです、としか書かれてなかったのですが、 クライアントsocketポインタの配列みたいな役割になっているのでしょうか? SDLNet_SocketSet socketset; SDLNet_TCPsocket i; for (i=(SDLNet_TCPsocket)socketset; *i!=NULL; i++) { len = SDLNet_TCP_Recv(i, message, 1024); printf ("Received: %.*s\n", len, message); } みたいな感じにすればいいのかな?
376 :
名前は開発中のものです。 :04/03/13 11:02 ID:KWP+lz2i
ドキュメントを読む限り、SocketSetからそれにaddしたソケットを取得する手段は無いんじゃない? こんなかんじ? SDLNet_SocketSet sockset; SDLNet_TCPsocket sock[10]; SDLNet_TCP_AddSocket(sockset, sock[0]); SDLNet_TCP_AddSocket(sockset, sock[2]); : SDLNet_TCP_AddSocket(sockset, sock[9]); if (SDLNet_CheckSockets(sockset, 1000) > 0) { for (i = 0; i< 10; i++) { if (SDLNet_SocketReady(serversock)) { SDLNet_TCP_Recv(sock[i], message, 1024); } } }
× if (SDLNet_SocketReady(serversock)) { ○ if (SDLNet_SocketReady(sock[i])) { だった。 要するにselect()のfdsetと同じ役割と考えるとわかりやすい(というか実際に同じか)。
「それ、一昨日俺が欲しいって言ったヤツだよ!」 って返事が来たんだけど、 本家に取り込んでもらうにはどうすりゃいいんだろう。 「commit してくれ」ってそのまんま頼めばいいのかな。 す、スレ違い?
Sam Lantinga氏にmailを直接送ってみれば? 新機能の追加なのですぐにcommitされるか微妙ですが なんらかの返信はすぐに来るはず。 怒られるようなことは、まずないと思います。
SDL1.2.7をコンパイルしてみたのですが、SDL_cpuinfoの__asmで cmp命令とmov命令の一部がアセンブラ構文エラーになって弾かれてしまいます。 WinXPかVC++5が悪いのかな。他の人はこういうふうにはならないのでしょうか? 今からVC6なんて手にはいらないし、.netならいいのかなぁ?
>>381 今VC5を使ってる人ってほとんどいないような希ガス。
だからそれだけの情報じゃぁなかなか答えようがないと思うよ。
とりあえず該当部分のコード晒してみるのはどう?
そーいうオレ自身ももっぱらMinGWなんでさっぱり分からんのだが。
>>381 想像ですが、cpuidの直後で引っ掛かってるんでないかと。
VC5にはcpuidがないとかいう噂を聞いた覚えがあります。
cpuid絡みならもしかすると、ソースの頭に
#define cpuid __asm _emit 0x0F __asm _emit 0xA2
を入れれば上手くいくかも。
自分はVC6で、今やってみたら1.2.7も普通にコンパイルできますな。
SDLを最近delphiで始めました。 win32appを作るのに近い感覚で作れてなかなか良いですね。 ただ資料、特にdelphiのものは皆無といっても良いほど内のが玉に瑕。 今度入門ページとか作って見様かなぁ
385 :
381 :04/04/07 01:48 ID:Wn2bWE/g
遅レスすまそ。
やっぱりコンパイラの問題かなぁ。
VC.netを購入する理由が別にできてしまったので、
それでコンパイルしてみることにします。
で、それでもダメだったら
>>383 さんのを参考にしてみまつ。
質問です。SDL_mixerって何音同時再生できますか? waveをたくさん重ねて鳴らしたいのですが。
少な…
かなり大量に指定したことあるんだけど、 増えすぎてちゃんと鳴ってんのかどうかわからなかった。 まあ、16ぐらいは普通にいけるよ
あれ、トリップ打ち間違えた
スレ違いかもしれないんだけどさ、液晶モニタでゲーム作ってて、 表示してる画像を動かすと、やたらぶれて見えることってない? 静止してその場でアニメーションしてもぶれないんだけど、 画像全体を上下左右に動かすと途端にぶれて見えるみたいな。 でもCRTだと問題ないし、その液晶でだってゲーム全部ダメってこともなく……。 FPS落としてみたりして試行錯誤はしてるんだけど、うまくいかず。 世の中のゲームはどんな実装してんのか、誰か教えてくだされ……。
ブラーが掛かるように見えるなら、応答速度のいい液晶を使う。 FPSなゲームだと余り目立たないけど、1/30秒位でオブジェクトを 動かすと2重にブレて見える事もある。 中途半端に遅くても駄目な例。
395 :
392 :04/04/21 16:31 ID:WKD5qBW8
>>393 ,394
ありが㌧。やっぱ世の中安物はだめなのか……。
自分が使うぶんにはいいんだけど、
他人にプレイさせると選べないんだよね……。
久々に本家のページ見にいったら デザイン一新しててビックリしたんだけど、 いつから変わってたんだろう…。
>>396 何でか知らんのだけど、リニューアル後は
サイトの HTML や画像まで CVS に入れるようになったみたいだね。
CVS コミット通知の ML 読んでてびっくりしたよ。
日本語入力は…とりあえずSDL_ttf+sskしかないんですかね? ssk試してみたけどあれはツライなぁと。 SDLのソース触ってIMEからなんとか動かしてるんですけど、 やっぱSDL_imeがほすぃ…。
SDL_ttf の不満点を解消するパッチを作ってみた。
http://qas.sourceforge.jp/patches/ ・ファイル開くのに失敗したら NULL を返すようにした。
これまではライブラリ内部でクラッシュしてたんだよ。信じられるかい?
・SDL_bdf みたいに SDL_Surface へ直接描画する関数を追加した。
・横幅を元に、文字列の中で描画できる byte 数を返す関数を追加。
文字列から横幅を取得することはできるんだけど、
それだと先に横幅が決まってる場合にスマートに自動改行の実装するのは難しいんだよね。
Shaded や Blended を使う場合に 強制的に TTF ファイル内の埋め込みビットマップフォントが使用されてしまう問題は Shaded や Blended の時だけ bitmap を使わないようにすればいい……と言いたいところだけど、 TTF_Size* を呼び出す時、Solid と Shaded, Blended との場合が区別できないから 互換性が失われてしまうんだよね。 TTF_Size*_{Solid|Shaded|Blended} ってのを新しく追加しようかなとも思ったんだけど、 結局互換性は保たれないからなあ。 オリジナルのコードを見るとよくわかるけど、 何と言うか、試行錯誤の爪あとがひどくて…… 別のライブラリを作った方がいいのかなあ。
>>400 パッチ作成おつー
パッチは役割毎に分けて,CVSバージョンに対して作って
直接 Sam に投げてあげると取り込まれやすいかもー
# Mix_LoadMUS_RW パッチも取り込まれてないのね…
# 今CVS見たら MikMod のみに対応した Mix_LoadMUS_RW の
# コードが入ってるっぽい…
Ruby/SDL on WinでSDL_kanjiを使えたという人います? Linuxではできるみたいなんだけど、WinでRubyの拡張ライブラリ を作るやり方がさっぱりわからない…
404 :
名前は開発中のものです。 :04/06/17 23:16 ID:1bQx+Nnz
SDL使えばグラフィックは良いと思うんですが サウンド用の汎用ライブラリって何かありますか?
OpenALだっけか。 感想キボンヌ
OpenALを上げる前に、 SDL_mixerとSDL_soundあたりをまず上げてやれよ。 SDLとの組み合わせでは一番使用例が多いだろうに。 それで機能不足を感じたなら改めてOpenALあたりを調べてみるのが良い気がする。
407 :
名前は開発中のものです。 :04/06/20 15:54 ID:6tF2CK9b
>>403 SDL使うには Ruby/SDL と RUDL という手があるね。
漏れ、一時期、複雑なものなら型宣言有り言語推進派だったけど、
経験積むにつれ、型宣言に大した意味ないと思った。
Rubyマンセー
>>407 俺はRuby/SDLをやって、やっぱりRubyは大規模なものには
向かないと実感したよ。
1番多いミスが、変数に予期しない値が入っちゃうということなんで。
あと、初期化されていないフィールドと配列のインデックス越えでnilを返すところね。
自動テストができないから、リファクタリングも危険が伴うし。
もしまたスクリプト言語でゲームを書く機会があったら、今度はPyGameでやってみたい。
OpenALは3D空間内で音が聞こえてるようにシミュレートするやつだから
ファイル読み込みとかはほとんどできないよ。
>>408 > OpenALは3D空間内で音が聞こえてるようにシミュレートするやつだから
> ファイル読み込みとかはほとんどできないよ。
ということは、SDL_soundでファイル読み込み&デコードやって、
OpenALに渡すのって実は良さそうなのか?
>>408 その程度の問題だと単にRubyに慣れていないだけだとおもわれ
大規模なものを作ろうとおもったらどんな言語でもそれなりの
経験と設計とテストが必要でしょ…
>>410 だな。インタプリンタならしょうがない。Pythonでも同じだろう。
412 :
名前は開発中のものです。 :04/06/24 01:09 ID:M2KZSJrL
漏れが見た感じ、Ruby/SDL よりは RUDL のほうが完成度高いと感じた
>>411 しかし型あってもエラー起きるときは起こるし。
単にリファクタリングにともなうテスト作りに慣れてないだけかと
布教なら余所でやってくれよ
信者ではない
でも、エラーであれ?と思うことはPythonの方がずっと少ないよ。
メッセージから原因もわかりやすいし。
>>412 RUDLってメンテナンス止まってない?
RUDLにしろRuby/SDLにしろ各機能がまとめてはいってるところが いやなんだけど… SDL + GL の描画しか使ってなくても SDL_image, SDL_mixer, SDL_ttf, SGE のDLLも付けて配布しないといけないんだよねぇ…?
翻訳サイトが消えてたり、さがさないでくださいと出てたり・・・ SDLは日本人が使うとどうかなっちゃうの?w
お願い纏めて。そしたら頑張って何か作るから。
資料が少ないな・・・ SDL推進してるWikiとかないの?
>>422 今のところ無いっぽいね。
とりあえずはバラバラに存在する国内情報の
まとめページだけでも欲しいかな。
>>422 SDLって大量の資料が必要なほど複雑なライブラリじゃないと思われ…
リファレンスマニュアルとチュートリアル以外でどんな資料が欲しいの?
あのマニュアルめちゃめちゃ丁寧だよなぁ。 それだけじゃ足りないってことなんだろうけど。
SDL_imageとか拡張ライブラリはどこで仕様を見れるの?
>>426 SDL_image の場合 README に書いてある内容が全ての仕様だと思うけど…
ユーザが使うのは、
* SDL_Surface *IMG_Load(const char *file);
* SDL_Surface *IMG_Load_RW(SDL_RWops *src, int freesrc);
* SDL_Surface *IMG_LoadTyped_RW(SDL_RWops *src, int freesrc, char *type);
* SDL_Surface *IMG_ReadXPMFromArray(char **xpm);
くらいしかなくて、アプリケーションが使うのはほぼ一番目の関数だけ。
でも SDL_ttf とか SDL_net のドキュメントはもう少し欲しい気がするね。
ところで、Linuxでバイナリ配布ってやりづらいような気がするのですが。 ディストリビューション毎に、glibcやらlibstdc++やらのバージョンがバラバラだったり、 ディストリビューション標準パッケージSDL_mixerが対応フォーマットさっぱりだったりとか。 どうにかならんもんかな。
Redhatだけ対応しとけばいいよ
>>432 やっぱそんな感じで割切るしかないですか。
とすると、RH系だと、今ならFedora2に対応しておけば良いのかな。
全部スタティックリンクしちゃえば
>>434 う~ん、確かに。
けど、LGPLのをスタティックリンクするってことは、
アプリ側の.oを配布する必要があるのかな。
それと、libc,libm,libstdc++とかスタティックリンクするとデカそうってのも微妙な感じだ。
>>435 スタティックリンクしたらアプリ側のソースコードを公開する必要がある.
Linuxでのバイナリ配布は
1) 各ディストリビューション毎にバイナリを作る
2) メジャーなディストリビューションだけ作ってあとはユーザにコンパイルさせる
3) 全部スタティックリンクしたのを一つだけ配布
のどれかじゃないかなぁ… あ…
4) バイナリと libSDL.so や libSDL_mixer.so を一緒に配布
(LD_LIBRARY_PATH を設定して起動するシェルスクリプトを同封)
ってのもありえるか…
>>436 LGPLのはスタティックリンクしても公開しなくていいのでは。
438 :
431 :04/07/07 22:19 ID:TRH5OiZw
色々返答ありがとう。考えた結果、 ・自分が普段使ってるディストリビューション用の実行ファイルと、 まともなSDL_mixerのrpmを用意する。 ・それとは別に、アプリの.o(または、まとめて.aにするかも)とMakefileを用意する。 ぐらいにしておこうかと思います。 しかし、各ディストリビューション間のバイナリ互換性の低さは頭のイタイ問題ですな。
>>437 LGPL部分は差し替えれるようにしなきゃだめじゃなかった?
>>439 > LGPL部分は差し替えれるようにしなきゃだめじゃなかった?
その通り。だからアプリの.oを配布で正しいと思うんだけど。
アプリの.o + 差し替えたLGPLのライブラリ
で再構築可能だろ?
441 :
436 :04/07/08 11:56 ID:HbCYsiEE
LGPL部分を差し替え可能にする必要があるというのは当然として… ちょっと聞きたいんだけど… オブジェクトファイルだけあったら差し替え可能として認められるのかな? この時オブジェクトファイルのフォーマットとかは問題にならんのかしら? あ… 配布したスタティックリンクされた実行可能ファイルの元に なった.oさえあればOKってことかな?
>>441 オブジェクトファイルのフォーマットは、gcc の吐くような極一般的なものなら全然問題無いと思うよ。
>>440 の言う通り、君が作ったソフトウェアのオブジェクトファイルさえ入ってれば大丈夫だから、それで合ってるね。
SDL-1.2.7+WinXP+VC+++.net2003で下のソースで落ちてしまいます。 誰か助けてください。 #include <SDL.h> doubleax,ay; int main(int argc, char** args) { SDL_Init(SDL_INIT_VIDEO); SDL_Surface *screen; screen = SDL_SetVideoMode(640, 480, 8, SDL_SWSURFACE); while(true) { SDL_Event event; SDL_MouseMotionEvent mouse; while(SDL_PollEvent(&event)) { if(event.type==SDL_QUIT) { return 0; } if(event.type==SDL_MOUSEMOTION){ ay += mouse.x; ax += mouse.y; } } SDL_Delay(10); } }
ax,ayがオーバーフローすんちゃうの?
446 :
445 :04/07/10 22:47 ID:MW3XWIRh
「3. Input-Handling in der Praxis: Maus」 ってとこね。ってよく見たらドイツ語だ。すまん。でもソースは分かるよね。
終了する前にはSDL_Quitしてほしいと思います。
あと SDL_Delay() が一回も呼ばれない気がするのは気のせいか?
450 :
名無しさん@そうだ選挙に行こう :04/07/11 09:59 ID:E7W22GHh
>455がどんな解決方法を示してくれるのか。気になって夜も眠れない。
N速に書き込めません。 何とかしてください
SDL_Surfaceをクラス化してるんですが、例えば SDL_kanji の Kanji_PutText() みたいに SDL_Surface* を引数に取る関数を呼ぶときに楽しようと思って、 class CSDLSurface { ... operator SDL_Surface*() { return surface; } // surface は SDL_Surface* などとクラス内に書いたんです。でも Kanji_PutText( ... , screen, ... ); // screen は CSDLSurface とやっても、VC.NETに 引数を 'CSDLSurface *' から 'SDL_Surface *' に変換できません と怒られるし、(SDL_Surface*)screen とやってキャストして渡しても、クラスのアドレスが そのまんま渡ってるみたいでうまくいきません。そもそもなんで operator をオーバーロード してるのに型変換してくれないんでしゅか。
454 :
453 :04/07/12 00:39 ID:A2nXW2No
s/しゅか/しょうか/; # ○| ̄|_
>>453 > Kanji_PutText( ... , screen, ... ); // screen は CSDLSurface
Kanji_PutText( ... , screen(), ... );
じゃないかい?
456 :
453 :04/07/12 01:29 ID:A2nXW2No
>>455 screen()とやると、"関数には評価されません" と言われてしまいます、、
それと453に間違いがもう一つ
> Kanji_PutText( ... , screen, ... ); // screen は CSDLSurface
screenは CSDLSurface* です
>>456 > screenは CSDLSurface* です
じゃ、
Kanji_PutText( ... , (*screen)(), ... );
Kanji_PutText( ... , screen->operator(), ... );
のどっちかじゃない?
458 :
453 :04/07/12 23:23 ID:A2nXW2No
>>457 どうもお手数かけてしまってすみませんでした。
Kanji_PutText(..., screen->operator SDL_Surface*(), ...);
でコンパイルは通ったんですが、よく考えてみるとどうやらscreenがポインタ
であることが原因だったようで、
CSDLSurface screen; // ポインタにするのをやめた
...
Kanji_PutText(..., screen, ...);
みたいに、普通にクラスを渡せばちゃんと SDL_Surface* に変換してくれるんですね。
これってC++の基本ですか? 恥ずかしいかも。
でもなんか、クラスをポインタでなく保持するのはよろしくない、みたいな文章をどこかで
読んだ気がして、それが引っかかってなんか気が進まないです、、
gcc version 3.2 (mingw special 20020817-1)で実験してみた。 大体予想通りの結果?長文スマソ。 #include <iostream> using namespace std; class Foo {}; class Bar { Foo foo; public: operator Foo*() {return &(this->foo);} }; void hoge(Foo* p_foo_) { cout << p_foo_ << endl; } int main(int argc,char* argv[]) { Bar bar; Bar* p_bar = &bar; hoge(bar); // hoge(bar()); // no match for call to `(Bar) ()' // hoge(p_bar); // cannot convert `Bar*' to `Foo*' for argument `1' to `void hoge(Foo*)' hoge(*p_bar); // hoge((*p_bar)()); // no match for call to `(Bar) ()' // hoge(p_bar->operator()); // `class Bar' has no member named `operator()' return 0; }
foo* operator() と operator foo*() は違う
>453 ポインタなら単純に参照を外すだけでいい Kanji_PutText( ... , *screen, ... ); ただ、暗黙のキャストは怖いから、 楽しようと考えている程度なら、素直にGetterを作った方が良いと思う。
462 :
453 :04/07/13 23:44 ID:KSTvEm7j
ポインタの参照先を渡したらうまくキャストしてくれました。でも、仰るとおり 暗黙の型変換を故意に狙うのはよくないですね。それに、*screen で返って くるのがポインタってのも直感的でないですし。結局 SDL_Surface* GetSurface() const { return surface; } を加えました。
概念の質問になって申し訳無いんだが surfaceって、オブジェクト毎に作って良いんだろうか? 今まで俗に言うスプライトみたいな扱い方してたんだが。 背景なら背景で、画像合成させて1つのsurfaceにするのが普通なんだろうか?
>>463 とりあえず質問の意味がさっぱりわからん…
分からないなら黙っててください。
煽りキター
普通かどうかはベンチマークで決めればいい
>>463 漏れも何を聞いとるのかよう判らんのだが取り敢えず、
喪前さんの考える「Surface を一つにまとめることの長所」を教えてくれんかいの。
察するに割とどっちでもいいような気がするんだが……。
>>463 ではないが、複数の領域をバラバラに確保/解放することによる
オーバーヘッドやメモリの断片化による効率低下などがあるのか?
ってところじゃないんですかね。
Photoshopでレイヤーを統合するかしないかくらいの意味合いだろ
471 :
463 :04/07/22 22:21 ID:mBKaU+OV
試してみますた。 スクロールする背景部品3つを自分で合成したのと そのままほっといて普通に処理させた方で試してみた。 結果、そのままほっといて普通に処理させたほうが早かった… つまり、俺の書い処理の方がヘッポコでした。 メモリ使用量・動作速度でのメリットは全く無し、またsurfaceの数が 多すぎて判らなくなるなら、管理体制そのものを見直す方が良いっぽいです。
>スクロールする背景部品3つを自分で合成したのと 人間ダブルバッファをしたってこと?
サーフェイス毎にヘッダとか余計な情報が入るだろうから なるべく種類ごとぐらいにまとめておいた方がいんでないの とSDL使ったこと無いやつが言ってみるテスト。
474 :
名前は開発中のものです。 :04/07/26 13:45 ID:cbiqvpsK
SDLの入門のHPない?
サンプルを物凄い勢いで弄るのがいいらしいよ。
結局SDLは元々使うのがそんなに難しいライブラリじゃないし、 標準で付いてくるサンプルも充実してて解かりやすいから、 入門ページをわざわざ作る人があまりいないのかな、とオモタ。
みなさんはキーリピートってどう実装してますか? 落ちものゲーとか作るときって結構これがUIに関わってきますよね。 キーが押された時刻を覚えておいて、押されっぱなしのままX㍉秒経ったら キーがまた押されたことにする、とかするんでしょうか。 SDL_EnableKeyRepeat()みたいなのもあったんですがうまく動いてくれないんですよね・・
>>477 > キーが押された時刻を覚えておいて、押されっぱなしのままX㍉秒経ったら
> キーがまた押されたことにする、とかするんでしょうか。
うん。
>>477 自前で処理、に一票。
どっちみちキーボードとジョイスティックの両方で操作可能にしたいから、
自分で適当にラッパー書くのが楽だと思う。
SDL_mixerのMix_OpenAudioのバッファ値少なくすると 環境によっては激しく音質悪化するね… だからといってバッファ多くすると遅延が・゚・(ノД`)・゚・。
SDL_mixerが性能面でイマイチなのは、わりと周知の事実なのかも。 そんなわけで、いっそSDL_sound + OpenALとかでシステム組んで 公開してくれたりすると嬉しいです(と、人まかせ)。
>>482 まだ草案段階なんだったら、待つ必要ないんじゃない?
これから、
細部の詰め -> α -> β -> リリース
と行くと何年後になるやら。
Ruby/SDLでメモリ上にある任意のフォーマットの画像データ表示するにはどうしたらいい? Rubyで生成した画像データをGUIに表示したいんだけどdraw~なメソッドで描いていたらやたら時間がかかりそうだし Surface.loadはファイルしかロードできないし…
>>484 Ruby/SDL はよくしらないけど、
SDL_CreateRGBSurfaceFrom に相当するメソッドは存在しないの?
SDL_CreateRGBSurface は SDL::Surface.new に置き換わっているようだけど。
486 :
484 :04/08/09 23:55 ID:lqi/7vlX
>>485 >SDL_CreateRGBSurfaceFrom に相当するメソッドは存在しないの?
う~ん…displayFormatあたりだろうか…
実験してみます。
487 :
484 :04/08/10 16:19 ID:ojobLfTU
>displayFormat チュートリアルにサンプルがありました。どうやらサーフィス→サーフィスなメソッドのようです。 う~ん…1ピクセルずつ書いていくしかないのか…_| ̄|○
RubyだとBlitSurface が使えないってこと?
>>484 Ruby/SDL のソースをざっと見てみたが、SDL_CreateRGBSurfaceFrom は無いようだな。
処理時間云々を気にするなら Ruby 以外も検討してみるといいかも知れん。
>>488 SDL_BlitSurface はあるが、引数に Surface をとるからな。
>>484 の場合手元にあるのはメモリ上のデータだから、それを Surface にする手段が欲しいんじゃないか?
基礎的な質問なんですが、SDL使って作ったアプリってSDL.DLLとか必要になると思うんだけど、同梱配布していいものなの? 同人とかで売っても大丈夫なのですか?
>>491 動的リンクをして使うんだよね?
それなら、SDL.DLLのソースの入手方法さえ用意すればOK。
具体的には、そのソースを同梱するとか、本家のサイトのアドレスを説明書に入れとくとか。
LGPLライセンスについて、調べてみるべし。
>>491 俺は実際同人で売ってる。
で、CDの中にSDL.dllのバイナリの他に
SDL-1.2.7.tar.gz
LGPL
を入れてある。
ほっしゅ
495 :
491 :04/08/12 23:53 ID:wAr6hdR2
SDL.DLLってファイルのまま使うことを動的リンクって言うんですよね。 動的リンクで使う予定です。 入手方法もしくはソースを同梱すればOKなんですね。勉強になりました。 LGPLがいまいち理解できなくて、いつまでも踏み出せずにいました。 ありがとうございました。 実際やろうとしていた事をズバリやっている493氏のような人物も居て励みになります。
AllegroをMingw(+MSYS)上でビルドしてサンプルを眺めている所なんだけど、 これ日本語入力はどうすればよいのだろう? まだalfontは導入していないがデフォルトで日本語の表示は可能だし、 guiクラスに入力用のtextboxが用意されているようだが日本語は無理だ。 SDLは一応sdlskkなぞあるようだが。 Gtk+やTkからテキストウィジェットだけ拝借してくるしかないのかな。
>>496 つーか何故SDLのスレでAllegroの質問をしますか。
Ruby/SDLのSDL.transformってバグ持ちか? 拡大したときに下と右が削れる。 俺だけ?
500 :
名前は開発中のものです。 :04/08/19 06:31 ID:88YaKIPR
現在の画面解像度を取得する関数ありますか?
503 :
500 :04/08/20 10:57 ID:csZBm7g+
無いようですね。 サイズ変更させたくなかったんですけど妥協しときます。 ありがとうございました。
>>500-504 ……なんか間違えてないか?
SDL_GetVideoSurface() だけで事足りると思うんだが。
SDL_Surface* screen = SDL_GetVideoSurface();
printf("width, height: %d, %d\n", screen->w, screen->h);
みたいな。おれがなんか間違えてんだろうか……。
画像の拡大とか縮小って出来ないの? SDL_BlitSurfaceのSDL_Rect *dstrectってw,hが無視されてしまうし。 困った困った。
507 :
498 :04/08/21 00:43 ID:ELGMlgii
自己解決 ソースとなるサーフィスのサイズはぴったりではいけないようだ。 余裕を持たせたら削れなくなった
509 :
500 :04/08/21 01:20 ID:diBViIiV
サーフェイスじゃなくてディスプレイのサイズ知りたいんですよ。 winAPIのGetSystemMetrics(SM_CXSCREEN)みたいな。
>>506 SDL_SoftStretch は?あまし勧められた API でも無いみたいだけど。
>>509 SDL_ListModes は?一番大きいのを取れば多分良いかな…
511 :
名前は開発中のものです。 :04/08/21 22:11 ID:H0unQWjV
gl_kanjiを使おうとしているのですが これはいったいどこの部分にSDLを使っているのでしょうか?? ソースを見た限りではウインドウ表示ぐらいしかしていないような…。 ご存知の方いませんか?? というか、SDLがどういうライブラリなのかいまいち分かっていないです…ごみんなさい。 因みにSDL関係の関数(?)をウマーくOpenGLの関数などに置き換えたら、 SDL抜きの日本語表示ができました…!?何故だ~~?
512 :
505 :04/08/21 22:19 ID:qlUWPwIq
>>509 ああ、そういうことか。すまん、SDL_FULLSCREEN を前提にしちまった。
しかしそうなると
>>502-503 の発言が判らないんだが。
「サイズ変更」ってのは SDL_SetVideoMode かと思ったんだが、
それでディスプレイのサイズがとれるのか……?
SDL の Windows 部分のソースを適当に眺めたんだが、GetSystemMetrics(SM_CXSCREEN) は
DX5_SetVideoMode と DIB_SetVideoMode (どっちも SDL_SetVideoMode の下請け) でしか使ってないな……。
両方ウィンドウを画面中央に表示するために使ってるだけだし。
SDL_ListModes は EnumDisplaySettings か IDirectDraw2_EnumDisplayModes の結果を使ってるから、
これもやっぱり「現在の」画面解像度はとれそうにない。
……やたら長文なだけで全然解決案にならんなorz
>>510 SDL_ListModes の一番大きいの、おれは使ってないな……。
1600x1200 で使うと字が小さすぎて目が痛くなるorz
>>511 ……お前さん SDL_kanji と gl_kanji を間違えてないか?
513 :
名前は開発中のものです。 :04/08/21 22:34 ID:H0unQWjV
511です。
>>512 さん
間違えてないですよ。gl_kanjiも
#include <SDL.h>
#include <SDL_opengl.h>
ってなっています。
ウインドウ表示もSDL_SetVideoModeでやっていますし。
ひょっとしたらこれだけにSDLを用いているのかなーと思いまして。
514 :
505 :04/08/21 23:18 ID:qlUWPwIq
>>513 いや、おれは gl_kanji, SDL_kanji はおろか OpenGL も弄ったことのない軟弱者なんだが、でもやっぱりなんか違うと思うぞ。
今 gl_kanji を落として軽く見てみたが、
SDL 関係のヘッダを include してるのは、変換ツールとかサンプルとかのソースだろう?
gl_kanji の本体(?)は gl_kanji.cc と gl_kanji.h だけで、その二つは SDL とは関係ないんじゃないか。
つーか gl_kanji の readme.txt 読んでくれ。断言はできんがお前さん相当とっけんはっけんな質問してるような気がする。
SDL 判ってないっていうから念の為書いておくと、SDL と OpenGL の組み合わせには、
1. SDL 単体で使う、2. OpenGL 単体で使う、3. SDL から OpenGL を使う、って三種類あるぞ。
で OpenGL を使う気なら、gl_kanji つーのも選択肢に入ってくるだろうが、
OpenGL 抜きの SDL だけで日本語表示がしたいなら、
SDL_kanji か SDL_ttf を使うことになると思う。
どうでもいいがお前さん、2ch じゃメール欄に sage って書く癖つけておいた方がいいぞ。
……また無駄に偉そうな長文になってしまったorz
>>2 ch じゃメール欄に sage って書く癖つけておいた方がいいぞ。
失礼しました…m(_ _)m
gl_kanji.ccのヘッダに
#include <SDL.h>
#include <SDL_opengl.h>
と記述してあるのはI-Saintさんのgl_kanjiです。
多分、オリジナルのとはちょっと違うのかもしれません。
...あ、しかもgl_kanji.ccのヘッダではなくtestgl_kanji.cppのヘッダ
でした…申し訳ないです、お騒がせいたしました…orz
もう二度とプログラミングには手をつけませんから許してください。
>>515 冗談だと思うけど…
がんがれ!
んな事(゚ε゚)キニシナイ!!でプログラム書きまくれ!
517 :
508 :04/08/22 00:02 ID:pseiC9zk
518 :
506 :04/08/22 01:04 ID:WvVrOjz5
>>508 サンクス。sge_transform_surfaceってやつですかね。
今のところ拡大・縮小だけ必要なのでsgl入れるのは気が進まないです。
自作した方が良いのかなあ…
>>510 SDL_SoftStretch、検索してみたけどうまく見つかりません。
もうちと捜索してみます。
fpsをカウント表示するようにしたんですが、 フルスクリーンではfpsがリフレッシュレートと同じになったんですが、ウィンドウモードではとんでもなく多くなります。 アニメーションはSDL_GetTicksの値を利用しているので、早くなったりすることは無いですが、CPU時間は猛烈に食っていますよね。 ウィンドウ時になにか対策したほうがいいですか?
>>519 次のフレームまでの間に時間が余ってる間はSDL_Delay(0)でループさせるとか。
日本語の表示にSDL_kanji_f1bを使おうと思っているんだけど、 付属のサンプルがうまく動いてくれない・・・。 kanji_PutTextは問題なく動いてるっぽいのだが、 kanji_CreateSurfaceで作ったサーフェイスを SDL_BlitSurfaceで転送しようするとアクセスバイオレーションとか言われてしまう。 環境は Win2000 VC6.0 SDL-1.2.7(本家から落としてきたVC6用のバイナリ) です。 何故わかる人アドバイスprz
>>521 全く同じ環境だったから SDL_kanji_f1b 落としてきて試してみたんだが、普通に動くな……。
デバッガで追っかけて、具体的に何がバイオレーションを起こしてるのか探ってみるといいかも。
screen は kanji_PutText とかでも使ってるし text は kanji_CreateSurface 内でエラーチェックがあるから、
少なくともポインタが NULL になることはなさそうなんだがなあ。
BCCでライブラリをmakeしようとしたのですが、 エラー E2342 ..\..\src\video\windib\sdl_dibevents.c 189: パラメータ 'lpPrevWndFunc' は int (__stdcall *)() 型として定義されているので long (__stdcall *)(void *,unsigned int,unsigned int,long) は渡せない (関数 DIB_HandleMessage )とかいうエラーメッセージを吐いて出来ませんでした。 とりあえず該当箇所のソースを見て自分で直そうとしたのですが、見てみても それらしき記述が発見できず…。 誰かどこを直せばいいかアドバイスお願いします。 一応環境は Win98 BCC5.5.1 SDLのバージョンは安定版の1.2.7です。
524 :
521 :04/08/26 00:18 ID:bQrcHUhr
>>522 わざわざ試してくれてサンクス。
デバッガで追ってみたけどkanji_CreateSurfaceも成功してて、
SDL_BlitSurfaceの中まで行ったけどアセンブラばっかりで
よく分からなかったよ・・・。
日本語表示には別の方法考えるか・・・。
>>523 BCCは使ってないのでワカランのだが、
VC6用のバイナリ一式をimplibでBCC用に書き換える
っていうのじゃダメなん?
>>523 適当に環境構築して試してみた。おれの環境は Win2k なんだが、
それ以外は一緒だから多分参考になると思う。Win2k + BCC5.5.1 + SDL-1.2.7 。
お前さんの言うエラーの lpPrevWndFunc は、CallWindowProc の第一引数の仮引数名だ。
そのエラーは winuser.h 内の Call~ の定義のせいで出てる。で STRICT つーマクロを定義しとけば大丈夫。
つまり、Borland\freebcc\SDL.mak の 66 行目(辺り)の、
USERDEFINES = WIN32;BUILD_SDL;__FREEBCC__; ...
ってなってるその行の最後に「STRICT;」って書き足せばオッケーだ。
本当はその次の行にある SYSTDEFINES から NO_STRICT を消す必要があると思うんだが、
なんでか残したままでも問題なかったな。
で実はこれをクリアしても他にも問題が出てきた。それも適当に対処できたから次に続く。
そのままビルドするとコンパイルは通るんだがリンクの段になって
「Error: 外部シンボル '_SDL_HasMMX' が未解決(.\SDL-1.2.7\SRC\VIDEO\SDL_BLITN.OBJ が参照)」
みたいなエラーが来る。これは SDL_cpuinfo.c に定義されてるんだが、
SDL_cpuinfo.c のコンパイルが makefile にまるで書いてないのが原因。
なので、Borland\freebcc\SDL.mak の 70 行目(辺り)の
PATHCPP = .;..\..\src; ...(以下略)
ってなってる行の最後に「;..\..\src\cpuinfo」を追加して、
後 50 行目(辺り)の
..\..\src\video\SDL_blit.obj
に書き足して、
..\..\src\video\SDL_blit.obj ..\..\src\cpuinfo\SDL_cpuinfo.obj
にすればビルドできる。SDL-1.2.7\test\ に SDL.dll と SDL.lib が出来てるはず。
本当は SDLmain.mak にも間違いがあってビルドできんのだけど、
>>523 の implib で解決するんならそっちでやってくれい。
……ああ、やっぱり長文になってもうた。
>>525 ありがとうございます。何故かmakeはILinkで止まってしまいましたが…。
SDLのソースをちょっと弄って使いたい場合はimplibだと無理ですよね?
色々ぐぐってみたところ
ttp://www.mediawars.ne.jp/~freemage/progs/sdl/sdl4bcc.html にSDLmain.libの修正方法が書いてありましたがSDL_dibevents.c
辺りを弄って使いたい場合にはどうすればいいのでしょうか…
そういえばmakeはobjファイルを参照しているということは一度ソースから
objファイルを生成してからmakeしないと変更が反映されないんですかね?
makeの仕組みが未だによく分かってません…。
528 :
525 :04/08/26 19:11 ID:c70JkN3E
>>527 うん? ILink で止まるから
>>526 を書いたんだが……。
SDL_dibevents.c を弄っても SDL_main.lib にゃ関係ないと思うぞ?
影響が出るのは SDL.lib の方だけだと思うから、
SDLmain.lib は Borland\lib\ にある奴でいいんじゃないか。
SDL_dibevents.c を弄りたいんなら好きに弄って make -f SDL.mak でいいと思う。
SDL_dibevents を弄りたいっていうと、DIB_CreateWindow とか書き換えて、
フルスクリーンで解像度変えた時の他ウィンドウのサイズ保持とかやりたいのかしらん。
>そういえばmakeはobjファイルを参照しているということは
……その辺勝手にやってくれるから便利なんだと思うぞ。
あ、よく見たらビルドできてました。 いや、SDLからIMEの文字列を取得しようと思ったんですが、そのままだと メッセージが取得できないらしくて、少しソースを書き換える必要が出てきたんですよ。 何にせよとりあえずはこれでうまく出来そうです。ありがとうございました。
最近、SDLとOpenGLでゲームを作っているのですが、 日本語入力のあたりでどうしようか考えてしまっています。 SDLは素晴らしいのですが、日本語入力が絡んで来ると、 せっかくマルチプラットフォームなのが有効に利用できないので、 皆で、SDLで動く日本語入力機構を作りませんか? 各々のOSの入力機構を使うか、それそのものを作るかもなにも決まってませんが、 今のところ、WindowsではIME、LinuxではXIMかIIIMFを使うといいかな、 と思っていたりします。
532 :
529 :04/08/27 17:05 ID:pn3VuAxV
とりあえずビルドも成功して、プログラムを書き始めたのですが、 C++でSDL使ったプログラムを書くときに何か注意するところはあるでしょうか? というのも、書いたプログラムをメイクしてみると Error: 外部シンボル '_main' が未解決(E:\BCC55\LIB\C0X32.OBJ が参照) という何だか?なエラーが発生して少し困っているところなのです。 ちなみに、コンパイル時には-WC、-DDEBUG;WIN32をつけてコンパイルしました。 (他にも色々あったのですがとりあえず関係ありそうなものだけあげました)
int main(int argc, char* argv[]) にする
sdl-config --libs
トリップつけた。 うーん、すっげー適当な調査しかしてないんだけど、処理の流れとしては 1.SDL_GetWMInfo() でウィンドウシステム固有の情報を受け取る 2.IME が処理してる情報をコールバックで拝借する 3.共有 API によってウィンドウシステムに依存しない情報を得られるようにする って感じが良さそうな気がする。 共有 API で取得できるべき情報はこんなとこだろうか。 ・現在の漢字入力の ON/OFF ・現在入力中の文字列 ・変換確定を行ったかどうかの情報 ・確定後の文字列 わー、よくわからない! 結局変換中の小さいウィンドウを出す座標も設定出来ないと駄目だよなー。 Qt のソースでも読もうかな。 ↓続く
せっかくマルチプラットフォームな環境で走るSDLなので、 共通のAPIを提供しておいて、そのAPIが各々のOSの ネイティブな入力機構を使うのに賛成です。 Mac OS Xに関しては、X11を使っている場合に限っては、 Linuxなどと同じX11経由の入力機構が使えると思います。 私はLinuxでSDLを動かしているので、X11(XIM経由)を少しやってみます。
ふと思ったのですが、日本語入力機構だけ提供するのが良いのか、 それらを含めたSDLを使ったGUIを提供した方が良いのでしょうか? 入力している時の、変換候補などの表示や、入力欄の事を考えると、 そこだけ他のGUIと違ってしまうのも変な感じがしなくもないのです。 簡単なGUIも一緒に提供するのも良いかもしれない、と思うのですがどうでしょう。
539 :
529 :04/08/28 13:34 ID:D9fRqR5k
>>533 とりあえずmainはSDL_mainに置換されるという話なのでもちろんint main(int argc, char* argv[])
は書いているのですが、それでもError: 外部シンボル '_main' が未解決(E:\BCC55\LIB\C0W32.OBJ が参照)
が表示されるというのは謎ですね…。このエラーメッセージが何を言っているかがいまいちよく分からないのですが、
多分システムからコールバックされるべき_main、が無いってことなんですかね?
SDLmain.libでそっちの方が定義されてるはずなのに…orz
>>538 私は完璧に素人なのでこんなことにコメントするのもちとあれなのですが、
GUIごと提供してくれるとかなり便利そうな気もしますね。
540 :
名前は開発中のものです。 :04/08/28 15:30 ID:YZXmLvih
>>538 とりえあず日本語入力機構だけを提供した方がいいと思います.
GUIは結局アプリケーション作る人次第な気がするので…
7以降ってどんだけの人材と時間が費やされてるんだろうな? よくあのペースで発表・発売できるもんだよ。 俺も将来はあのくらいの会社をもちたい。
うはwwww 誤爆です。
>>538 GUI 部分はあとからでも付け足せるから先に入力機構だけでいいんじゃないかな。
と思いながら Win32 部分を作ってたんだけどさ、
まさか編集可能なウィンドウ(テキストボックスなど)が付いてないと
IME を入力可能状態にできないウィンドウシステムってある?
どうも上手くいかないんだけど、Win32 とかはそうなってるのかな。
うーん、ちょっと怖いなあ。GUI セットじゃないと厳しいかな。
とりあえず共通 API は、
・ネイティブな C で書く
・初期化関数で構造体を生成してポインタを返し、終了関数で開放
・ポリモーフィズムは構造体内に関数へのポインタを保持することで実装
・各処理系ごとにプリプロセッサで分岐し、初期化関数内の処理を切り分ける
って感じでいいかな。
SDL 本体内部の SDL_rwops や、多くの SDL 系ライブラリで使用されてる方法だから、
ソースを読めばもっと具体的な実現方法は把握できると思う。
ある程度各処理系の情報、実装の方向性がまとまってきたら、
共通 API を作るためのフレームワークを実装するよ。
一応 smpeg みたいな例もあるし、C++ で書いても問題は無いと思うけど、どっちがいいかな。
544 :
529 :04/08/29 10:00 ID:o5xfi0oD
相変わらずうまく行きませんな…。 公式ページからSDL.dllをダウンロードしてきてimplibでSDL.libを生成して、 SDL_win32_main.cをコンパイルしてSDL_main.libを作っても駄目でした。 最近のソースにはBorland用のライブラリ一式があるんですがあれは使っていいのでしょうかね? Error: 外部シンボル '_main' が未解決(E:\BCC55\LIB\C0X32.OBJ が参照) もう見飽きた…orz
>>544 一応、念のため聞いておくが、
SDL.libはリンクしているけどSDL_main.libをリンクし忘れているなんてことは無いよな?
$ sdl-config --libs -L/usr/local/lib -lmingw32 -lSDLmain -lSDL -mwindows
あ。
>>546 のはMinGW+MSYSのほうかもしれないすね。
550 :
529 :04/08/29 19:35 ID:o5xfi0oD
>>545 SDL.libとSDL_main.libは同じフォルダにおいてフォルダにリンクをしてるので
多分し忘れということは無いと思うんですが…。
>>549 -Wを入れると今度は
Error: 外部シンボル 'WinMain' が未解決(E:\BCC55\LIB\C0W32.OBJ が参照)
となるんでどうしたものか…。
一応構造的にはSDL_main.libの_mainやらWinMainがコールバックされてそこから
mainが置換されたSDLmainの方に制御が移されるんですよね?
それともそれをやるにはコンパイルするときにコマンドラインオプションが必要とか?
もうわけわかんないです…。
まずはtdumpとかでSDL_main.libにWinMainや_mainが存在することを確認した方がよいのでは。
>>550 > 一応構造的にはSDL_main.libの_mainやらWinMainがコールバックされてそこから
> mainが置換されたSDLmainの方に制御が移されるんですよね?
どう考えてるのかよくわかんないんだけど、実際には
1. SDL_win32_main.c の中の WinMain() が呼ばれる
2. その WinMain() が consol_main() を経由して SDL_main() を呼ぶ
3. SDL_win32_main.c が SDL_main.h を include しており、
その中で main() が SDL_main() として define されている
という作りになってる。
要するに、SDLmain.lib の中の WinMain() によって起動して、
その WinMain() が君のソースの中の main() を呼ぶって仕組み。
WinMain() で起動するために -W オプションは必須だね。
BCC が使う OMF っていうオブジェクトファイル、ライブラリファイルの形式では
関数の頭にアンダーバーを付けることになってるっぽい。
従って、main() をリンクする時には _main って部分を探すんだよ。
「bcc32.exe に -W オプションをきちんとつけて」
「`SDLmain.lib' と、`main() のあるソースから作った .obj ファイル' の両方をきちんとリンクする」
というプロセスが必要だよ。
常にどれかが抜けてるんだと思う。
うーん、Win32 では編集可能なウィンドウが無くても IME を ON の状態にはできるんだけど、 このまんまじゃ入力状態を取得できないなー。 表示すらしてないわけだから入力事態が行われてなさそう。 やっぱり GUI をセットにしないと駄目っぽい。 とりあえず、枠線付けただけのテキストボックスを CreateWindow() して その GUI 内で IME による入力をできるようにしてみるよ。 こういうアプローチを取ると IME による入力部分だけ OS 依存のフォント表示になってしまうけど、 その辺はもっと煮詰めてから考えることにする。
554 :
529 :04/08/31 00:00 ID:QiRAdHy6
自己解決した。
555 :
529 :04/08/31 00:27 ID:mI6iYA96
>>529 ??まだ解決してませんが。
まぁもうちと粘ってみます。何か進展(&壁が)あったらまた来るかもしんないです。
556 :
529 :04/08/31 00:29 ID:mI6iYA96
SDL_SysWMinfoではなくて、各々のOSからのメッセージが入ってる構造体の方を、 SDL_PeekEventかなんかで定期的にチェックするのが良いのかも、と思っています。 最初はSDL_SysWMinfoのwindowのIDを使って、イベント自体を自分でマップしようとしていたのですが、 どうもSDL自体がマップしようとしてるイベント等と衝突する可能性もありそうなので、 イベント自体はすべてSDLに任せといて、SDL_Event構造体にある、SDL_WMMsg(やったっけ?)のwindow に対するメッセージをチェックしつつ、もしそれがIM関連だった場合のみIM関連のものを実行するのが良いかもしれません。 実際にテストでやってみて、できたらまた書きます。 OpenGL使ってる場合は、別にコンテキストが用意されてるみたいなのですが、 WindowsでのOpenGLの扱いがどうなってるかは良くわからないので時間かかるかもしれませんが・・・。
GUI を使うってのは、ウィンドウシステム(この場合 Windows)標準のテキストボックスを使うって意味で、 子ウィンドウ(この場合テキストボックス)を作るために SDL_SysWMinfo を使ってるって意味で言ってたんだけど、 アプローチが違うから伝わってなかったみたいでごめん。 で、Windows 側でテキストボックス(エディットコントロール)を置いてみたんだけど、 どーしてもキーボードからの文字入力ができない。 まあよく考えると DirectX や OpenGL を使ってプライマリに描画されると 子ウィンドウは消えてしまうから元々この方法じゃ駄目かも知れないけど、 貼り付けや切り取りなんかはできるのに 一切の文字の入力ができないのはやっぱりおかしい。 と思ってソース読んでみたら、SDL め、 メッセージループでキーボードイベントを SDL の中に取り込んだあと Windows 標準のウィンドウプロシージャーに渡さず破棄してる。 当然ウィンドウにキーボードイベントは通達されず、文字入力は不可能。 ALT+F4 での終了や ALT+SPACE でのメニュー出現が動かないのもこのせい。 そこで SDL_WMmsg を使ってみようとしたんだけど、 SDL で拾えなかったものだけを扱ってるもんだから Windows 固有のキーボードイベントは破棄されててどうやっても取得できない。 もう一段ウィンドウプロシージャを噛ませるしか無いかな。 こりゃ大変だ……
な、長すぎる。なんかスレ違いになってきてごめん。どっか別の場所に移動するよ。
なんとなく。 Anthyのライブラリを使って自前で漢字変換するようにすればよいのではないかと思った。 sdlskkも同じような方式だっけ?なら同じようなのを増やしても意味無いな・・・。
>>560 意味あると思うよ。
skkは操作系がかなり独特だから対象ユーザが限られるけど、
Anthyなら普段は別のIMEを使用している人もそれほど違和感なく使えると思うし。
>>558 ゲームのWindowと別のWindowを作ってそこで入力するのであれば、
それは既にやった事があります。(gtk+-2.xを使いました)
ゲームのWindow内に直接入力したいな、と思ってます。
恐らく、SDL_ttfを使うことになると思います。
>>560 自分で変換エンジンを作ってしまうのもよいのですが、
なるべく、ユーザーが使っているIMをそのまま使えるようにしようと思っていたので、
cannaやanthyではなく、XIMやIIIMFを操作する方法を探っています。
ただ、anthyなどを使って変換してしまうのも一つの手段ですし、
比較的簡単にできるかもしれませんね。
今少し時間がなかったりするので何もできてないのですが、
とりあえず私はXIMを操作する方向でやってみる予定です。
うごご、やっとなんとか動くもんができたよーん。
http://gamdev.org/up/img/1165.zip 中身の test.zip の中にサンプル入れてある。
現在 Win32 用の処理のみ。
自分で IME 処理を実装することもできるから、
フリーな IME があったら自分で機能を追加できるよ。
まだテストが不十分だからあちこちにバグがありそう。注意!
>>562 いや、Windows 標準の入力機構を使おうとしたってこと。
Windows では、テキスト入力部分もウィンドウの一種として扱われてるんだよ。
あと、SDL_ttf は仕様レベルでのバグもあるし、
文字描画エンジンをユーザーが選ぶことができなくなるからできれば使いたくないなあ。
一応、上のライブラリでは単純な変換状況取得しかできないようになってる。
ライブラリの使い方サンプルプログラムでは SDL_ttf を使って描画した。
562ではないですが、SDL_EventからXEventへ変換して、 それをXFilterEventしてやればXIMでも大丈夫なような気がしてきたのでちょいやってみます。
566 :
564 :04/09/07 02:23 ID:aIh9QYNB
それっぽく動いたけど、キー取りこぼすし、終了できないし。 プロトコルとかまで調べないといかんかなぁ。。。 だれかXIMの挙動に詳しい人っている?
うーん、VMware に FreeBSD 入れてみようと頑張ったけど インストール途中でこけるなあ。 とりあえず、MacOS 9 と MacOS X の入ったマシンを一台ずつ持ってるから、 そっちで Mac 版を作ってみるよ。 Mac の IME のインターフェイスは Text Service Manager ってんだっけ。
>>568 基本的な仕様は現在ので良いと思います。
ひとつ提案があるとすれば、SDL_PollEventでイベントがなかった場合にIM関連のイベントを調べるのではなく、
User DefineなイベントをSDLのイベントキューに入れて、SDL_PollEventのループ内で他のイベントと同じように
処理できるようになればよいかな、と思いました。
>>566 私も531さんの仕様に沿った形で、XIMでの実装していたのですが、なかなか難しいですね(汗。
というのも、win32.cのように、自分でprocを作って、そっちで必要なものを処理した後、
SDLのprocにメッセージを渡す、というような形が取れれば一番良いと思うのですが、
X Window Systemでは、イベントが起こるたびに呼ばれるコールバック関数を設定する、というのはなく、
SDLが常にイベントを見るためにループしてるので、どうやってイベントをSDLより先に取得するかで悩んでます。
一応、XReparentWindowとかいう関数で、無理やり自分の作ったwindowをSDLの描写windowの親にして、
wmwindowの方はXUnmapWindow関数でマップをはずす事でなんとかSDLより先にイベントを取れるようになったのですが、
今度はXIMの仕様でなかなかわからなくて・・・。
XIMでは変換だけIMに任す、というのはできないらしく、必ず
何を入力しているのか、というのがXIMによって描写されてしまっている感じがします。
なので、変換中の文字列が取得できるにしても、すでにXIMによって画面に描写されている感じになってしまうかもしれません。
もしXやXIMに詳しい方がいらっしゃれば、その辺り教えて頂けると嬉しいです。
長くてすいません(汗。 なんかサイトとか立ち上げた方が良い気がしてきたりしますがどうでしょう?
571 :
564 :04/09/08 03:05 ID:/gyCnV3K
あ、かぶってしまった
>>569 http://gamdev.org/up/img/1198.zip kinput2 + canna で一応動いた。test/main.cは書換え無しでほぼ同じ挙動をするはず。
skkinputでは動かなかった。
on-the-spot とかいうスタイルを使えば描画も全部アプリケーション側でいけるはず。
いちいち全部描画をアプリケーションでやるのは面倒なこともあるかもしれんので、
ネイティブなIMEウィンドウで描画する方法もあったらいいかもしれんと思う。 >>仕様
>>570 たしかに、あったら助かるかも。
>>571 おお、やった!
っていうか SDL_EventFilter 使ってたんだね。
> ネイティブなIMEウィンドウで描画する方法もあったらいいかもしれんと思う。 >>仕様
SDL_rwops や SDL_rotozoom みたいに本体と分離できないかな。
SDL_inputmethod 自体に描画を入れるのを嫌がってるのは
ユーザーに何らかの制約を課したくないだけだからなんだけど、
ほら、使わない場合にまでわざわざ SDL_ttf を入れるのって面倒じゃない。
もっとプリミティブな部分を前面に押し出していった方が
ユーザーとしても使いやすいと思ってたんだけど、そうでもないのかな。
そういう意味で
>569
> User DefineなイベントをSDLのイベントキューに入れて、SDL_PollEventのループ内で他のイベントと同じように
> 処理できるようになればよいかな
とも考えてたんだけど、
IME 処理は SDL 本体のイベントループと別の場所で
単純に処理できた方が楽だと思ってわざと今の仕様にした。
仕様に関しては他の人の意見も参考にしたい。
>>572 あらら、SourceForge.jp にでもプロジェクト立てればいいやと思ってたんだけど、
それは大体出来てからでいいかな。
っていうか LGPL で問題無い?
>573
おちけつ
ちょっと家に帰ったらテストプログラム修正する。
トリップ忘れ。上司が後ろを通って焦ってしまった。
>>576 確かにSDL_inputmethod自体は描写に関するものは一切含まないようにしておいて、
もしそれが必要でありそうなら、SDL_inputmethodに対するラッパーを書く方が良いかもしれませんね。
sourceforge.jpはまったく頭に無かったです。
もしそっちでできるのであればそっちの方が良さそうですね。
SDLでIMを使いたいな、と思ったのもゲームを作ってたのが原因なので、
今作ってるものにSDL_inputmethodを使ってみます。
578 :
564 :04/09/08 16:06 ID:5bciN7sZ
あー、ネイティブっていうのは、OSネイティブのIMっていう意味。 WindowsだったらMS-IMEの変換ウィンドウっていう意味で。 それだったらどう?
うーん、調べた限りだと、Windows の仕様では DirectX なんかで プライマリバッファに描画するようにした時、 どうしても OS ネイティブなウィンドウがプライマリバッファで上書きされてしまうみたい。 Windows の場合は変換中の文字列も一つのウィンドウの中の表示という扱いで、 プライマリバッファに上書きされてしまうから、そういう条件下ではどうしても自前描画になるっぽい。 基本的な知識が足りてないから曖昧な言い方になってしまった。 わかりづらい説明ですまん。 結局 OS 自体に入力部分を描画させるのは難しいみたい。 俺の知識不足である可能性も充分に有り得るから、 誰か解決方法知ってる人がいたら情報お願い。
581 :
564 :04/09/09 03:39 ID:b9WTMygk
>>579 なるほど。じゃあ、やっぱ
プリミティブな部分ライブラリ + それのラッパみたいなライブラリ
っていう構成がいいのか。
CVS版のsmpegなんですが、 smpeg/video/MPEGvideo.cppのMPEGvideo::Stopが以下のようになってます。 297 MPEGvideo:: Stop(void) 298 { 299 if ( _thread ) { 300 SDL_WaitThread(_thread, NULL); 301 _thread = NULL; 302 } 303 ---- 304 playing = false; 305 ---- 306 ResetPause(); 307 } playing = false;をSDL_WaitThreadの前にしないと何時までもStopしないと思うのですが…。
583 :
582 :04/09/12 22:51:21 ID:Y32NRKdw
> 303 ---- > 305 ---- の----は無視してください。
音沙汰がないと思ったらそっちでやってたのか。
すいません。休刊になったLinux japan最終号の付録CD-ROMについてた"SDLバカ一代"のpdfは公開されているものでしょうか? Linux japan最終号は出版元にも既にバックナンバーがない状態でして、SDLの貴重なドキュメントを逃したことが非常に残念です。。 Linux japanのいくつかの連載記事は出版元の協力を得てpdfで公開されているので、"SDLバカ一代"についても期待をしているのですが...
GtkSDLをWindows上で動作させることは可能だろうか?
尋ねる前に自分でやってみるべきだた。 どうも無理ぽい。 gdkx.hをgdkwin32.hに、GDK_WINDOW_XWINDOWをGDK_WINDOW_HWNDに書き換えて -mms-bitfields付けてgcc3.2.3でコンパイルしたところ、 SDLのウィンドウとGTK+のウィンドウの二つが。
おちる。。
ゲームの効果音って、Mix_LoadWAVあたりで全部pre-loadするのが一般的なのかな?
>>592 一般的かどうかは知らんが、オレはそうしてる。
俺もそうすることが多いけど、会話シーン中の効果音程度ならその場で読み込んでる。 RPGやSLGなんかもその場で読んで充分じゃないかと思う。 リアルタイム要素の強さ次第かな。
595 :
592 :04/09/20 00:02:29 ID:qEnIINch
SDL_Init(SDL_INIT_VIDEO|SDL_INIT_TIMER)が失敗するのは具体的にどんな時なのだろう……
ソースを読むのが確実なんじゃないですか
>>596 とりあえずSDL_GetError()。
で、そのエラーを出してる部分のソースを読むしかないんじゃないかな。
ちょいとみなさんに聞きたいのだが、 画像の回転表示ってどうやってますか? OpenGL使うという方法もあるのかも知れませんが、一応それ以外で。
>>601 どうやってといわれれば、回転させるプログラム組んで。
SDL_gfx SGE
SDLでサーフィスを拡大・縮小するにはどうしたらいい? Ruby/SDLのSDL#transformみたいなことをRUDLでやりたいんだが…
605 :
名前は開発中のものです。 :04/10/24 21:43:30 ID:f3AiXIG4
SDL_ttfでアンチエイリアスを効かせるには、どうすればいいんでしょうか?
>>603 SDL_gfx SGE のどっちかを使え。
それぞれどういうものかは自分で使って確かめろ。
>>605 TTF_Render*_Shaded() TTF_Render*_Blended() のどっちかを使え。
どういう差があるのかは自分で使って確かめろ。
ドキュメントが少ないのは事実だが、
いくらなんでももうちょっと自分で調べないと何もできないぞ。
このぐらいの情報はすぐ見付かる。
フォントをbmpにレンダリングするツールと、そのbmpを使って日本語を表示するものを作ってみた しかし4MByte近いbmpになってしまった でけーなぁ 透過pngにすると使い勝手はいいんだが、内部ではどれくらいに展開されてるんだろ
608 :
605 :04/10/25 22:33:39 ID:snYpUN8B
>>606 駄目ですた。
SHADEDは背景色が透過されずに表示されて、BLENDEDは何も表示され
ませんでした。
OpenGLのテクスチャに使うために、一度2の累乗サイズのサーフェイスに
Blitしてるのが原因なのかもしれないです。
SOLIDの場合はちゃんと透過されてるのに、何故なんだろう・・・。
609 :
605 :04/10/25 23:43:05 ID:snYpUN8B
すみません、出来ました。 SDL_ttfから取得したサーフェイスを、2の累乗サイズのサーフェイスに Blitした後に、ttfのサーフェイスにアルファフラグを書き戻してやらないと いけないみたいです。 何故こうなってるのか、未だにさっぱりですが、ともかくこういう物の ようです。 どうもありがとうございました。
610 :
606 :04/10/26 00:44:33 ID:zFRaLOBe
>>609 「アルファフラグを書き戻す」ってのがどういう行為を指してるのかちょっとよくわからなかったんだが、
SDL_ttf の Blended 系では、
・フォントを描画した Surface を返す
・階調的なアルファブレンドも行う
という二つの条件を満たすために
返した Surface の中にアルファチャンネルを含めてある。
で、新しいサーフェスに Blit したりして
サーフェスをいくつもまたぐ時に問題になってくるのがこれ。
http://zinnia.dyndns.org/~cvsweb/sdldoc-jp/sdlblitsurface.html > blit 操作の結果は SDL_SRCAPLHA がセットされているか否かによって大きく変化します。
> これがどのように結果に影響するかについては、 SDL_SetAlpha を見て下さい。
ここら辺をちゃんと設定してなかったんでないかい?
ちょっと情報が少ないから推測でもの言ってるが。
ところで、最初に提供してもらった情報が少なかったとはいえ、
この条件下なら確かに混乱して質問してもおかしくないわな。
キツい言い方して悪かった。
612 :
603 :04/10/26 20:49:27 ID:8Om0IHEs
???
613 :
605 :04/10/26 23:10:01 ID:tqT7U+dq
>>610 どうもです。
「アルファフラグを書き戻す」というか、Blitする前に
文字を書いたサーフェイスのSDL_PixelFormatのcolorkeyと、
alphaを保存しておいて、Blitした後に同じサーフェイスに
再度セットしなおすとうまく行くんです。
そのサーフェイスは後は解放するだけで、全く使わないんですが
そんなものなんでしょうか。
SDL_SRCALPHAとかSDL_SRCCOLORKEYとかは色々やってみたんですが、
全く駄目駄目でした。
スレ汚しでしたが、どうもありがとうございました。
ところで、SDLの書籍ってないの? 探しても見付からない。できれば日本語が良いけど最悪英語でも良いかな。
翻訳すっか。 誰か英語に強い人いない?
617 :
名前は開発中のものです。 :04/10/28 10:03:12 ID:tuc1m51K
>92 SDLってLGPLだよね? LGPLはソースコード公開の義務はなかったはず ソースコード公開の義務があるのはGPL LGPLはリンクし直せなければいけなかったはず でもWindows版はDLLになっているから大丈夫なのかな? その他のプラットフォームならリンク前の物も入手できるようにしないといけないのか? 「欲しい人はメールください」ってREADMEにメアドといっしょに書いておけば、 常時アップしておく必要はない気がする 詳しいエロい人教えて あとSDLを使ってること、SDLがLGPLであることはきちんとREADMEに載せないといけないよね?
いかなるオープンソース/フリーソフトウェアを使うに際しても
ライセンスを理解して同意するプロセスは必要不可欠.
つまり
>>617 にSDLを使う資格はない.てか DirectX で十分だろ.
>614 日本語リファレンスは見た?
622 :
620 :04/11/03 15:03:02 ID:oDGcAACs
なるほど、Dでも使えるように変換しなければいけなかったのですね。 先ほど試しましたところ、ビルド自体は成功しました。(テストはまだですが 大感謝です。
SDLで作られた面白ゲームの紹介ってのはどうだろう? ABAゲームなんていいよなぁー。
>625 言いだしっぺはリンクはるべ で、ABAゲームってなに?
積み木シューティングとかトンネルシューティングとか凄いね。 センス良くてかっこいい
うお!新作出てたのか!覗く機会をサンクスコ
うわ、またスレが止まってる
最近すぎw
77人目だったよw
634 :
名前は開発中のものです。 :04/11/20 16:16:58 ID:JtgNvmeY
78人目
80人目だったよ ってキリ番ゲットか?w
100人目ゲッツ
いいな、サイトの主に内緒でキリ番ゲットっていうのもw 漏れは残念ながら102番
>>631 なかなかいいホームページじゃないか。
と言いつつ、104ゲット
111ゲット!やった! 画像がJPEGだとか、ちょっと日本語がおかしいだとかを除けば結構いいサイトだね。 こういう一連の流れを追って説明する日本語サイトはあんまり無かったから。
なにやったんの前らw
ttp://tokyo.cool.ne.jp/sdl/ 初心者の(rのメモでLittle3DとG3Dの紹介がちょっとだけあったけど
他にもだれか3Dエンジン使って人いますか?
よかったら使用感とかお勧め度とか教えてください
OpenGL触ったことないんでエンジンに頼ろうかと思ってます
ネタがない…
夜の町を歩こう!
で、職質を受けると('A`)
645 :
名前は開発中のものです。 :04/11/23 09:35:34 ID:BlAzMHZX
あっなたのおっなまえなんて~の?
名前は開発中のものです。
>645 >646 ハゲワラタ
オレもワロタ
650 :
名前は開発中のものです。 :04/11/27 22:55:24 ID:JASdTwIV
浮上します SDL公式で紹介されてるゲームをいくつか落としてやってみたけど 結構しょっぱいの多いのな
>>650 まあ、しょっぱいのが多いってのはSDLに限らんな
SDL2.0ってどれくらい進んでるの?
654 :
653 :04/12/04 23:29:31 ID:xbb3uNtl
ひさしぶりにのぞいたのでageておこう
開発終了か
SDLの開発者に関する記事とか、プロフィールとか載ってるサイトしりませんか?
現状で必要最低限あるからな 機能的に増やす必要があるんだろうか 2.0はどんな機能があるの?
SDLアプリで一番使うのは、ONScripter
クレジットの中にC Magazineってあった そういえば前に特集でやってたな
>631 ヤター1000ゲット!
kyraってどうですか? 日本語使えます?
>665
これだよね?
ttp://www.grinninglizard.com/kyra/ Kyra - A simple and powerful Sprite engine written in C++.
日本語使えるっていうのは日本語表示ができるかってことでいいの?
コンパイルするの面倒くさかったから落としてざっとソース見てみたけど
そのままでは表示できないっぽい
とりあえず使ってみたら?
SWF(Flash)再生ライブラリって無いもんかね…
OpenSWF
SDL version 1.2.8 release!
Sam氏慌てすぎ。
>>670 ん?何があったの?
それよりも個人的には、SDL_imageとSDL_mixerの新バージョンが出て、
* Updated libtool support for new mingw32 DLL build process
と書いてあるのが嬉しい。
これで、いちいちローカルでパッチ当てたりする必要が無くなった。
MLにSDLとSDL_image、SDL_mixer、SDL_ttfのAnnouncingが流れたが、 空のメールを送ったりしてtake2が流れた。
>>672 なるほど。おちゃめさんだな > Sam氏
パッケージミスとかかと心配したんだけどそうじゃなかったようで良かった。
バグフィックスで特に変更点はなしってことでいいのかな? MacOS Xの名前が見られるけどよくわかんね >671 >1.2.7: Updated libtool support so Mingw32 builds work. 公式のところには1.2.7のところに書いてあるけど、どうなの?
>>674 1.2.7 のアナウンスでは DLL じゃなくて so って書いてるから、
その頃はまだ .so ファイルしか出力してなかったんだと思う。
今回から添付してあるファイルで DLL を作れるようになってる。
676 :
671 :04/12/19 22:51:20 ID:JJa4+n8j
>>674 SDL本体は直ってたのに、
SDL_imageとかmixerとかは修正後一度もリリースが無かったので直ってなかった、
ってことだよ。
677 :
名前は開発中のものです。 :04/12/20 03:01:45 ID:lAq5Jb7W
OpenGLを使いたいときってどうすればいいですか? SDL_OPENGLを使うという所まで調べましたがそれだけだと例外がでて終了してしまいます。 初期化が全然わからないので解説やコードがあるサイトがあれば教えてください。
SDL_GL_SetAttribute( SDL_GL_DOUBLEBUFFER, 1 )でバブルバッファ有効 SDL_SetVideoModeのオプションにSDL_OPENGLを追加 画面の更新はSDL_GL_SwapBuffers 多分>678のサンプルの SDL_GL_SetAttribute( SDL_GL_RED_SIZE, 5 ); SDL_GL_SetAttribute( SDL_GL_GREEN_SIZE, 5 ); SDL_GL_SetAttribute( SDL_GL_BLUE_SIZE, 5 ); SDL_GL_SetAttribute( SDL_GL_DEPTH_SIZE, 16 ); はなくても大丈夫だったと思う
まずはソースアーカイブ(SDL-1.2.8.tar.gz)に入ってる、 testgl.c, testdygl.cを読んでみるのがいいんじゃないかな。
SDLでマルチウインドウって… できませんね?
>681 2つ以上のアプリケーションを作ってアプリケーション同士でプロセス間通信とか?
>>681 FOX だったか FLTK だったかを使ったサンプルプログラムを本家 ML で見かけたぞ
ビデオ関係のソースを見るとわかるが、
SDL で利用するウィンドウは一つだけだと開き直ってるために
環境ごとのビデオ情報(ウィンドウハンドルとか)を
ほとんどの場合グローバル変数で持ってる。
ウィンドウが二つ以上生成されるようなことを実現するのは、
SDL 単体じゃ無理だろうな。
>>683 みたいなごり押しが必要。
685 :
名前は開発中のものです。 :04/12/24 01:04:03 ID:D6kFgiLi
Ruby/SDL で、スクリプトを UTF-8 で書くと、文字化けを起こしてしまいます。 たとえば、SDL::WM.set_caption の引数、つまり窓のタイトルが文字化けします。 $KCODE の設定を確認したのですが、文字化けの原因にはなってませんでした。 SDL 側に正しい文字コードを認識させる方法はないのでしょうか。
686 :
685 :04/12/24 03:50:56 ID:D6kFgiLi
Uconv使って無理やり解決させました(引数の部分だけSJISに変換)が、なんかすっきりしません。
>685 書いてないけど日本語でってことかな、多分 Rubyはさっぱりだけど、タイトルの文字化けはOS(というかWindowシステム?)の問題では? 多分SDLはもらった文字列をそのままOS(というかWindowシステム?)のキャプション表示に渡してるだけだろうから SDLが文字コードを認識できたとしても何も解決できないと思われ キャプションに日本語を表示させるのをあきらめるしかないのでは? あとは表示させる文字列をSJISのファイルにして、それをロードしてそのままわたせば 変換の必要はなくなると思うけど
> ただ Windows は確実にほったらかしだね。これじゃマルチバイト文字は通らない。 ごめん、これ間違い。 マルチバイト文字が通らないんじゃなくて、UTF-8 が通らない。 アプリケーション本体のソースで Unicode 統一とかやってんだったら、 プリプロセッサで分けて Windows の場合は WideCharToMultiByte 使うとか、 X11 で通らなかった場合は iconv で nl_langinfo(CODESET) に変換するとか、 そういう対処する以外無いと思う。なんか SDL 使ってる気が薄れるけど。 もしくはタイトル部分は ASCII で開き直るとか。
690 :
685 :04/12/26 00:25:42 ID:7MVm4DuB
ご返答ありがとうございます。
>>687 > 書いてないけど日本語でってことかな、多分
そうです。書き忘れました。すみません。
マルチバイト文字の部分だけ文字化けしました。ASCII文字は大丈夫でした。
> 多分SDLはもらった文字列をそのままOS(というかWindowシステム?)のキャプション表示に渡してるだけだろうから
> SDLが文字コードを認識できたとしても何も解決できないと思われ
そうなのですか。残念です。
SDLが、OSを意識することなくアプリケーションを組めるライブラリであるなら、
OSのデフォルトの文字コードも意識する必要はないのかな、と思っていました。
>>688 =
>>689 > ちょっとよく見てないんだけど、X11 版は内部で UTF-8 を使ってるように見える。勘違いかな。
> ただ Windows は確実にほったらかしだね。これじゃマルチバイト文字は通らない。
URLありがとうございます。
ソースを見てもさっぱりですが、マルチバイト文字関連は手薄である、と解釈してよいのですね。
> プリプロセッサで分けて Windows の場合は WideCharToMultiByte 使うとか、
> X11 で通らなかった場合は iconv で nl_langinfo(CODESET) に変換するとか、
まだ僕の技術が未熟なもんで、何がなにやらさっぱりわかりませんが…
OS毎になにかいろいろ変える必要があるのですね。
> もしくはタイトル部分は ASCII で開き直るとか。
一番簡単な解決策ですね。
そういえば漏れゲームの時はタイトル部は必ず英語か それっぽいアルファベット数文字
692 :
名前は開発中のものです。 :04/12/27 12:57:06 ID:kl2IaoBJ
lkj
693 :
名前は開発中のものです。 :04/12/28 15:51:44 ID:N7uXumos
>>693 リファレンスをぱっと見て、 Ruby/SDL と何が違うのかわからんとおもた
>>693 Ruby + SDL ってこれで3つ目だっけ
696 :
名前は開発中のものです。 :04/12/29 01:07:47 ID:9zkeURY6
SDL使ってる人って少ないのかな?
697 :
名前は開発中のものです。 :04/12/29 22:11:54 ID:QcwKrDG0
ちゃんとしたGUIがあれば使ってもいいんだが・・・。 いったいどうすりゃいいのって状態なもんで。
2Dでゲーム作るのなら、SDLはスゲエ楽だし、金もかからないし、そのくせ自由度はあると思うので、もう少し流行してもいいと思うんだけどなあ。 みんな最初はDirectXから入るだろうけど、そこから別の環境に移行するのが面倒になって、止まってるんじゃないかな?と思う。 楽をする為の努力をするのも、悪くは無いと思うんだけどな。 とまあ、友達にオススメしたら環境構築すら出来なかったようなので、素人には敷居が高いことは、確からしい。 素晴らしいものなのに、残念。
allegroはAPIの名前がアレだった。
cubeもSDL使ってるよね。
701 :
名前は開発中のものです。 :04/12/31 14:52:58 ID:YiI4iQlZ
VCあたりでSDLの環境構築できないのは能力的に問題あると思う 情報も豊富なのに
C なり C++ なり D なりの触り始めじゃないのかな。 ヘッダファイルとかライブラリファイルとかがどういう用途で コンパイラがどこに読みに行ってどこに置けばいいのか、 ってとこを把握しないといけないから、 「プログラミング初めてで、SDL 使います」という場合はまあ環境構築できなさそう。 結局は能力が低いってことなんだけど。
まあそう責めてやるな。
>>698 OpenGLでなんか作るときにも、最近はもう必須。
俺は、MinGWを入れて、SDL-1.2.8.tar.gzを展開して
configure
make
make install
で、環境構築してる。
でも、printf()が出力されない。。。
>>704 標準では、stdout.txt(標準エラー出力はstderr.txt)に出力されるようになってる。
freopen("hoge.txt","w",stdout);
freopen("err.txt","w",stderr);
とかすれば、任意のファイルに変更可能。
もしくは、SDL 本体の SDL_win32_main.c の中の WinMain() にある freopen() の呼び出しをコメントアウトして DLL 作り直すとかね。 コマンドプロンプト以外から実行した時におかしくなるかもしれないけど。
本家 ML に流れてたのを転載 > SDL is compiled with stdout redirection to stdout.txt by default. > if you want to use stdout, and not write to a file: > recompile SDL with --disable-stdio-redirect --disable-stdio-redirect でコンパイルすればよいらしい
cygwin だと tail -f 効かなくて困っていた所だったので、参考になりました
709 :
704 :05/01/04 00:21:35 ID:mAqS2ZUA
>>707 情報ありがと。
なんか明示的に fflush(stdout); しないと、すぐに出力されないっぽいけど
出ないよりは全然ましなんで大助かりです。ヽ(´▽`)ノ
711 :
名前は開発中のものです。 :05/01/07 00:34:20 ID:CLwECnQA
test
おみくじとお年玉は元日だけですよ
ようやく、LinuxでSDLライブラリを使った簡単な日本語の文字表示がで きた。なんかすげーうれしかった。次は音の再生に挑戦だー。
公式が落ちてますな
公式、復活してるぽ
SDL1.2だうんろーどできない。。。
CVS使え。
復活してた
>SDL_archive 。・゚・(ノД`)・゚・。
paraguiは痒いところに手が届かないというかまあそこまで求めるのも酷かも知れないけど。
Dev-C++使っていて、SDLを導入しようと思ったんだが、どうやっても上手くいかない・・・。 誰か、教えてください・・・・。
何が上手くいかないのかを書かないと誰も何とも言えない。
>720 何を泣くことがあろうかっ。 アーカイブ内のファイルを開いて SDL_RWops が直に取得でき、 そのまま SDL_image や SDL_mixer に突っ込めて便利っす。
SDL含めこういうライブラリで疑問。だいたいクロスプラットフォームにしてあるんだけど、Linux 使いでハードコアなゲーマーっているの?
SDLに見捨てられたらLinux動画も再生出来ません。
そうだよな。 ゲーム用途が多いけど、(SシンプルDダイレクト)メディアLレイヤーなんだよな。本当は。 他のフレームワークはよく知らないけど、SDLの存在意義はあると思うよ。 実際そっちの実益は大きいと思う。
>>731 最初の開発動機に関しては、確かインタビューか何かで
「色んなマシンにアプリケーションを移植してたらアホ臭くなったのでライブラリを作った」
みたいなこと言ってたと思うよ。
ページは失念、検索したけど見付からなかった。すまん。
734 :
731 :05/02/02 09:12:16 ID:WOl4so1f
735 :
名前は開発中のものです。 :05/02/06 19:38:19 ID:GSZ53bwF
>>727 SDL_mixerでは、RWopを使ってストリーム再生するMix_LoadMUS_RWはオプションだから、直接RWopが全てに突っ込めるわけではないです。
USE_RWOPSを定義しておいてやれば使えるけど、SMPEGを利用したmp3再生には対応していない模様。
どうも、Mix_LoadMUSでしかmp3は使えないよう。
ってことは、mp3でなく、oggを推奨していますってことなのかな?
SDL_ttfでM+フォントが開けない。・゚・(ノД`)・゚・。 TTF_OpenFont("fonts/bdfmplus.ttf", fontSize); TTF_OpenFont("fonts/bdfUMplus.ttf", fontSize); サイズ1~100まで試したけどだめぽ。 環境はWindows SDL_ttf-2.0.6 freetype-2.1.8 フォントは香り屋で落としてきたやつ。
>>736 フォントのパスを絶対パスにしてみてはいかが
739 :
736 :05/02/11 23:43:02 ID:dXQ7K1nl
>>737 絶対パスでもだめでした。
>>738 ビットマップ埋め込みのやつでは駄目なんですね。
公式サイトから落としたやつは出来ました。
ありがとうございます。
740 :
名前は開発中のものです。 :05/02/13 00:50:02 ID:phhxXInx
>>735 御意。うちは USE_RWOPS を定義して ogg を読み込んでます。
SDL_mixer の music.c を見てると、Mix_LoadMUS_RW() は
ogg, mikmod 以外は実装されてないですね…。
ということは mp3 に限らず cmd, wav, midi もダメっぽい。
ところで cmd て何?って調べてみたら
外部プログラムを実行して曲を再生するんですね…。
music_cmd.c を読んでみたら
冒頭に /* This is a UNIX-specific hack */
再生時に music->pid = fork();
一時停止時に kill(music->pid, SIGSTOP);
再開時に kill(music->pid, SIGCONT);
停止時に kill(music->pid, SIGTERM);
とかやってて、ビビリました。
741 :
378 :05/02/13 10:02:12 ID:msvBWsr3
>>735 > ってことは、mp3でなく、oggを推奨していますってことなのかな?
ogg の実装が一番楽だったってだけだよ。
libogg の方に登録する読み込み関数のポインタを
FILE 系から RWops 系にするだけだったから。
SDL_mixer は、USE_RWOPS の場合は RWops 版と FILE 版をコンパイルして、
そうでない場合は FILE 版だけをコンパイルする、というスタンスを取ってるせいで、
mp3, wav, midi は実装なんて読み込む部分以外全部同じなのに
両方のバージョンが必要になってる。
以前、全ソースを RWops 版で統一して、
Mix_LoadMUS は内部で単に Mix_LoadMUS_RW か cmd を呼ぶだけ、
という実装でパッチ投げたんだけど返答は無かった。
Mix_LoadMUS(_RW) レベルじゃなくて、
mp3, wav, midi それぞれの実装に FILE 版と RWops 版のインターフェイスを作らないと
受け入れてもらえそうにない。
めんどいなあ。ほとんど関数名置き換えるだけだから簡単なんだけど。
742 :
名前は開発中のものです。 :05/02/14 18:46:49 ID:pz8RlDej
初歩的な質問で申し訳ないのですが、 SetColorKeyを使って透明色を持たせたテクスチャを表示するのは SDL_BlitSurfaceでできますが、このテクスチャを拡大、回転をさせたい場合はどうすればよいの でしょうか? SGE_Transeformを使うとどうも透明色の効果が発揮しません。
>>743 さっそくのご回答ありがとうございます。
警告がばしばし出たうえに、多少手を加えないとコンパイルが通らない
ほどいまだ不完全な実装でしたが、透明色まわりは解決されていたようです。
ぐあーBCCで1.2.8肝心のSDL.dllやらがコンパイルできねえ \Borland\freebcc>make -f SDL.mak で ..\..\src\video\windib\SDL_dibevents.c: Error E2342 ..\..\src\video\windib\SDL_dibevents.c 189: Type mismatch in paramet er 'lpPrevWndFunc' (wanted 'int (__stdcall *)()', got 'long (__stdcall *)(void * ,unsigned int,unsigned int,long)') in function DIB_HandleMessage *** 1 errors in Compile *** とかいうエラーが出て止まる…… makeall.bat動かしたらtestディレクトリに色々とデモらしきものが出来てるけど。 フリーBCC使ってる皆さんちゃんと動いてます?
746 :
名前は開発中のものです。 :05/02/15 19:48:01 ID:TwJPXr3V
SDL.dllってコンパイルして作成しないといけなかったのん?
747 :
745 :05/02/15 19:56:12 ID:YKXR9FxL
>>746 SDL-1.2.8-win32.zipのSDL.dllをtestディレクトリに入れたらサンプル群がちゃんと動きました。
コンパイルできなくてもなんとかなる、というよりコンパイルする必要が無いからその辺テキトーなのかな…。
ソースに付いてるインストールガイド(Borland.html)ではSDL.dllもコンパイルされるみたいに書かれてるのに。
>>745 >Error E2342 ..\..\src\video\windib\SDL_dibevents.c 189: Type mismatch in paramet
とりあえずキャストしてみたら?
intとlongの違いなら害は無さそうだし。
前から BCC で使ってるけど、1.2.7 からコンパイルできなくなったと記憶してる。 DirectX と WinDIB の両方でエラーになるから、片方潰して回避することもできない。 結構粘ってみたんだけど、問題解決できなかった。 単に一つ定義が足りないっつってるだけかと思ったら、 手動で定義しても次々別のエラーが出てくるだけ。終わらない。 他に根本的な原因があるんだろうけど、解明できなかった。 ちなみに VC も DirectX のソースでエラー吐く。 こっちも問題を解決できなかったので、 プロジェクトの設定 -> 左の'SDL'を選択 -> C/C++ -> プリプロセッサ -> 定義から ENABLE_DIRECTX を消す とやって、これでもまだ足りないから、 ファイルビューから名前に dx5 を含むファイルを全部削除した。 これで DirectX 無しでだがコンパイルできるようになる。 ちなみに、初期状態だと afxres.h が無いとか言い出すけど、 #include <windows.h> とだけ書いた afxres.h を SDL-1.2.8\VisualC\SDL に置けば回避できる。 まさかちゃんとした afxres.h を持ってこないと DirectX 付きでコンパイルできないってんじゃないだろうな……。 1.2.7 の時の話だから、今はまた少し事情が違うかもしれないけど、 手元で確認した限りだと 1.2.8 も BCC VC 共にそのままではコンパイル不可。 もう Cygwin でしかテストしてないのかね。
中身見てみると
return CallWindowProc(userWindowProc, hwnd, msg, wParam, lParam);
てとこのおそらく第一の引数なんだが、関数の型キャストのしかたわからんです (´・ω・`)
でもここをなんとかしても駄目なのか……
>>749 情報ありがと。BCC使ってる人自体がもう少数なのか?
まあdll作れなくても動くみたいだからいいや。他のSDL_image なんかが使えるか心配だが。
>>750 SDL_dibevents.cの189行
SDL_dx5events.cの547行
return CallWindowProc((FARPROC)userWindowProc, hwnd, msg, wParam, lParam);
SDL.makeの
OBJFILES=に..\..\src\cpuinfo\SDL_cpuinfo.objを追加
PATHCPP=に..\..\src\cpuinfoを追加
これで、make出来ると思う。(動くかどうかは(゚⊿゚)シラネ)
VC++だとerrorじゃなくてwarningだから、コンパイル通るみたいだね。
>>749 1.2.7も1.2.8もVC++6.0、VC.NET2003両方とも普通にコンパイルできるけど?
>750 BCC使ってるけどDLLをコンパイルし直すということはしないなぁ
753 :
749 :05/02/16 05:37:50 ID:ASwNW9Kw
>>751 ありゃ。俺んちだと次のエラーが出る。
SDL-1.2.8\src\Video\Windx5\SDL_dx5events.c(171) : warning C4013: 関数 'GetAncestor' は定義されていません。int 型の値を返す外部関数と見なします。
SDL-1.2.8\src\Video\Windx5\SDL_dx5events.c(171) : error C2065: 'GA_ROOT' : 定義されていない識別子です。
SDL-1.2.8\src\Video\Windx5\SDL_dx5events.c(171) : warning C4047: '=' : 間接参照のレベルが 'struct HWND__ *' と 'int ' で異なっています。
SDL-1.2.8\src\Video\Windx5\SDL_dx5events.c(655) : warning C4047: '=' : 間接参照のレベルが 'struct HWND__ *' と 'int ' で異なっています。
俺の環境がおかしくなってるだけかも。VC 入れ直してみる。
>>751 やべー、ほんとだ通った。ありがとう!
>>752 stdout.txt が鬱陶しいから直接コンソールに出力して欲しいとか、
パッチ書いたから BCC でもコンパイルできるか試すとか、
大抵そんなんじゃないかな。
フリーのbcc使ってるから、ちょっとためになった。 imageとmixerしか使ってないけど…。
755 :
名前は開発中のものです。 :05/02/19 17:54:05 ID:vHiopGBS
どうしてもわからないので教えてください。 SDL_CreateRGBSurfaceFrom ないしは、 SDL_CreateRGBSurface を 使用しようと、してるのですがなぜか Fatal signal: Segmentation Fault (SDL Parachute Deployed) といわれてしまいます。 少々ながいのですが、sample 乗せますので、どこがわるいのか 識者のかた、見ていただけないでしょうか? ------- cut here ---------------------------------------- #include <SDL.h> #include <stdlib.h> #include <string.h> #define XXX (60) int main( void ) { int j; Uint16 **data; Uint32 rmask = 0x0000001f; Uint32 gmask = 0x000007E0; Uint32 bmask = 0x0000F800; Uint32 amask = 0x00000000; SDL_Surface * screen; if ( 0 < SDL_Init( SDL_INIT_VIDEO|SDL_INIT_TIMER ) ) { fprintf( stderr, "Colud not initialize: %s\n", SDL_GetError() ); exit(3); } atexit( SDL_Quit ); if ( NULL == SDL_SetVideoMode( 800, 600, 16, SDL_ANYFORMAT ) ) { fprintf( stderr, "Could not set video mode... :%s\n", SDL_GetError() ); exit(4); } data = (Uint16 **)malloc(sizeof(Uint16) * XXX);
if ( NULL == data ) exit(10); for (j = 0; j < XXX; ++j) { data[ j ] = (Uint16 *)malloc(sizeof(Uint16) * 80 * 80 ); if ( NULL == data[ j ] ) exit(10); memset( data[ j ], 0xff, sizeof(Uint16) * 80 * 80 ); } screen = SDL_GetVideoSurface(); for ( j = 0; j < XXX; ++j ) { int z; SDL_Rect r = { 0, 0, 0, 0 }; printf("sprite index[%d] ...\n", j ); // SDL_Surface * surface = SDL_CreateRGBSurfaceFrom(data[ j ], 80, 80, 16, 80 * sizeof(Uint16), // rmask, gmask, bmask, amask); SDL_Surface * surface = SDL_CreateRGBSurface(SDL_SWSURFACE, 80, 80, 16, rmask, gmask, bmask, amask); if ( SDL_MUSTLOCK( surface ) ) { if ( 0 < SDL_LockSurface( surface ) ) { fprintf( stderr, "Could not lock surface.: %s\n", SDL_GetError() ); return 0 ; } } for ( z = 0; z < 80 * 80; ++z) ((Uint16*)(surface->pixels))[ z ] = data[ j ][ z ]; if ( SDL_MUSTLOCK( surface ) ) { SDL_UnlockSurface( surface ); }
SDL_FillRect( screen, NULL, SDL_MapRGB( surface->format, 0x00, 0x00, 0x00) ); if ( NULL == surface ) { fprintf( stderr, "Could not make surface...:%s\n", SDL_GetError() ); exit(1); } if ( j >= 10 ) { int xx = j % 10; int yy = j / 10; r.x = xx * 80; r.y = yy * 80; } else { r.x = j * 80; r.y = 0; } SDL_BlitSurface( surface, NULL, screen, &r ); SDL_UpdateRect(screen, 0, 0, screen->w, screen->h); SDL_Delay( 100 ); SDL_FreeSurface( surface ); } return 0; }
XXX の値は小さければ 10 以下であれば、問題ないようでした。 環境は、FreeBSD 5.3 STABLE です。 SDL は ports からインストールしました。 バックトレースは以下のようなものでした。 Program received signal SIGSEGV, Segmentation fault. [Switching to Thread 1 (LWP 100099)] 0x08048b93 in main () at test.c:50 50 ((Uint16*)(surface->pixels))[ z ] = data[ j ][ z ]; 上の SDL_CreateRGBSurfaceFrom を使用すると、 今度は、blit 中に落ちてしまいます。 回避方法がわからないので、メモリ中のイメージを 60 個程度q surface にするにはどうすればいいのでしょうか?
>>758 とりあえず
- data = (Uint16 **)malloc(sizeof(Uint16) * XXX);
+ data = (Uint16 **)malloc(sizeof(Uint16*) * XXX);
他にも何かあるかもしらんが、調べてない。
どうでもいいが、何でループ変数がいきなりjとかzなのか理解に苦しむな。
>>759 ビンゴです。ほんとにありがとうございました。
SDL スレ汚してごめんなさい。
>>どうでもいいが、何でループ変数がいきなりjとかzなのか理解に苦しむな。
精進します。。。
次からはアップローダーにファイル置こうな……
sdl-fan-jpにspam投げてるヤツ、ウゼー!ヽ(`Д´)ノ
763 :
名前は開発中のものです。 :05/02/22 22:38:49 ID:LwQOxQ0C
sakiwokosaretanokana?
>>764 SDL-IMは昨年末にできたばかりみたい。
まともな動作実績もないのによくそんな適当なこと載せるよな(プゲラ
767 :
名前は開発中のものです。 :05/03/11 23:52:57 ID:YMDZazr7
>>740 >>741 返答ありがとう。なるほど、やっぱり自分と同じようなこと試して知識得てる人って
いるんだな…流石だ。
741さんは更に上を行っているようですね。確かに、FILEポインタを使っているのであれば
SDL_RWopsを使うように変更するだけでいいから、確かに移植は楽だ。
visual stdioNETでのこれの使い方おしえてください、 「初心者によるの」やり方ではコンパイラが通らないんですよ なぜなんですか?
なぜでしょうね。
770 :
名前は開発中のものです。 :05/03/13 20:04:03 ID:TyhT8D4W
Visual Studio.NETで/MDオプションでビルドするとmsvcr71.dllと依存関係になっちゃうのはなんとかならんもんかね。 /MDじゃなくて/MTにするとリンクエラーが出るし。 このために.NET Frameworkインストールしてくださいって言うのもなんだし。
>768 コード生成のランタイムライブラリがマルチスレッドデバッグDLLになってなかったらコロヌ ライブラリへのパスが通ってなかったらなおコロヌ
772 :
名前は開発中のものです。 :05/03/14 01:42:53 ID:wCuLvh4G
>768 その原因は、SDLに付属のマニュアルに書いてあるよ。 君は.NETでDLLをコンパイルしたのかな?SDL for Beginersの掲示板ではそのことについてもきちんと書かれている。 よく読んでみるといいだろう。 >770 CランタイムのDLLをはずしたいなら、依存する全てのライブラリを/MTでコンパイルしなおさなきゃいけない。 それと、リンクエラーの意味は読めばわかる。 何が足りないのかは見当が付くけど、それの意味がわからない場合はそもそも力量が足りてない。 それと、MSVCRT*.DLLを入れればいいだけなのに、.NET Frameworkインストールしてくれというのは見当違いだよ。
773 :
名前は開発中のものです。 :05/03/14 01:44:48 ID:wCuLvh4G
依存する->CランタイムライブラリDLLに依存するという意味ね。
カリングとかどうなの?Java3Dより貧弱ってことはない?
mingwでsdl_ttf,sdl_net,sdl_image,sdl_mixer使うときはいちいち自分でコンパイルするより vc用のインポートライブラリをreimpする方が楽だと今更気がついたのだった。 ははは
なんか、VC++6.0でビルドしたやつ起動すると、
コマンドプロンプトも一緒に起動しちゃうんだけど、
これって仕様じゃないよね?
環境は
Windows2000
VC++6.0
SDL1.2.8
http://tokyo.cool.ne.jp/sdl/ の
2.導入から最初のプログラムまで SDLTutorial
に置いてある
SDLTutorialというソースなんだけど
>>776 新規作成のウィザードでコンソールアプリケーションじゃなくて
windowsアプリケーションを選べ
SDL.NET って、SDL_imageFilter* 系は使えないのか…(´・ω・`)
780 :
779 :2005/04/22(金) 00:09:58 ID:Ae0Aozsn
嘘、Tao.Sdl から呼び出せた。なんでもない。
はじめまして。早速ですが質問させてください。 現在がSDL_Surfaceに画像を読み込もうと次のようなコードを書いています。 FILE *fp = fopen( "pic/pic.bmp", "rb" ); if ( fp ) { SDL_RWops *rwops = SDL_RWFromFP( fp, 0 ); SDL_Surface *surface = IMG_Load_RW( rwops, 1 ); } ですがIMG_LoadRW()の部分でエラーが出てしまいます(ハンドルされていない 例外はsdltest.exe(NTDLL.DLL)にあります 0xC0000005Access Violation)。一方、 SDL_Surface *surface = IMG_Load_RW( SDL_RWFromFile( "pic/pic.bmp", "rb" ), 1 ); とした場合には正常に読み込めてその後画像を表示することも出来ました。 出来ればファイルポインタから読み込んで表示させたいのですがエラーの原因が 分かる方がいらしたら解決法を教えていただけないでしょうか? 開発環境はWindowsXP Pro、VC++6.0SP5、SDLのバージョンは1.2.8でSDL_imageの バージョンは1.2.4です。よろしくお願いします。
>>781 /src/file/SDL_rwops.cの230行あたりを見てるみと
#ifdef WIN32
if ( ! in_sdl ) {
SDL_SetError("You can't pass a FILE pointer to a DLL (?)");
/*return(NULL);*/
}
#endif
となっていてDLLではSDL_RWFromFPは使えないようです。
たぶんSDL_GetErrorでエラーが拾えると思います。
Static Linkすれば使えるのかもしれませんが、試したことはありません。
783 :
781 :2005/05/07(土) 18:01:27 ID:HNMZWJUh
>>782 うまく行かない時はSDL_GetError()を確認するべきだったのですね。
複数の画像ファイル等を一つのファイルにパックして、そこから
画像ファイルを読み込んで...ということをしようと思ってSDL_RWFromFP
を使ってみました。この方法がダメとなると何か他に良い方法があるでしょうか。
取りあえずSDL_RWFromMem()でできるかを試してみようと思います。
どうもありがとうございました。
784 :
782 :2005/05/08(日) 19:51:26 ID:ARUo6ShU
>>783 >この方法がダメとなると何か他に良い方法があるでしょうか。
>取りあえずSDL_RWFromMem()でできるかを試してみようと思います。
SDL_RWFromFileは内部でSDL_RWFromFPを呼び出しているだけなので、
SDL_RWFromFPで可能ならば、SDL_RWseekなどを使って同じような操作が
できると思います。もちろんSDL_RWFromMemでもかまいませんが。
ちなみにSDL_archiveというものもあります。
>>370
785 :
781 :2005/05/08(日) 20:33:06 ID:GW0v55yy
取りあえずSDL_RWFromMemを使って期待通りに動作させることが出来ました。 助言ありがとうございました。 質問ばかりで申し訳ないのですが今度はフォントの表示で行き詰ってしまい ました。現在SDL+OpenGLでゲームを作ろうとしています。SDL_ttfでWindowsの フォント(MSGothic.ttc)を読み込んで利用しているのですが、TTF_RenderUTF8_Solid() で作ったSDL_Surfaceをどうやって描画してやればいいのかが分かりません。 glDrawPixelsでSDL_Surfaceのpixelsを描画すると文字は表示できたのですが、 背景が透明に出来なかったのでTTF_RenderUTF8_Solid()から作ったSDL_Surface からテクスチャを作ろうとしたのですが幅と高さが2の累乗でないのでうまく行かず... という状態です。もしうまいやり方をご存知の方がいらしたら是非ご教授ください。 ...この質問はOpenGLスレでしたほうが良かったしょうか・・?
OpenGL使ってるなら、WGLにアウトラインフォントを描画する関数があったはず。それだとWin専用になってしまうけど。 ビットマップフォントでも良いならgl_kanjiがよろしいかと。
787 :
782 :2005/05/09(月) 19:59:22 ID:2WAlRLk2
>TTF_RenderUTF8_Solid() で作ったSDL_Surfaceを >どうやって描画してやればいいのかが分かりません。 >幅と高さが2の累乗でないのでうまく行かず... とりあえず、SDL_ttfのサンプルであるglfont.cが SDL_ttfのソースと一緒にあるので、それを見ていただければ、 大体のことは分かると思います。 見てもよう分からんというときには、また聞いてください。
788 :
781 :2005/05/09(月) 22:12:34 ID:kc7J0Eit
>>787 そんなところにサンプルがあったのですね。全く気がつきませんでした。
早速サンプルを元にして試してみたら無事ttfからテクスチャを作って
描画することが出来ました(日本語は文字化けしてしまいますが)。
助言してくださった皆様、どうもありがとうございました。
790 :
781 :2005/05/10(火) 11:15:14 ID:/sZ8aOiM
>>789 そのまさかで文字列がUTFじゃないようです(Shift-JISなのかな?)。
TTF_RenderText_Solid()を使っているのですが他のを使えば良いのでしょうか。
それとも文字コードをUTF8に変換するプログラムを書けば良いのでしょうか。
792 :
782 :2005/05/10(火) 20:14:19 ID:c/mddx9W
>あと SDL_ttf で日本語が化けるのは使ってるフォントが bitmap フォントが
>埋め込まれた TrueType フォントだとダメとかなかったっけ?
msgothic.ttcの場合はSolidなら大丈夫、
ShadedやBlendedだと22pt以下はダメですね。
この問題だと化けるのは日本語だけではありませんが。
>それとも文字コードをUTF8に変換するプログラムを書けば良いのでしょうか。
UTF8かUnicodeに変換する必要があります。
フリーのフォントや文字コードについての話が
http://tokyo.cool.ne.jp/sdl/index.html でも行われているので、お悩みなら参考になるでしょう。
msgothicでもTT_CONFIG_OPTION_EMBEDDED_BITMAPSをundefしてfreetype再コンパイルすれば22pt以下も表示できた気が
SDL_ttf は埋め込みビットマップフォントのある TrueTypeFont を読むと、
埋め込みビットマップの存在するサイズを指定するだけで
アウトラインフォントを無視して強制的に埋め込みビットマップフォントの方を使うんだよ。
でもそのための処理は入ってない。だから化けてる。
>>793 は SDL_ttf が内部で使ってる freetype の埋め込みビットマップ処理そのものを潰して対処してる。
なんだかなー。俺も他のライブラリ使った方がいいと思う。
795 :
781 :2005/05/12(木) 15:13:44 ID:gBvQuFFy
皆様アドバイスありがとうございます。 mbstowcs()を使ってUNICODEに変換してTTL_RenderUNICODE_Blended() を使うことで無事日本語を表示することが出来ました。 取りあえず22pt以下の場合はTTL_RenderUNICODE_Solid()を使って表示 することにしています。他にもライブラリがあるようなのでぼちぼち 調べてみようかと思います。どうもありがとうございました。
796 :
名前は開発中のものです。 :2005/06/25(土) 16:10:39 ID:kpes39YP
軽めのGUIライブラリーってどれ? 多くてわかんない
>797 久しぶりにそこのぞいたけど、新しい記事とか解説はなかったな カウンタが1000越えてるな たしか>633が77ゲッツしてたんだよな、懐かしい
質問です。 2つあるんですが、 1個目、SDLの標準機能で2枚目のウインドウを作ることってできるんでしょうか? 2個目、SDLの標準機能でC言語標準のscanfやらfgets(from stdin)やらのように、ユーザーに要求を求めるようなことって可能でしょうか? 2個目は1個目ができればハードコードで作ることも可能そうですが、ちょっと面倒な気がします。 よろしくお願いします。
800 :
名前は開発中のものです。 :2005/06/27(月) 08:02:17 ID:3Ab5ewvX
AGE!!
>>749 GetAncestor(SDL_Window, GA_ROOT);
がとおらないのは
WINVER=0x0500とでも
C/C++ -> プリプロセッサ -> 定義
に入れると解決。
という遅レス
あとafxres.hなんてMFC入れればあるんじゃね?
802 :
799 :2005/06/28(火) 01:25:30 ID:xvJWzK7X
一日で一レスか。 こりゃ参ったなー。 作りたいものへのモチベーションも下がってきたし、一端とりさげるかな。
803 :
802 :2005/06/28(火) 01:55:33 ID:xvJWzK7X
再度検索してみたら、2000年の時点の話だが、対応してないというページを見つけた。 tp://risky-safety.org/~zinnia/sdl/watch/2000/10/
>>799 1個目:
FAQだと思うが、改めてソースを見たところ、SDL_VideoInit()がcurrent_videoと言う
グローバル変数にビデオデバイス情報を格納していて、それを切り換えるAPIもない。
ロックせずに使用してるので、スレッド化も無理。
そもそもウィンドウという概念はない。
2個目:
コンソールを使いたいのか?だとすると開発環境によるだろうな。
俺は、MinGWを使ってるがこれだと無理っぽい。cygwinなら出来るだろうが、
cygwin上でSDLを動かしたことないんでよーわからん。
>>799 どこかで既出だろう+試せば判るだろと思って黙ってたんだが。
ひとつめ、二つ以上のウィンドウは出せんとwebのどこかで読んだな。
ソースを見てもグローバル変数(Windows なら HWND SDL_Window)を
使ってそこらじゅうで使いまわしてるから、まず無理だろうと思う。
ふたつめ、起動した時にDOS窓(これも Windows の話だが)が出ているならできる。というかできた。
Windows の場合、設定によってはstdoutをstdout.txtにリダイレクトして、
DOS窓を出さないこともできるが、その場合はできなかった。
ソースは見てないが多分無理だろうな。
806 :
805 :2005/06/28(火) 02:30:05 ID:dyIcBP9c
と書いてる端から被ったか……。全く食いつきがいいよな俺ら。
>>804 と俺で書いてることが微妙に違うが、
ひとつめの違いは
>>804 が機種独立の部分を見て、
俺が機種依存の部分を見て喋ってるせい。
ふたつめは環境の違いで、俺の環境(VC6)ではどちらも作れる。
MinGWとCygwinはどちらかができるんなら
両方できるんじゃないかと思うがどちらも知らんからわからんなあ。
と、聞かれてもいないが補足しとく。
>>804-806 レスthx
1個目について、
なるほど、グローバル変数つかってるのか。
そりゃ、切り分けが大変そうだ。
明快な回答に感謝。
2個目に付いて、
えーっと、誤解を招いたようだけど、
要はscanfとか自体を使うのではなく、自前か何かで実装できないかって、話です。
それが、SDL標準であったら良かったんですけど、なさげですね。
2枚目のウインドウがでるなら、そっちのサーフェスとキー入力を捻って入力コンソールを作ることができたんでしょうけど・・・。
あと、
作りたいソフトを超えるソフトを見つけてしまったので一端引くことにしました。
それが、ちょうどイメージしてた物に近かったため、それでいいかなと思っています。
回答ありがとうございました。
808 :
名前は開発中のものです。 :2005/07/05(火) 04:30:00 ID:zWniNiIr
640*480*32(bpp)の画像を1枚表示するだけで60FPS前後なんですが描画が遅いのは何が原因なんでしょう? それともこれが限界ですか? 初期化は SDL_SetVideoMode(640, 480, 32, SDL_HWSURFACE | SDL_ANYFORMAT); こんな感じでSDL_FillRect()せずにSDL_BlitSurface()してからSDL_Flip()。 環境は Pentium4 2.4G GeForce4 ti4400
809 :
808 :2005/07/05(火) 04:38:10 ID:zWniNiIr
補足です。 ウィンドウモードでリフレッシュレートは85Hzです。 画像を描画させなければ130FPSほどでますがFlipだけで130FPSってのはちょっと遅いですよね?
SDLってイイとか言われているけど 実は描画が遅いんだよね
>>808 せめて実行可能なコードを出せよ…
SDL_Flipだけで130FPSってのは遅すぎるのでどこかが間違っていると思われ
とりあえず SDL_SetVideoMode()の戻り値のSDL_SurfaceとBlitしている画像
のSDL_Surfaceのflagsやformatをチェックして期待通りかどうかチェックしれ
812 :
811 :2005/07/05(火) 14:24:14 ID:1ZePfTMa
あとバカみたいだと思うだろうけどFPSの計算の仕方とかもチェック
813 :
808 :2005/07/05(火) 14:53:21 ID:zWniNiIr
>>811 >せめて実行可能なコードを出せよ…
あいすまんかった。
int main(int argc, char* argv[]) {
SDL_Init(SDL_INIT_VIDEO);
SDL_Surface* screen = SDL_SetVideoMode(640, 480, 32, SDL_HWSURFACE | SDL_ANYFORMAT);
SDL_Surface* temp = SDL_LoadBMP("test.bmp");
SDL_Surface* surface = SDL_ConvertSurface(temp, screen->format, SDL_HWSURFACE);
while (1) {
SDL_BlitSurface(surface, NULL, screen, NULL);
SDL_Flip(screen);
SDL_Event event;
while (SDL_PollEvent(&event))
if (event.type == SDL_QUIT)
return 0;
char buf[64];
sprintf(buf, "%d fps", CalcFPS());
SDL_WM_SetCaption(buf, NULL);
}
return 0;
}
814 :
808 :2005/07/05(火) 14:53:54 ID:zWniNiIr
>>813 の続き
int CalcFPS() {
static Uint32 count, fps;
static Uint32 btime;
if (++count == 60) {
Uint32 time = SDL_GetTicks();
fps = 1000 / (float(time - btime) / 60);
btime = time;
count = 0;
}
return fps;
}
815 :
808 :2005/07/05(火) 14:57:52 ID:zWniNiIr
普通にDirectX(draw)でハードウェアサーフェイス作ると500FPSとか軽くでるので ハードウェアやドライバがおかしいとも思えないし何ででしょうね。 皆さん上のコードでFPSいくつ位でます?
816 :
808 :2005/07/05(火) 15:07:12 ID:zWniNiIr
>>811 >のSDL_Surfaceのflagsやformatをチェックして期待通りかどうかチェックしれ
SDL_Surface.format_versionってのがscreenでは2、surfaceでは4になっている以外は同じです。
これが原因ですかね…?
んー。
817 :
811 :2005/07/05(火) 18:34:24 ID:1ZePfTMa
>>808 実行してみた.SDL_Flip()のみにして300fpsくらい出た…
CPU : PentiumM 1.1GHz
Video : i855GM (VRAM は Main Memory) の 16bpp
とりあえず毎フレームSDL_WM_SetCaption()するのは無駄なんで
CalcFPS()内のifの中に持って言ったら 400FPSくらいになった…
試しました。確かに WindowsXP Pentium 4 2.4GHz GeForce4 MX 420 ではSDL_Flip()だけで130FPSぐらいになります。
819 :
808 :2005/07/05(火) 21:16:11 ID:zWniNiIr
>>811 , 818
テストありがとう。超ありがとう。
でもお気楽にハードウェアデバイスが使えると思ったんだが何やら環境依存でそうでもないみたいですね。
DirectXより環境に依存するなんて使う気無くしました。
他のクロスプラトフォームライブラリ探します。
レスありがとう。それに関しては感謝してます。
ありがとう。さようなら。
>>819 他にいいのがあれば誰もSDLを使わないよ。
とりあえず、やりたいことが2Dなのか3Dなのか分からんが、
3Dの場合はOpenGLを使うことになるが、WindowsとLinuxでなんの
問題もなく使える。
しょーもないコード書いて勝手にSDLを悪者にするのだけはやめれ。
821 :
808 :2005/07/05(火) 21:55:55 ID:zWniNiIr
>>820 SDLを馬鹿にしているつもりはないよ。
それどころかSDLは初期化が簡単(ハードウェアを利用するライブラリとしては)なので初心者/入門者には最適だと思います。
また、さくっと作りたい場合は。
ただ、本家で掲載しているコードをほぼそのまんまの形で利用した場合、最低限バックバッファにコンパチブルな
オフスクリーンサーフェイスのフォーマットを選択してくれてもいいように思いました。
Simple directmedia layerのsimpleってなんでしょう?
>しょーもないコード書いて勝手にSDLを悪者にするのだけはやめれ
否定するなら根拠をまず述べるのが筋ってもんです。
#pragma once って、非ウィンドウず系でも使えるなりか?
>>822 少なくともgccでは#ifndefを使用したほうがいいかと。
そして激しくスレ違い。
たしかにそれだけ遅いとJava2Dより遅いってことだから なんかわけがありそうな気がする・・・
DirectXもヘンテコなコード書けば、一部のマシンだけでしか動かないコードになると思うがな。
>>825 確かにコンパイラは嘘は付きませんからヘンテコはコードにはそれなりの挙動を見せます。
ですが、
>>813 がそれほど罪深きコードだとは思わないけどなぁ…。
それとも暗黙の了解的なコーディングがあるんでしょうか?
>> 808 そのコードだとどちらのサーフェイスもシステムメモリに取られているだろう罠 811が言うように SDL_Surface の flags をチェックしてみ
828 :
818 :2005/07/06(水) 20:18:02 ID:mO4Tn2rF
確かに、/test/testvidinfo.cの void PrintFlags(Uint32 flags)を使って PrintFlags(screen->flags); printf("\n"); PrintFlags(surface->flags); printf("\n"); とやると 0x00000000 SDL_SWSURFACE 0x00000000 SDL_SWSURFACE となります。 で SDL_Surface* screen = SDL_SetVideoMode(640, 480, 32, SDL_FULLSCREEN | SDL_DOUBLEBUF); にすると 0xc0000001 SDL_HWSURFACE | SDL_FULLSCREEN | SDL_DOUBLEBUF 0x00000001 SDL_HWSURFACE となり、Blit & Flipで 30000 fps になりました。(合ってるのかな?)
SDL_MixerでBGMのクロスフェードって可能でしょうか?
Channelを1つBGMとして使えば行けるんで無いかしら。
~~~~~~\ /~~~~~~ \/ /\ / \ じゃなくて ~~~~~~\ /~~~~~~ \ / \ / \/ にする!
SDL_Mixerはシンプルだけど、こまかいことは苦手
~~~~~~\ /~~~~~~ \/ /\ / \ ~~~~~~~~~~~~ ←この部分を合成
SDLを使って、ゲームを作ろうと思うのですが、 Win上で使える入力補完機能のあるIDEはありませんか?
入力補完のないIDEなんて, ほとんど存在しないだろw 好きなIDE使え
>>835 VisualStudio.NETが一番おすすめ
NetBeansでもEclipseでもいいぞ
839 :
名前は開発中のものです。 :2005/07/31(日) 00:02:44 ID:quLBISXO
mac版のゲームを配布する場合はスタティックリンクするしかないかな? となるとソース公開しなきゃ(’A`)
Windows版のヘッダのライセンスはLGPLよりかるいんだっけ?
>>839 オブジェクトファイルだけで良いんじゃなかったっけ?
842 :
839 :2005/07/31(日) 15:40:59 ID:quLBISXO
ごめん、そうみたいね。 SDLとLGPLのサイトをよく読んできた。 (LGPL) If you link a program with the library, you must provide complete object files to the recipients so that they can relink them with the library, after making changes to the library and recompiling it.
>839 知らんけどMac用のSDL共有ライブラリが配布されてないなら、 自分で共有ライブラリを作って公開してそのソースだけ公開すれば?
>>839 LGPLのライブラリをスタティックリンクした場合は、ライブラリのソースコード
が必要で、それを改変したあとにちゃんと実行ファイルを再作成できるように
しておかなければいけない。
必ずしもアプリのソースは必要ではないけど、ソースもなしに実行ファイルを
作成できるはずもないので、事実上全ソースを公開する必要があるっぽい。
結局、動的リンクにする以外にソース公開からは逃れられないと思う。
ダイナミックリンクでもヘッダ部分もLGPLでライセンスされていたら 組み込んでコンパイルしてることになるから コンパイルに必要なオブジェクトファイル配布しないとだめだな Javaのようなヘッダがないダイナミックリンクだけなら大丈夫だが
>>845 それだっ!!
SDLのJavaラッパーを使えば万事解決かもね。
>>845 > ダイナミックリンクでもヘッダ部分もLGPLでライセンスされていたら
> 組み込んでコンパイルしてることになるから
以下の記述により、ヘッダー程度のものは無問題。
---
もしそのようなオブジェクトファイルが、数字のパラメタやデータ構造のレ
イアウト、アクセス機構または小さなマクロや小さなインライン関数(長さが
10 行かそれ以下)のみ利用するならば、そのオブジェクトファイルの利用は、
それが法的に派生物とみなされようとみなされまいと制限されない。(このオ
ブジェクトコードに加えて『ライブラリ』の一部を含む実行形式は依然として
第 6 節の条件下に置かれるであろう)。
---
> コンパイルに必要なオブジェクトファイル配布しないとだめだな
>>842 を見てオブジェクトファイルって言ってんのかもしれないけど、
ちゃんと読めば分かると思うけど、LGPLのライブラリを改変して別の
プログラムを含めた場合に、そのライブラリを再構築できるように
別のプログラムのオブジェクトファイルを配布しろって言ってんだよ。
呼び出し元アプリとは無関係な事だ。
とりあえず、英語読めないなら日本語訳もあるんだからちゃんと嫁。
VisualC++.netでSDL使ってる者ですが。 stdio.hをインクルードするだけでアプリケーション終了時に メモリエラーが出てしまいます。 デバッグで見る_file.cの_lock_file関数で何らかのエラーが起きているようです。 どのようにすればうまくエラーがでないようにできるのか、ご教授お願いします。
VisualC++.netは開発環境の名前なので、 それだけだと使っている言語仕様がわからない。 Microsoft Visual Studio .NET 2003 に含まれる VisualC++ を使っているなら 新しいプロジェクトを作成する時に .NETではなく Win32を選んで。
VS.NETならそうかもしれんがVC.NETならCだろ
851 :
849 :2005/08/04(木) 20:42:21 ID:m7E66Gbv
VisualC++.NETで.NETアプリケーション作成を選べば、 それはManagedC++という名のC言語とは似て非なる言語。
なんだか知らんが必死だな
拡張C言語程度で必死だな
で、848は解決したのか?
微妙にFPSが60に固定できないんですけど みんなはどう書いてますか // ここで描画やらなにやら int nowTime = SDL_GetTicks(); if( nowTime - preTime < 16 ) { SDL_Delay( 16 - (nowTime - preTime) ); } preTime = SDL_GetTicks(); やっぱ浮動小数で管理しないと駄目かな 綺麗に60に固定したいんだけど
固定少数で管理すればOK
ティアリングしてるんだし浮動小数点でも固定小数点でもどっちでもいいよな 俺はもう癖で固定小数点つかっちまうが 高精度タイマ使えばそれなりに精度は出るがかなり環境依存しやすい模様 この辺の話はSDLとはもはや関係ないな
とりあえず、 while ( nowTime - preTime < 16 ) { SDL_Delay( 0 ); } のほうがいいよ タイマの精度に期待出来ないことも多々あるんで、待ちすぎが起こりやすいから
あー、なるほど、俺もフレームレートも固定少数使ってみよう 少しぐらい改善すっかな
861 :
855 :2005/08/11(木) 11:06:48 ID:s0SfDH7M
>>859 それnowTimeもpreTimeも更新されないんじゃ?
具体的なコードが見たいんですけど駄目ですか?>>ALL
// ここで描画やらなにやら
while ( SDL_GetTicks() - preTime < 16 )
{
SDL_Delay( 0 );
}
preTime = SDL_GetTicks();
>>859 じゃないけど、普通に考えればこうでしょう。
1から100まで全部与えられるのを待ってないで考えましょう。
SDL_GetTicks() - preTime < 1000/60 これ、整数の除算のところで誤差が出るよね。 固定小数点で計算する方法って、32bitのうち小数側に16bit使うと決めたら (60*(SDL_GetTicks() - preTime) << 16) < (1000 << 16) みたいにすればいいのかな?
あれ、これじゃシフトする意味ないじゃん。出直してこよう、、
((SDL_GetTicks() - preTime) << 16) < (1000 << 16) / (60 << 16) 60が右辺にないと意味なかったね。Delphiで試してみたらFPSが59.9~60.0くらいになったんで、 合っているのかな。
いや合ってないや。ごめんもうやめるわ。
867 :
859 :2005/08/11(木) 19:06:56 ID:W/ukyUzH
うわ、適当に書いたんで思いっきりミスしてるな orz
>>862 フォローthx!
固定小数点でこんな感じでどう。 #define FRAMETIME 4271/* (1000ms/59.94frame)*256 */ ループ{ 描画etc. while ( SDL_GetTicks() < nextTime/256 ) { SDL_Delay( 0 ); } nextTime += FRAMETIME; }
一応オーバーフローも考えて欲しい。
870 :
855 :2005/08/11(木) 23:36:45 ID:s0SfDH7M
>>862 そりゃ考えましたよ。
それで適当に書いた
>>867 とか言われても困るんですけどね。
というか、みんなはどうやってるの?って聞いてるのに何でかなぁ。FPS固定やってないの?
そんなにコード晒すの嫌?別段他のモジュール参照してるわけじゃなし、部分的に抜粋してもらえればいいのに。
って偉そうですね。すみません。
出し惜しみ?自分の技術不足を指摘されるのが恥ずかしい?
あ、面倒なの。
オープンソース糞喰らえですね!みんなはなんでSDL使ってるの?
気持ちは分かるけど、書き込む前に深呼吸しろな。
872 :
859 :2005/08/12(金) 04:23:14 ID:DYAIzoXI
あー、いい加減な書き方したのはスマンかったね お詫びの意味も込めて、前作ったゲームのを調べてみた const float FRAME_TIME = 1000.0f / 60.0f; float timer_diff = 0.0f; while (...) { // ループ float old_timer = SDL_GetTicks() - timer_diff; // 描画等 while ((SDL_GetTicks() - old_timer) < FRAME_TIME) { SDL_Delay(0); } timer_diff = SDL_GetTicks() - old_timer - FRAME_TIME; } 途中を色々はしょった時にミスが入ってる可能性はあるが、こんな感じだった
これでいいじゃない。
ttp://www.sun-inet.or.jp/~yaneurao/rsp/rsp48to4F.html void ys::ElapseTime(void){ // (C)yaneurao 1998-1999
// 厳粛かつ正確かつ効率良く時間待ちをする
if (iFPS == 0) return ; // Non-wait mode
static DWORD lastdraw = 0; // 前回の描画時刻
// (不運にも第一発目のtimeGetTime() == 0とかゆーこともあるが、それは構わない)
DWORD t = timeGetTime(); // 現在時刻
dwFPSWaitTT = (dwFPSWaitTT & 0xffff) + dwFPSWait; // 今回の待ち時間を計算
// dwFPSWaitは、待ち時間の小数以下を16ビットの精度で持っていると考えよ
// これにより、double型を持ち出す必要がなくなる。
// dwFPSWaitTT = 1000 * 0x10000 / FPS;である
DWORD dwWait = dwFPSWaitTT >> 16; // 結局のところ、今回は何ms待つねん?
// 1フレーム時間を経過しちょる。ただちに描画しなちゃい!
DWORD dwElp = (DWORD)(t - lastdraw); // 前回描画からいくら経過しとんねん?
if (dwElp>=dwWait) {
lastdraw = t;
return ;
}
// ほな、時間を潰すとすっか!
// まだ時間はたっぷりあるのか?
// 4ms以上消費する必要があるのならば、Sleepする
if (dwWait-dwElp >= 4) Sleep(dwWait-dwElp-3);
// いまdwWait>dwElpなのでdwWait-dwElp>=0と考えて良い
// 95/98/NTで測定したところSleep(1);で1ms単位でスリープするのは可能
// ただし、実装系依存の可能性もあるのでSleepの精度は3ms以内と仮定
while ((timeGetTime()-lastdraw)<dwWait) ;
// ループで時間を潰す(あまり好きじゃないけど)
// これで、時間つぶし完了!
lastdraw += dwWait; // ぴったりで描画が完了した仮定する。(端数を持ち込まないため)
}
>>873 SDL_GetTicks()とSDL_Delay()に置き直して
VC.NETでSDLを使っているのですが、VCランタイムDLLを同封して配布したくありません。 そこで、SDLのソースを落として/MTビルドし、それは成功したんですが、 本体のほうは/MTビルドしても error LNK2005: _exit は既に LIBCMT.lib(crt0dat.obj) で定義されています。 error LNK2005: _strncpy は既に LIBCMT.lib(strncpy.obj) で定義されています。 error LNK2005: __isctype は既に LIBCMT.lib(isctype.obj) で定義されています。 このようなリンクエラーが出てビルド完了できません。 どのようにしたらうまくいくのか、教えてください。お願いします ちなみにLIBCMT.libを無視したら、ものすごい怒られました・・・(´・ω・`)
本体がデバッグビルドとか?
GJ!
882 :
880 :2005/08/23(火) 17:14:36 ID:0d6CfNLS
881がGJをくれたのでちょっといじった。 livedoorWikiは使いづらいぞw。ちょい機能がたりないように感じる。 もうちょっとやってみるわ。
ユーザー登録しなきゃ編集できないなんて冗談みたいな仕様だな。
うん、やめようか。 別のどっかいいところある?俺サーバーとかよくわかんないんだけど
886 :
名前は開発中のものです。 :2005/08/23(火) 23:38:55 ID:MD79yudw
>>885 期待age。SDLの情報サイトって更新止めてる所が多いからね。
>>886 ありがとよ。
まぁ、適当にいじってくれ。俺も保守するから。
Tipsとにかくコピペしてるんだけど、やっぱまずいかな?
SDL 1.2.9 リリース ... けど、個人的にはあんまり関係ありそうなアップデート内容無いな
SDLで、作成したプログラムの二重起動を防ぐ方法はありませんか?
Mutexをキーワードにググれー
つーかそれSDLの問題かね
だからソースの可搬性の問題でしょ? 上のほうのタイマの話といい、おまいら何でSDL使ってんの? 環境依存なんて当たり前?
起動したら一時ファイル作って、そのファイルが存在するかどうかで2重起動を検出する っていうのは邪道なのかね?
SDL_Mutex
>>894 強制終了とかでうまく終了処理が行われなかったら
そのファイルが残ってしまい起動できなくなるんじゃ?
あ、SDL_Mutexってマルチスレッドで使うんだっけ?
899 :
895 :2005/09/11(日) 21:13:08 ID:1ur5e5rk
で?
OS汎用で二重起動防止なら、自分専用のポートを決めてbindするとか。 WindowsならWSAStartupを呼ぶとか多少のOS依存はifdefで書く必要はあるが。
質問。 SDL_LoadBMPで取得したSDL_Surfaceは SW_SURFACEとして読み込まれている認識でOK?
スマソ。俺の動作結果はSWでもHWでも無い場所に格納されているみたい。 if(surface->flags&SDL_HWSURFACE) printf("HW\n"); って感じでSWも確かめましたが反応無し。
>>903 #define SDL_SWSURFACE 0x00000000 /* Surface is in system memory */
#define SDL_HWSURFACE 0x00000001 /* Surface is in video memory */
です。
システムメモリ上かVideoメモリ上のどちらかに確保されて、
下位の1bitがvideoメモリ上にあるかどうかを判定するフラグです。
if(surface->flags&SDL_HWSURFACE) printf("HW\n"); else printf("SW\n");
ってことでSWSURFACEで正解。
サンクス。古いマシンでのフィルレートがDDrawよか遅かったのです。 ううむ。
ちゃんと読み込んだ画像を SDL_DisplayFormat() して スクリーンのフォーマットにあわせた? あとそもそもスクリーンがHWSURFACEになってなければ DDrawより遅くなると思うよ?
みなさん有り難うございます(;つД`)
>>907 サンクス
おっしゃるように、HWSURFACEにして、SDL_DisplayFormatでサーフェス指定して解決したす。
909 :
名前は開発中のものです。 :2005/09/29(木) 22:19:14 ID:QcAJa6kn
ウィンドウモードとフルスクリーンモードの処理速度が異なるのだが、 どういうことだ? SDLの関数あたりが悪さしていると思うのだが、わからないんです。 教えて、えろい人!!
垂直同期の有無じゃね?
フルスクリーンだと、資源を専有してるから速いんだろうよ
913 :
名前は開発中のものです。 :2005/09/30(金) 00:59:46 ID:oblFcTL6
>911 残念な事にフルスクリーンの方が遅くなるんだ!! >912 まったくだ!!
>>913 >残念な事にフルスクリーンの方が遅くなるんだ!!
マジかっ!?
意味ねー
つーか、フルなしでよくねーの
あーなんだ、SDL側にvsync待ちさせといて、さらに待ってるとかいうオチじゃないよな?
あるところのゲームサークルに参加したんですが、 グラフィック部分にSDLを使うことになりました。 そして音楽はMIDIは環境で変わるから良くないってことで DirectMusicProducerを使うとか言い出しました 僕はmixerのMODを使うことを進めたんですが、押し切られてしまいました リンカエラーとかメモリエラーがでないか凄く心配です・・・ 皆さんはどう思いますか?
>DirectMusicProducerを使うとか言い出しました DirectMusicProducerは単に音楽作成ツールですよ? 音楽はDirectX Audioで自前で鳴らし、 効果音はSDLで鳴らそうってなら確かにやめた方がよさそう。 どんな問題が出るか知らないけどね。
918 :
916 :2005/10/13(木) 12:53:25 ID:ypy0AXR+
>>917 そうです。DirectMusicProducerで作ったデータを
DirectX Audioで鳴らそうとしてました。
効果音はどうか知りません
リンカに怒られると言ったら外部にDMPファイルを再生するDLLを置くとか言い出しました
もうガクブルです。
>>915 MODはSDLに組み込みだから楽 ← プログラマの都合
DMPはMIDIライクな編集がその場で出来るから楽 ← 音楽屋の都合
こう思った。
うまい折衷案が出るとよいが、最終的にはプログラマ側で妥協してやるしかないんじゃない?
920 :
919 :2005/10/13(木) 17:47:05 ID:ToPl7cy0
921 :
915 :2005/10/13(木) 21:13:13 ID:pthRpnxV
>>919 そうですか・・・音楽屋がやりやすいなら仕方ないです
でもDirectMusic叩けるなら、Drawも直に叩いて欲しい
うちのメインの考え方は分からないです・・・
>>921 とりあえず、言質はとっとけ
最低でも、そのメインが該当箇所を組むようにな
問題なけりゃそれでいいが、
問題出たときに誰が泥をかぶるのかを決めとかないと
プロジェクトが頓挫する事になる
UTF8のファイルから読み込んだ文字列をひとつのサーフェイスにして 描画する方法が分かりました。 しかし、その文字列を一文字ずつ描画したい場合(ドラクエのように人に話すと 表示されるメッセージのように)は人文字ずつサーフェイス作っていって フレームカウントをして表示速度の制御をしながら描画するのがいいんでしょうか? 後、UTF8だと日本語1文字が何バイトなのかって固定されてないので、すごく難しいんですが。 アイディアください。
UTF-8は先頭バイト見れば何バイトかわかるけど? 0x00-0x7F 1 0xC0-0xDF 2 0xE0-0xEF 3 0xF0-0xF7 4 0xF8-0xFB 5 0xFC-0xFD 6
>>923 むしろ
>UTF8のファイルから読み込んだ文字列をひとつのサーフェイスにして描画する方法
を教えてください
926 :
923 :2005/10/15(土) 20:55:28 ID:03Wc5kyl
927 :
925 :2005/10/16(日) 00:09:25 ID:uNCcPNGN
マジで教えて欲しいんすけど・・・
>>925 SDL_ttf をいれて以下の関数を使う
* TTF_RederUTF8_Solid()
* TTF_RederUTF8_Shaded()
* TTF_RederUTF8_Blended()
929 :
925 :2005/10/16(日) 16:53:28 ID:uNCcPNGN
そうじゃなくて、1フレーム毎にsurfaceを生成して描画してたんじゃ遅くて使い物にならない(こともないけど)ので、
アプリケーションの初期化時にテキストデータを全部読み込んで画像をcache、文字と矩形の対応情報を保存、もしくは外部でそのファイルフォーマットを吐き出すツールを作る必要があると思うんだけど、
もういいや。
>>924 >>928 情報ありがとう。知らなかったよ。
何か凄いアホが紛れ込んでるな。
931 :
925 :2005/10/16(日) 17:01:39 ID:uNCcPNGN
文字列情報が固定されているゲームに限定してレスしてしまった。すまそ。 動的な文字列の場合はやっぱりそのまま生成して使うんかな。 まあどうでもいいか。
932 :
925 :2005/10/16(日) 17:04:24 ID:uNCcPNGN
はいはい、君は僕より頭がいい。
TTF_RederUTF8_XXXを使う場合でも1フレーム毎にsurfaceを 生成するなんてアホなことはしない.文字列のsurfaceが欲しい シーンに入るときにsurface作ってそのシーンから抜けるときに SDL_FreeSurface()する. 文字と矩形を対応させて文字列を描画する方法はASCIIコード程度なら やるけど日本語ありの場合は必要な文字だけをレンダリングしたとしても 莫大なメモリを食うのでやっぱりやらない.
>>933 > 文字と矩形を対応させて文字列を描画する方法はASCIIコード程度なら
> やるけど日本語ありの場合は必要な文字だけをレンダリングしたとしても
> 莫大なメモリを食うのでやっぱりやらない.
日本語でも、αチャンネルだけのテクスチャにするとかでメモリ使用量押さえたらなんとかならんかな?
やったことないんで想像で言ってるだけだが
935 :
925 :2005/10/16(日) 19:15:54 ID:uNCcPNGN
>>933 使う文字列が多い場合、シーン毎に細分化してもメモリ使用量は変わらんがな。結局使うんだから。
ましてMMOのチャットなんかで動的に必要な場合はシーンで確保なんかできない。
936 :
930 :2005/10/16(日) 19:37:31 ID:0gQNvyRR
正直スマンかった。アホじゃなくて池沼だわ。
937 :
925 :2005/10/16(日) 20:15:33 ID:uNCcPNGN
優越感に浸りたいだけの馬鹿でなければ指摘していただきたい。 それとも文章力が無いのか、面倒臭がりなのか。
938 :
925 :2005/10/16(日) 20:21:33 ID:uNCcPNGN
>>936 じゃなきゃ誰も君のレスに何の価値を感じないよ。
君はそのレスを書き込むことに何か意義を感じるのかい?
「925は馬鹿だな」って、一緒になって賛同してくれるレスが欲しいのかい?
くだらねえ。
939 :
925 :2005/10/16(日) 20:23:46 ID:uNCcPNGN
病んでるな俺 SDL_ttfで首吊ってきます さようなら
晩ご飯までには帰ってくるのよ。
SDL SD S SD SDL
g++ g+ g + ++ ++g
944 :
名前は開発中のものです。 :2005/11/02(水) 02:51:15 ID:Hh29B0Am
>>943 まじで? もしそうなるとしたら、SDLを選択肢に選ぶ人はもっと増えるかもしれないね。
ところでSDL2.xっていつ頃になるんだろう?
borland C++ compilerでSDL_gfxを導入したいんだけど、導入方法が 分からないので、教えてほしいのですが。
>>945 こんな感じでMakefileを書いてコンパイルすればいいでしょう。
-----------------------------------------------------------
CC=bcc32
RC=brc32
ILIB=implib
CFLAG=-WD -3 -O2 -w- -AT -pc -H- -k -b -DWIN32 -DBUILD_DLL
CINCS=-I..\include
TARGET= SDL_gfx.dll
LIB= SDL_gfx.lib
SRC1= SDL_imageFilter.c
OBJ1= SDL_imageFilter.obj
SRC2= SDL_gfxPrimitives.c
OBJ2= SDL_gfxPrimitives.obj
SRC3= SDL_framerate.c
OBJ3= SDL_framerate.obj
SRC4= SDL_rotozoom.c
OBJ4= SDL_rotozoom.obj
LIB1=..\lib\SDL.lib
つづき TARGET: $(TARGET) $(TARGET): $(OBJ1) $(OBJ2) $(OBJ3) $(OBJ4) $(CC) $(CFLAG) -e$(TARGET) $(OBJ1) $(OBJ2) $(OBJ3) $(OBJ4) $(LIB1) $(ILIB) $(LIB) $(TARGET) $(OBJ1): $(SRC1) $(CC) $(CFLAG) $(OUTDIR) $(CINCS) -c $(SRC1) $(OBJ2): $(SRC2) $(CC) $(CFLAG) $(OUTDIR) $(CINCS) -c $(SRC2) $(OBJ3): $(SRC3) $(CC) $(CFLAG) $(OUTDIR) $(CINCS) -c $(SRC3) $(OBJ4): $(SRC4) $(CC) $(CFLAG) $(OUTDIR) $(CINCS) -c $(SRC4) -----------------------------------------------------------
948 :
925 :2005/11/07(月) 12:44:31 ID:TpJBaBVO
>>946 どうも。レスありがとうございます。メイクファイルを見ました。
上記のmakeをborlandのmakeコマンドで実行してみましたが、何もエラーだとか
何も反応がないので、少し修正しました。borlandのmakefileって小括弧じゃなくて中括弧で書くみたいなので、一応中括弧に直してmakeしました。
修正した所だけ書くと、
OBJ= SDL_imageFilter.obj SDL_gfxPrimitives.obj SDL_framerate.obj SDL_rotozoom.obj
$(TARGET) : $(OBJ)
$(CC) $(CFLAG) -e$(TARGET) $(OBJ) $(LIIB1)
$(ILIB) $(LIB) $(TARGET)
.c.obj :
$(CC) $(CFLAG) $(CINCS) -c $<
修正したmakefileが今手元にないけど、こんな感じにしたら、ちゃんと動きました。
一回、失敗してSDL.libをリンクしてなくてプロシージャが見つからないってエラーが出てきましたが、
ちゃんと$(CC) $(CFLAG) -e$(TARGET) $(OBJ) $(LIIB1) という感じに$(LIB1)を入れたらうまくDLLと
ライブラリが作れました。
# $(OUTDIR)って定義されてないけど、これは何でしょうか?
949 :
946 :2005/11/07(月) 20:00:12 ID:fJubQ/K/
950 :
925 :2005/11/08(火) 10:03:40 ID:S6wiWkHj
>>946 どうもレスありがとうございます。なるほど、オブジェクトファイルの保存ディレクトリですか。
SDL_gfxの配布ファイルにはVCのメイクファイルしか入ってなくって、BCCでのビルド無理だからVC買おうかと思ってましたが、質問してよかったです。
BCC Developperですか。長いことずっとコマンドライン作業だったので、Developerすごく便利そうですね。今度から使ってみます。
cygwin 環境に SDL 1.2.9 を入れてみたけど SDL_Init(SDL_INIT_VIDEO) を呼ぶと、
gdb でデバッグするとき変なことになってます
(SDL_Init と SDL_Quit を呼ぶだけのプログラムで)
5 if(SDL_Init(SDL_INIT_VIDEO)<0) {
(gdb)
warning: Hooking
warning: C:\..\TEST.EXE
warning: RPH:Injecting code at start up
warning: done...
warning: RPH:DDraw Hooked!
こんな感じのメッセージが出て、以降普通にステップ実行できるけど、
main から抜けても gdb とアプリが終了してくれない
ddraw.dll? を hook したよ、とか言ってますがこれが元凶だろうか
ちなみに SDL_Init(SDL_INIT_NOPARACHUTE) と SDL_Quit だと
問題は起こらない
cygwin + SDL でデバッグできない、なんて話は検索しても皆無だし、
どなたか情報ありませんかね?
SDLビルド時のオプションなどは、ここに書いてある通りに実行しました
http://cefiro.homelinux.org/topics/SDL/setup-win32-cygwin.html
wesnothというSDLなゲームで日本語入力できるようにしようとしているのだけど、どの手段がいいのかなぁ。 今はSDL_imとか試しているけど。 フォントレンダリングも少しアレげなんでsdl-pangoとか検討してみたり。 ここまでやるとなると、日本語入力に関してはgtk+を直に使った方がよい気がしてきたり…
なんかアホなこと書いた気がする。さすがにgtk+はむりか。必要な時だけ呼び出せるわけじゃないし。 ximにモディファイアキー喰われてしまって困っていますが、SDL_imでがんばってみます。
>951 cygwinでは全く経験無いのでわからないけど、 DDrawフックが怪しいと思うなら、 SDL自体を ENABLE_DIRECTX を外してmakeしてから試せばいいでしょう。 DIRECTXモジュールがSDLに含まれないなら、少なくともDDRAWの疑いは晴れる。 外し方は自分で調べてな。 configureで --disable-use_directxとか?? 直接makefileから -DENABLE_DIRECTX を外すか。
>>954 サンキュー
そういう手段もあるのか
どうも、この怪しいメッセージ、OmegaDriverが出してるっぽくて
このフックだけ外す方法を模索中
ノートPCなんだけど、標準ドライバだとpivot表示ができないから
OmegaDriver自体を使わない、というのはちょっと困る
956 :
名前は開発中のものです。 :2006/02/05(日) 18:29:11 ID:rbHrat23
SMPEGをVC++6でコンパイルする方法を教えて頂けませんでしょうか? ググってみたのですが、どこにも解説しているサイトがなくて…。
済みません、sage忘れてましたorz
別にsageんでもいいと思うけど。。。 どこで詰まってるんだ? コンパイルエラーくらい出して欲しい。
あ、コンパイルエラーは関係ないな、失礼した
smpeg-0.4.4でVisualC.zipを解凍して中の smpeg.dswやsmpeg.dspを実行してみたのですが、 エラーが出て先に進めないのです。 bzlibの時はすんなりいったのですが…。
どういうエラーメッセージが出ましたか? って聞かれなきゃ言わないのか?最近の厨房様は。
なるほど
960はただエラーが出たと書きたかっただけで、 解決策は求めていないということね。
bccですが初心者の初心者による初心者のためのSDLさん(
ttp://tokyo.cool.ne.jp/sdl/ )の
コンパイルテストを実行すると
エラー E2046 D:\Source\BCB\SDL_Test\main.cpp 1: include 指令のファイル名の書式が正しくない
エラー E2141 D:\Source\BCB\SDL_Test\main.cpp 14: 宣言の構文エラー
エラー E2268 D:\Source\BCB\SDL_Test\main.cpp 20: 未定義の関数 'printf' を呼び出した(関数 main(int,char * *) )
エラー E2451 D:\Source\BCB\SDL_Test\main.cpp 28: 未定義のシンボル SDL_Rect(関数 main(int,char * *) )
エラー E2379 D:\Source\BCB\SDL_Test\main.cpp 28: ステートメントにセミコロン(;)がない(関数 main(int,char * *) )
エラー E2451 D:\Source\BCB\SDL_Test\main.cpp 29: 未定義のシンボル dest(関数 main(int,char * *) )
エラー E2451 D:\Source\BCB\SDL_Test\main.cpp 31: 未定義のシンボル Uint32(関数 main(int,char * *) )
等のエラーが大量に出て失敗するのですが、導入部分でどこが間違っているのでしょう?
一通り見直してやり直してみましたがまったく出来ませんので…
と思ったら includeの先に何も無かったので<SDL/SDL.h>を付けてみたら一発成功でした。 お騒がせしてすいません
Mac OS X 10.3.9なんですが,かなり初歩的な質問をさせてください SDL-1.2.9フォルダをホームにおいてSDL-1.2.9フォルダにて./configure、make、sudo make install でSDLをインストールしました(エラーは出ませんでした) とりあえずしっかりパスが通っていてSDLがインストールされているのを確認するにはどうすればいいんでしょうか? パスはホームの.tcshrcにsetenv PATH /usr/local/bin:/SDL-1.2.9:$PATH と記述しただけで通したつもりになっています…。
サンプル動かしてみれば? testの下にいろいろ入ってる。 testwinあたりでもどう? それはさておき /SDL-1.2.9 に入れてそこにパス通すのはどんなもんよ。
>それはさておき /SDL-1.2.9 に入れてそこにパス通すのはどんなもんよ。 すいません正直パスを通す意味がよく分かってません /SDL-1.2.9/testにて cc testwin.c `sdl-config --cflags --libs`でコンパイルしたらとんでもないくらいエラー出ました。 あきらかに各種ファイルの不足によるものばかりなのでtestに不足ファイルをいれれば成功しそうですが それではプログラムを作るたびにそのディレクトリに必要ファイルを入れなければなりません。 どのディレクトリででもSDLのプログラムをコンパイルし実行するにはどのようにすればいいのでしょうか?
それはSDLの知識やC言語の知識というより、 OSやUNIX上のC開発の知識になってしまうので ここで一から教わろうってのは厳しいかもね。 おれもMacOSのシステム構成とか知らんし。 とりあえず cc付けないで sdl-config --cflags --libs これだけで実行してみた? 多分そこから動いてないのだろうけど そこから先は手探りなんじゃないかな。
>>970 あなたが知らないのならわかる人を連れてきてください。
それすらできないようならあなたなんかに用はありません。
972 :
名称未設定 :2006/02/16(木) 19:18:34 ID:6HFR4Et4
最近は bash が Mac OS X のデフォルトのログインシェルなんで、 ~/.cshrc に書いても読まれていない罠の可能性が… ( echo $SHELL すればわかる、かも) ~/.bashrc とかに書かなきゃいけないかもよ? とにかく、エラーがとんでもなくでたんならそのエラーと そのときのコマンドラインを貼り付けれ。 長すぎて迷惑だと思うならどこか手軽なアップローダを探せばいい。 新・mac板に行ってTerminal初心者スレあたりでたずねることも検討しなさいな。 初心者だって開発してみたいだろうさ。
シェルをtcshからbashに変えて ~/.bash_profileにexport PATH=$PATH":/SDL-1.2.9"と記述しました ~/SDL-1.2.9 および ~/SDL-1.2.9/testにて sdl-config --cflags --libsだけで実行すると -bash: sdl-config: command not found ~/SDL-1.2.9にて ./sdl-config --cflags --libsで実行すると -I/usr/local/include/SDL -D_THREAD_SAFE -L/usr/local/lib -lSDLmain -lSDL -framework Cocoa -framework OpenGL となりました。これはこのディレクトリ内にsdl-configがあるので当たり前なんですが…
~/SDL-1.2.9/testにて cc testwin.c `sdl-config --cflags --libs`を実行すると cc: sdl-config --cflags --libs: No such file or directory testwin.c:12:17: SDL.h: No such file or directory testwin.c:14: error: parse error before '*' token testwin.c: In function `DrawPict': testwin.c:17: error: `SDL_Surface' undeclared (first use in this function) testwin.c:17: error: (Each undeclared identifier is reported only once testwin.c:17: error: for each function it appears in.) testwin.c:17: error: `picture' undeclared (first use in this function) testwin.c:18: error: `SDL_Rect' undeclared (first use in this function) testwin.c:18: error: parse error before "dest" testwin.c:21: error: `SDL_Color' undeclared (first use in this function) testwin.c:21: error: `colors' undeclared (first use in this function) testwin.c:21: error: `cmap' undeclared (first use in this function) testwin.c:24: error: `bmpfile' undeclared (first use in this function) testwin.c:38: error: parse error before ')' token testwin.c:39: error: parse error before ')' token testwin.c:47: error: parse error before ')' token testwin.c:48: error: parse error before ')' token testwin.c:63: error: `screen' undeclared (first use in this function) testwin.c:73: error: `Uint32' undeclared (first use in this function) testwin.c:73: error: parse error before "black" testwin.c:74: error: `Uint8' undeclared (first use in this function) testwin.c:74: error: `pixels' undeclared (first use in this function) testwin.c:76: error: `black' undeclared (first use in this function) testwin.c:77: error: parse error before ')' token testwin.c:88: error: `speedy' undeclared (first use in this function) testwin.c:89: error: `displayfmt' undeclared (first use in this function)
testwin.c:102: error: `SDL_HWSURFACE' undeclared (first use in this function) testwin.c:107: error: `dest' undeclared (first use in this function) testwin.c:113: error: `update' undeclared (first use in this function) testwin.c:118: error: `flip' undeclared (first use in this function) testwin.c:135: error: `nofade' undeclared (first use in this function) testwin.c:137: error: parse error before "final" testwin.c:140: error: parse error before "Sint16" testwin.c:140: warning: no semicolon at end of struct or union testwin.c:141: error: `cdist' undeclared (first use in this function) testwin.c:145: error: `maxstep' undeclared (first use in this function) testwin.c:146: error: `final' undeclared (first use in this function) testwin.c:149: error: `palcolors' undeclared (first use in this function) testwin.c:96: error: label `done' used but not defined testwin.c: At top level: testwin.c:220: error: parse error before ':' token testwin.c:223: warning: parameter names (without types) in function declaration testwin.c:223: error: conflicting types for `free' /usr/include/stdlib.h:136: error: previous declaration of `free' testwin.c:223: warning: data definition has no type or storage class testwin.c:223: warning: parameter names (without types) in function declaration testwin.c:223: warning: data definition has no type or storage class testwin.c:224: error: parse error before "return"
testwin.c: In function `main': testwin.c:229: error: `SDL_Surface' undeclared (first use in this function) testwin.c:229: error: `screen' undeclared (first use in this function) testwin.c:235: error: `Uint32' undeclared (first use in this function) testwin.c:235: error: parse error before "video_flags" testwin.c:247: error: `video_flags' undeclared (first use in this function) testwin.c:302: error: `SDL_HWPALETTE' undeclared (first use in this function) testwin.c:307: error: `SDL_HWSURFACE' undeclared (first use in this function) testwin.c:312: error: `SDL_DOUBLEBUF' undeclared (first use in this function) testwin.c:317: error: `SDL_FULLSCREEN' undeclared (first use in this function) testwin.c:324: error: `SDL_INIT_VIDEO' undeclared (first use in this function) testwin.c:329: error: `SDL_Quit' undeclared (first use in this function) testwin.c:353: error: `then' undeclared (first use in this function) testwin.c:355: error: `now' undeclared (first use in this function)
>>974 とりあえずはこれでいいかも
cc testwin.c -I. -D_THREAD_SAFE -L. -lSDLmain -lSDL -framework Cocoa -framework OpenGL
シェルの使用法がわかっていないようなので、
先にそちらを理解してからのほうがいいと思う。
978 :
名称未設定 :2006/02/16(木) 21:31:05 ID:6HFR4Et4
ヒマだから付き合うけど
書き方が悪かったかもしれないけど、別に bash を使え、と強制しているわけじゃないよ。
Linux ユーザーには bash を使う人が多いので、その分情報収集に有利かもしれないけど。
~/SDL-1.2.9 とは $HOME/SDL-1.2.9 のことで、 Mac OS X では普通は
/Users/$USER のこと。 $USER は
>>976 のユーザー名ね。
~/SDL-1.2.9 にパスを通したいなら、
export PATH="/Users/nanashitan/SDL-1.2.9:$PATH"
なり、
export PATH="~/SDL-1.2.9:$PATH"
なり書く必要がある。
>>973 で書いた書き方 (export PATH=$PATH":/SDL-1.2.9") だと、
起動ディスクの直下に SDL-1.2.9 を置いていて、そこにパスを通したい場合の書き方になる。
(古めかしい書き方だと Macintosh HD:SDL-1.2.9: とかいうことね。)
起動ディスクの直下にモノをごちゃごちゃ置くのはお勧めできないので、
>それはさておき /SDL-1.2.9 に入れてそこにパス通すのはどんなもんよ。
みたいなツッコミが入ることになる。
979 :
名称未設定 :2006/02/16(木) 21:47:01 ID:6HFR4Et4
で、パスを通す、の意味なんだが…
>>973 は ~/SDL-1.2.9 にコマンドを置いているので、何も考えずに
$ ~/SDL-1.2.9/sdl-config
とコマンドを入力しても正しく動作するのだよ。いちいち ~/SDL-1.2.9 と
タイプするのが面倒な人は、環境変数 PATH に ~/SDL-1.2.9 を追加しておく、と。
で、環境変数の設定方法が bash では export だ、ということ。
SDL のインストールが(ソースからやったなら make install まで)終わっているなら、
おそらく /usr/local/bin に sdl-config もインストールされていると思うので、
/usr/local/bin/sdl-config としてもいいし、 PATH に /usr/local/bin を登録しておくのもよいかと。
俺の場合、 Fink っつーパッケージ管理システムを使っているので、
/usr/local は使わないことにしているんだけどね。これは余談。
あと、 `` は、中のコマンドの出力結果で置き換えるためのカッコ。
>>977 を見ればピンとくるだろうか。
いろいろシェルの使い方を検索しつつがんばれ。
個人的にはまっさらに無知な春休みの学生が最低限どれだけの知識があれば
開発を始められるのか、興味深いところではあるw
ID:6HFR4Et4さんありがとうございます!!
おかげさまでパス通りました!
>>977 さんのコンパイル方法をやってみましたが
全く同じエラーが出たのでまだ入れなければいけないものがあるんでしょうね
本家サイトからとってきて試したいと思います
まったく同じじゃないでしょう。少なくとも 「cc: sdl-config --cflags --libs: No such file or directory」の行が消えたはず。 エラーのはじまりと終わりは重要なことが多いので、気をつけて。 で、 /usr/local/lib とか /usr/local/include が Mac OS X ではデフォルトでリンカのパスに含まれていないので、 gcc のコマンドラインに -I/usr/local/include -L/usr/local/lib を入れてみな。
982 :
名称未設定 :2006/02/16(木) 22:32:32 ID:6HFR4Et4
っと。間違えた。ごめ。 とりあえず、パスが通ったんなら cc testwin.c `sdl-config --cflags --libs` を初心に返って試してみなされ。
コンパイルできちゃいました… でも実行はどうやって? ./testwinではないのでしょうか? 重ね重ねすいません…
984 :
名称未設定 :2006/02/16(木) 22:54:48 ID:6HFR4Et4
ここからはSDLスレの住人の出番ではなかろうか。 とりあえず、エスパー的に回答すると cc のコマンドラインに -o testwin を付けてみればいいに 1ペリカ。
ID:6HFR4Et4さんtestwin実行成功しました ありがとうございました いろいろサンプルプログラムを実行していましたがSDL_imageなしで画像を読み込んで使っているプログラムがありましたが SDL_imageはどのような場合に必要なのでしょうか?これなしでは画像は使えないと思っていました…
すいません、よく考えたら聞き過ぎですね(汗 自分でがんばってみます。 ありがとうございました。