トップページgamedev
987コメント396KB

SDLスレ

■ このスレッドは過去ログ倉庫に格納されています
0001login:Penguin01/11/11 17:59ID:u0HMN7qC
マルチプラットホームな汎用ゲームライブラリの
SDLについてのスレッドです。
最新情報、参考になるソース、質問等

とりあえず、本山
http://www.libsdl.org/
0772名前は開発中のものです。05/03/14 01:42:53ID:wCuLvh4G
>768
その原因は、SDLに付属のマニュアルに書いてあるよ。
君は.NETでDLLをコンパイルしたのかな?SDL for Beginersの掲示板ではそのことについてもきちんと書かれている。
よく読んでみるといいだろう。

>770

CランタイムのDLLをはずしたいなら、依存する全てのライブラリを/MTでコンパイルしなおさなきゃいけない。
それと、リンクエラーの意味は読めばわかる。
何が足りないのかは見当が付くけど、それの意味がわからない場合はそもそも力量が足りてない。

それと、MSVCRT*.DLLを入れればいいだけなのに、.NET Frameworkインストールしてくれというのは見当違いだよ。

0773名前は開発中のものです。05/03/14 01:44:48ID:wCuLvh4G
依存する->CランタイムライブラリDLLに依存するという意味ね。
0774名前は開発中のものです。05/03/14 02:19:56ID:VEcyrTnK
カリングとかどうなの?Java3Dより貧弱ってことはない?
0775名前は開発中のものです。05/03/15 19:37:17ID:Z609w/mR
mingwでsdl_ttf,sdl_net,sdl_image,sdl_mixer使うときはいちいち自分でコンパイルするより
vc用のインポートライブラリをreimpする方が楽だと今更気がついたのだった。
ははは
0776名前は開発中のものです。2005/04/02(土) 07:51:18ID:mMTwmK/8
なんか、VC++6.0でビルドしたやつ起動すると、
コマンドプロンプトも一緒に起動しちゃうんだけど、
これって仕様じゃないよね?

環境は
Windows2000
VC++6.0
SDL1.2.8

http://tokyo.cool.ne.jp/sdl/

2.導入から最初のプログラムまで SDLTutorial
に置いてある
SDLTutorialというソースなんだけど
0777名前は開発中のものです。2005/04/02(土) 08:41:42ID:6EJmuvmn
>>776
新規作成のウィザードでコンソールアプリケーションじゃなくて
windowsアプリケーションを選べ
0778名前は開発中のものです。2005/04/02(土) 16:44:19ID:mMTwmK/8
>>777
まじ感謝
0779名前は開発中のものです。2005/04/22(金) 00:07:43ID:Ae0Aozsn
SDL.NET って、SDL_imageFilter* 系は使えないのか…(´・ω・`)
07807792005/04/22(金) 00:09:58ID:Ae0Aozsn
嘘、Tao.Sdl から呼び出せた。なんでもない。
0781名前は開発中のものです。2005/05/07(土) 13:39:48ID:HNMZWJUh
はじめまして。早速ですが質問させてください。
現在が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です。よろしくお願いします。
0782名前は開発中のものです。2005/05/07(土) 16:26:55ID:tQ5vRoic
>>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すれば使えるのかもしれませんが、試したことはありません。
07837812005/05/07(土) 18:01:27ID:HNMZWJUh
>>782

うまく行かない時はSDL_GetError()を確認するべきだったのですね。
複数の画像ファイル等を一つのファイルにパックして、そこから
画像ファイルを読み込んで...ということをしようと思ってSDL_RWFromFP
を使ってみました。この方法がダメとなると何か他に良い方法があるでしょうか。
取りあえずSDL_RWFromMem()でできるかを試してみようと思います。
どうもありがとうございました。
07847822005/05/08(日) 19:51:26ID:ARUo6ShU
>>783

>この方法がダメとなると何か他に良い方法があるでしょうか。
>取りあえずSDL_RWFromMem()でできるかを試してみようと思います。

SDL_RWFromFileは内部でSDL_RWFromFPを呼び出しているだけなので、
SDL_RWFromFPで可能ならば、SDL_RWseekなどを使って同じような操作が
できると思います。もちろんSDL_RWFromMemでもかまいませんが。

ちなみにSDL_archiveというものもあります。
>>370
07857812005/05/08(日) 20:33:06ID: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スレでしたほうが良かったしょうか・・?
0786名前は開発中のものです。2005/05/09(月) 12:31:19ID:X842fXoJ
OpenGL使ってるなら、WGLにアウトラインフォントを描画する関数があったはず。それだとWin専用になってしまうけど。
ビットマップフォントでも良いならgl_kanjiがよろしいかと。
07877822005/05/09(月) 19:59:22ID:2WAlRLk2
>TTF_RenderUTF8_Solid() で作ったSDL_Surfaceを
>どうやって描画してやればいいのかが分かりません。
>幅と高さが2の累乗でないのでうまく行かず...

とりあえず、SDL_ttfのサンプルであるglfont.cが
SDL_ttfのソースと一緒にあるので、それを見ていただければ、
大体のことは分かると思います。

見てもよう分からんというときには、また聞いてください。
07887812005/05/09(月) 22:12:34ID:kc7J0Eit
>>787
そんなところにサンプルがあったのですね。全く気がつきませんでした。
早速サンプルを元にして試してみたら無事ttfからテクスチャを作って
描画することが出来ました(日本語は文字化けしてしまいますが)。

助言してくださった皆様、どうもありがとうございました。
0789名前は開発中のものです。2005/05/10(火) 03:45:21ID:iTBS7Jyy
>>788
OpenGL で TrueTypeフォント使って文字列描画したいなら SDL_ttf なんて使わずに
FTGL ( http://homepages.paradise.net.nz/henryj/code/index.html#FTGL )
を使うと幸せになれると思う.
outilne,texture,bitmap,pixmap とかの好きな方法でレンダリングできるよ

あと SDL_ttf で日本語が化けるのは使ってるフォントが bitmap フォントが
埋め込まれた TrueType フォントだとダメとかなかったっけ?
文字列がUTF8じゃないってことはさすがにないよなぁ...
07907812005/05/10(火) 11:15:14ID:/sZ8aOiM
>>789
そのまさかで文字列がUTFじゃないようです(Shift-JISなのかな?)。
TTF_RenderText_Solid()を使っているのですが他のを使えば良いのでしょうか。
それとも文字コードをUTF8に変換するプログラムを書けば良いのでしょうか。
0791名前は開発中のものです。2005/05/10(火) 19:58:16ID:iTBS7Jyy
>>790
なんてゆーか文字コード以前の問題だろ…
TTF_RenderText_Solid() はLATIN1なテキストしか通らんよ.
できたらマニュアルくらい読んでくれ.
http://jcatki.no-ip.org/SDL_ttf/SDL_ttf_35.html
07927822005/05/10(火) 20:14:19ID:c/mddx9W
>あと SDL_ttf で日本語が化けるのは使ってるフォントが bitmap フォントが
>埋め込まれた TrueType フォントだとダメとかなかったっけ?

msgothic.ttcの場合はSolidなら大丈夫、
ShadedやBlendedだと22pt以下はダメですね。
この問題だと化けるのは日本語だけではありませんが。

>それとも文字コードをUTF8に変換するプログラムを書けば良いのでしょうか。

UTF8かUnicodeに変換する必要があります。
フリーのフォントや文字コードについての話が
http://tokyo.cool.ne.jp/sdl/index.html
でも行われているので、お悩みなら参考になるでしょう。
0793名前は開発中のものです。2005/05/11(水) 01:00:39ID:irIlrbEI
msgothicでもTT_CONFIG_OPTION_EMBEDDED_BITMAPSをundefしてfreetype再コンパイルすれば22pt以下も表示できた気が
0794名前は開発中のものです。2005/05/11(水) 17:06:15ID:ChV6SFiM
SDL_ttf は埋め込みビットマップフォントのある TrueTypeFont を読むと、
埋め込みビットマップの存在するサイズを指定するだけで
アウトラインフォントを無視して強制的に埋め込みビットマップフォントの方を使うんだよ。
でもそのための処理は入ってない。だから化けてる。
>>793 は SDL_ttf が内部で使ってる freetype の埋め込みビットマップ処理そのものを潰して対処してる。
なんだかなー。俺も他のライブラリ使った方がいいと思う。
07957812005/05/12(木) 15:13:44ID:gBvQuFFy
皆様アドバイスありがとうございます。

mbstowcs()を使ってUNICODEに変換してTTL_RenderUNICODE_Blended()
を使うことで無事日本語を表示することが出来ました。
取りあえず22pt以下の場合はTTL_RenderUNICODE_Solid()を使って表示
することにしています。他にもライブラリがあるようなのでぼちぼち
調べてみようかと思います。どうもありがとうございました。
0796名前は開発中のものです。2005/06/25(土) 16:10:39ID:kpes39YP
軽めのGUIライブラリーってどれ?
多くてわかんない
0797名前は開発中のものです。2005/06/26(日) 17:35:22ID:zg82OFD2
今日(1時間前)からSDLを使い始めたものですが、
>>771の発言のおかげでttp://tokyo.cool.ne.jp/sdl/の一番雛形が通りました。
Thx!!
0798名前は開発中のものです。2005/06/26(日) 23:25:16ID:Expiz02r
>797
久しぶりにそこのぞいたけど、新しい記事とか解説はなかったな
カウンタが1000越えてるな
たしか>633が77ゲッツしてたんだよな、懐かしい
0799名前は開発中のものです。2005/06/27(月) 08:01:33ID:3Ab5ewvX
質問です。
2つあるんですが、
1個目、SDLの標準機能で2枚目のウインドウを作ることってできるんでしょうか?
2個目、SDLの標準機能でC言語標準のscanfやらfgets(from stdin)やらのように、ユーザーに要求を求めるようなことって可能でしょうか?

2個目は1個目ができればハードコードで作ることも可能そうですが、ちょっと面倒な気がします。
よろしくお願いします。
0800名前は開発中のものです。2005/06/27(月) 08:02:17ID:3Ab5ewvX
AGE!!
0801名前は開発中のものです。2005/06/27(月) 23:12:40ID:YfSmd5eY
>>749
GetAncestor(SDL_Window, GA_ROOT);
がとおらないのは
WINVER=0x0500とでも
C/C++ -> プリプロセッサ -> 定義
に入れると解決。

という遅レス

あとafxres.hなんてMFC入れればあるんじゃね?
08027992005/06/28(火) 01:25:30ID:xvJWzK7X
一日で一レスか。
こりゃ参ったなー。
作りたいものへのモチベーションも下がってきたし、一端とりさげるかな。
08038022005/06/28(火) 01:55:33ID:xvJWzK7X
再度検索してみたら、2000年の時点の話だが、対応してないというページを見つけた。
tp://risky-safety.org/~zinnia/sdl/watch/2000/10/
0804名前は開発中のものです。2005/06/28(火) 02:06:28ID:pKbCq+nM
>>799
1個目:
FAQだと思うが、改めてソースを見たところ、SDL_VideoInit()がcurrent_videoと言う
グローバル変数にビデオデバイス情報を格納していて、それを切り換えるAPIもない。
ロックせずに使用してるので、スレッド化も無理。
そもそもウィンドウという概念はない。

2個目:
コンソールを使いたいのか?だとすると開発環境によるだろうな。
俺は、MinGWを使ってるがこれだと無理っぽい。cygwinなら出来るだろうが、
cygwin上でSDLを動かしたことないんでよーわからん。
0805名前は開発中のものです。2005/06/28(火) 02:21:39ID:dyIcBP9c
>>799
どこかで既出だろう+試せば判るだろと思って黙ってたんだが。

ひとつめ、二つ以上のウィンドウは出せんとwebのどこかで読んだな。
ソースを見てもグローバル変数(Windows なら HWND SDL_Window)を
使ってそこらじゅうで使いまわしてるから、まず無理だろうと思う。

ふたつめ、起動した時にDOS窓(これも Windows の話だが)が出ているならできる。というかできた。
Windows の場合、設定によってはstdoutをstdout.txtにリダイレクトして、
DOS窓を出さないこともできるが、その場合はできなかった。
ソースは見てないが多分無理だろうな。
08068052005/06/28(火) 02:30:05ID:dyIcBP9c
と書いてる端から被ったか……。全く食いつきがいいよな俺ら。

>>804と俺で書いてることが微妙に違うが、
ひとつめの違いは>>804が機種独立の部分を見て、
俺が機種依存の部分を見て喋ってるせい。
ふたつめは環境の違いで、俺の環境(VC6)ではどちらも作れる。
MinGWとCygwinはどちらかができるんなら
両方できるんじゃないかと思うがどちらも知らんからわからんなあ。

と、聞かれてもいないが補足しとく。
0807名前は開発中のものです。2005/06/28(火) 04:03:09ID:xvJWzK7X
>>804-806
レスthx

1個目について、
なるほど、グローバル変数つかってるのか。
そりゃ、切り分けが大変そうだ。
明快な回答に感謝。

2個目に付いて、
えーっと、誤解を招いたようだけど、
要はscanfとか自体を使うのではなく、自前か何かで実装できないかって、話です。
それが、SDL標準であったら良かったんですけど、なさげですね。
2枚目のウインドウがでるなら、そっちのサーフェスとキー入力を捻って入力コンソールを作ることができたんでしょうけど・・・。

あと、
作りたいソフトを超えるソフトを見つけてしまったので一端引くことにしました。
それが、ちょうどイメージしてた物に近かったため、それでいいかなと思っています。
回答ありがとうございました。
0808名前は開発中のものです。2005/07/05(火) 04:30:00ID: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
08098082005/07/05(火) 04:38:10ID:zWniNiIr
補足です。
ウィンドウモードでリフレッシュレートは85Hzです。
画像を描画させなければ130FPSほどでますがFlipだけで130FPSってのはちょっと遅いですよね?
0810名前は開発中のものです。2005/07/05(火) 11:23:53ID:Arb1ZSmv
SDLってイイとか言われているけど
実は描画が遅いんだよね
0811名前は開発中のものです。2005/07/05(火) 14:08:42ID:1ZePfTMa
>>808
せめて実行可能なコードを出せよ…

SDL_Flipだけで130FPSってのは遅すぎるのでどこかが間違っていると思われ

とりあえず SDL_SetVideoMode()の戻り値のSDL_SurfaceとBlitしている画像
のSDL_Surfaceのflagsやformatをチェックして期待通りかどうかチェックしれ
08128112005/07/05(火) 14:24:14ID:1ZePfTMa
あとバカみたいだと思うだろうけどFPSの計算の仕方とかもチェック
08138082005/07/05(火) 14:53:21ID: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;
}
08148082005/07/05(火) 14:53:54ID: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;
}
08158082005/07/05(火) 14:57:52ID:zWniNiIr
普通にDirectX(draw)でハードウェアサーフェイス作ると500FPSとか軽くでるので
ハードウェアやドライバがおかしいとも思えないし何ででしょうね。
皆さん上のコードでFPSいくつ位でます?
08168082005/07/05(火) 15:07:12ID:zWniNiIr
>>811
>のSDL_Surfaceのflagsやformatをチェックして期待通りかどうかチェックしれ
SDL_Surface.format_versionってのがscreenでは2、surfaceでは4になっている以外は同じです。
これが原因ですかね…?
んー。
08178112005/07/05(火) 18:34:24ID:1ZePfTMa
>>808
実行してみた.SDL_Flip()のみにして300fpsくらい出た…

CPU : PentiumM 1.1GHz
Video : i855GM (VRAM は Main Memory) の 16bpp

とりあえず毎フレームSDL_WM_SetCaption()するのは無駄なんで
CalcFPS()内のifの中に持って言ったら 400FPSくらいになった…
0818名前は開発中のものです。2005/07/05(火) 19:49:15ID:f1qgE5RI
試しました。確かに

WindowsXP
Pentium 4 2.4GHz
GeForce4 MX 420

ではSDL_Flip()だけで130FPSぐらいになります。
08198082005/07/05(火) 21:16:11ID:zWniNiIr
>>811, 818
テストありがとう。超ありがとう。
でもお気楽にハードウェアデバイスが使えると思ったんだが何やら環境依存でそうでもないみたいですね。
DirectXより環境に依存するなんて使う気無くしました。
他のクロスプラトフォームライブラリ探します。
レスありがとう。それに関しては感謝してます。
ありがとう。さようなら。
0820名前は開発中のものです。2005/07/05(火) 21:42:36ID:x9lRp/t3
>>819
他にいいのがあれば誰もSDLを使わないよ。
とりあえず、やりたいことが2Dなのか3Dなのか分からんが、
3Dの場合はOpenGLを使うことになるが、WindowsとLinuxでなんの
問題もなく使える。

しょーもないコード書いて勝手にSDLを悪者にするのだけはやめれ。
08218082005/07/05(火) 21:55:55ID:zWniNiIr
>>820
SDLを馬鹿にしているつもりはないよ。
それどころかSDLは初期化が簡単(ハードウェアを利用するライブラリとしては)なので初心者/入門者には最適だと思います。
また、さくっと作りたい場合は。
ただ、本家で掲載しているコードをほぼそのまんまの形で利用した場合、最低限バックバッファにコンパチブルな
オフスクリーンサーフェイスのフォーマットを選択してくれてもいいように思いました。
Simple directmedia layerのsimpleってなんでしょう?

>しょーもないコード書いて勝手にSDLを悪者にするのだけはやめれ
否定するなら根拠をまず述べるのが筋ってもんです。
0822名前は開発中のものです。2005/07/05(火) 22:59:46ID:LYpwtNFt
#pragma once
って、非ウィンドウず系でも使えるなりか?
0823名前は開発中のものです。2005/07/05(火) 23:16:04ID:zWniNiIr
>>822
少なくともgccでは#ifndefを使用したほうがいいかと。
そして激しくスレ違い。
0824名前は開発中のものです。2005/07/05(火) 23:16:34ID:iphFkIr5
たしかにそれだけ遅いとJava2Dより遅いってことだから
なんかわけがありそうな気がする・・・
0825名前は開発中のものです。2005/07/05(火) 23:29:28ID:l636Cdmy
DirectXもヘンテコなコード書けば、一部のマシンだけでしか動かないコードになると思うがな。
0826名前は開発中のものです。2005/07/05(火) 23:44:56ID:zWniNiIr
>>825
確かにコンパイラは嘘は付きませんからヘンテコはコードにはそれなりの挙動を見せます。
ですが、>>813がそれほど罪深きコードだとは思わないけどなぁ…。
それとも暗黙の了解的なコーディングがあるんでしょうか?
0827名前は開発中のものです。2005/07/06(水) 09:30:28ID:e9o9xwuh
>> 808
そのコードだとどちらのサーフェイスもシステムメモリに取られているだろう罠
811が言うように SDL_Surface の flags をチェックしてみ
08288182005/07/06(水) 20:18:02ID: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
になりました。(合ってるのかな?)
0829名前は開発中のものです。2005/07/18(月) 22:07:17ID:Tgmwb20q
Irrlicht初心者質問スレ
http://pc8.2ch.net/test/read.cgi/tech/1104179696/226
でも聞いてみたのですが、反応が無いのでこちらでも聞いてみます。マルチすいません。

Irrlichtで描画系、その他(音、入力関係とか)はSDLと組み合わせて使うことって可能でしょうか?
あと、もし可能なんだとしたら、サンプルとかあると嬉しいのですが、ご存じの方いませんか?
0830名前は開発中のものです。2005/07/20(水) 00:36:00ID:a4NCqugX
SDL_MixerでBGMのクロスフェードって可能でしょうか?
0831名前は開発中のものです。2005/07/20(水) 05:03:25ID:KNwpKu9v
Channelを1つBGMとして使えば行けるんで無いかしら。
0832名前は開発中のものです。2005/07/20(水) 19:24:07ID:oHYMFGyh
~~~~~~\   /~~~~~~
     \/
     /\
    /    \

じゃなくて

~~~~~~\        /~~~~~~
     \     /
      \   /
        \/
にする!
0833名前は開発中のものです。2005/07/20(水) 20:00:00ID:eQOHDI/N
SDL_Mixerはシンプルだけど、こまかいことは苦手
0834名前は開発中のものです。2005/07/20(水) 21:06:55ID:J6BwLsDL
~~~~~~\   /~~~~~~
     \/
     /\
    /    \
   ~~~~~~~~~~~~  ←この部分を合成
0835名前は開発中のものです。2005/07/25(月) 19:06:53ID:1zvi2dmP
SDLを使って、ゲームを作ろうと思うのですが、
Win上で使える入力補完機能のあるIDEはありませんか?
0836名前は開発中のものです。2005/07/25(月) 21:28:19ID:tBl8Lhba
入力補完のないIDEなんて, ほとんど存在しないだろw
好きなIDE使え
0837名前は開発中のものです。2005/07/26(火) 00:22:38ID:c4yZrU1p
>>835
VisualStudio.NETが一番おすすめ
0838名前は開発中のものです。2005/07/26(火) 03:30:17ID:fGo2aUYV
NetBeansでもEclipseでもいいぞ
0839名前は開発中のものです。2005/07/31(日) 00:02:44ID:quLBISXO
mac版のゲームを配布する場合はスタティックリンクするしかないかな?
となるとソース公開しなきゃ(’A`)
0840名前は開発中のものです。2005/07/31(日) 00:10:36ID:ooozGQbR
Windows版のヘッダのライセンスはLGPLよりかるいんだっけ?
0841名前は開発中のものです。2005/07/31(日) 14:53:12ID:okeB3T00
>>839
オブジェクトファイルだけで良いんじゃなかったっけ?
08428392005/07/31(日) 15:40:59ID: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.
0843名前は開発中のものです。2005/08/01(月) 11:50:17ID:lmGZDgba
>839
知らんけどMac用のSDL共有ライブラリが配布されてないなら、
自分で共有ライブラリを作って公開してそのソースだけ公開すれば?
0844名前は開発中のものです。2005/08/01(月) 17:32:41ID:sroBhudh
>>839
LGPLのライブラリをスタティックリンクした場合は、ライブラリのソースコード
が必要で、それを改変したあとにちゃんと実行ファイルを再作成できるように
しておかなければいけない。
必ずしもアプリのソースは必要ではないけど、ソースもなしに実行ファイルを
作成できるはずもないので、事実上全ソースを公開する必要があるっぽい。

結局、動的リンクにする以外にソース公開からは逃れられないと思う。
0845名前は開発中のものです。2005/08/01(月) 18:08:55ID:ciKvobzi
ダイナミックリンクでもヘッダ部分もLGPLでライセンスされていたら
組み込んでコンパイルしてることになるから
コンパイルに必要なオブジェクトファイル配布しないとだめだな


Javaのようなヘッダがないダイナミックリンクだけなら大丈夫だが
0846名前は開発中のものです。2005/08/01(月) 21:54:22ID:2dfE5juZ
>>845
それだっ!!
SDLのJavaラッパーを使えば万事解決かもね。
0847名前は開発中のものです。2005/08/02(火) 03:32:09ID:cGbi1ZNI
>>845
> ダイナミックリンクでもヘッダ部分もLGPLでライセンスされていたら
> 組み込んでコンパイルしてることになるから
以下の記述により、ヘッダー程度のものは無問題。
---
もしそのようなオブジェクトファイルが、数字のパラメタやデータ構造のレ
イアウト、アクセス機構または小さなマクロや小さなインライン関数(長さが
10 行かそれ以下)のみ利用するならば、そのオブジェクトファイルの利用は、
それが法的に派生物とみなされようとみなされまいと制限されない。(このオ
ブジェクトコードに加えて『ライブラリ』の一部を含む実行形式は依然として
第 6 節の条件下に置かれるであろう)。
---

> コンパイルに必要なオブジェクトファイル配布しないとだめだな
>>842を見てオブジェクトファイルって言ってんのかもしれないけど、
ちゃんと読めば分かると思うけど、LGPLのライブラリを改変して別の
プログラムを含めた場合に、そのライブラリを再構築できるように
別のプログラムのオブジェクトファイルを配布しろって言ってんだよ。
呼び出し元アプリとは無関係な事だ。

とりあえず、英語読めないなら日本語訳もあるんだからちゃんと嫁。
0848名前は開発中のものです。2005/08/03(水) 23:14:18ID:8Vtt/S6U
VisualC++.netでSDL使ってる者ですが。
stdio.hをインクルードするだけでアプリケーション終了時に
メモリエラーが出てしまいます。
デバッグで見る_file.cの_lock_file関数で何らかのエラーが起きているようです。
どのようにすればうまくエラーがでないようにできるのか、ご教授お願いします。
0849名前は開発中のものです。2005/08/04(木) 19:18:29ID:m7E66Gbv
VisualC++.netは開発環境の名前なので、
それだけだと使っている言語仕様がわからない。

Microsoft Visual Studio .NET 2003 に含まれる VisualC++ を使っているなら
新しいプロジェクトを作成する時に .NETではなく Win32を選んで。
0850名前は開発中のものです。2005/08/04(木) 19:25:18ID:qa5JGYab
VS.NETならそうかもしれんがVC.NETならCだろ
08518492005/08/04(木) 20:42:21ID:m7E66Gbv
VisualC++.NETで.NETアプリケーション作成を選べば、
それはManagedC++という名のC言語とは似て非なる言語。
0852名前は開発中のものです。2005/08/04(木) 23:34:09ID:uV5RXPg8
なんだか知らんが必死だな
0853名前は開発中のものです。2005/08/05(金) 02:15:02ID:t5VdqNSD
拡張C言語程度で必死だな
0854名前は開発中のものです。2005/08/05(金) 10:31:53ID:XgtXEN47
で、848は解決したのか?
0855名前は開発中のものです。2005/08/10(水) 16:07:15ID:f3HjLb+x
微妙にFPSが60に固定できないんですけど
みんなはどう書いてますか


// ここで描画やらなにやら

int nowTime = SDL_GetTicks();
if( nowTime - preTime < 16 )
{
 SDL_Delay( 16 - (nowTime - preTime) );
}
preTime = SDL_GetTicks();


やっぱ浮動小数で管理しないと駄目かな
綺麗に60に固定したいんだけど
0856名前は開発中のものです。2005/08/10(水) 18:43:43ID:PLKvBSGz
固定少数で管理すればOK
0857名前は開発中のものです。2005/08/10(水) 19:50:28ID:f3HjLb+x
>>856
詳しく
0858名前は開発中のものです。2005/08/10(水) 20:59:46ID:zuYoOj0m
ティアリングしてるんだし浮動小数点でも固定小数点でもどっちでもいいよな
俺はもう癖で固定小数点つかっちまうが

高精度タイマ使えばそれなりに精度は出るがかなり環境依存しやすい模様
この辺の話はSDLとはもはや関係ないな
0859名前は開発中のものです。2005/08/10(水) 21:58:53ID:sHNa10sC
とりあえず、

while ( nowTime - preTime < 16 )
{
SDL_Delay( 0 );
}

のほうがいいよ
タイマの精度に期待出来ないことも多々あるんで、待ちすぎが起こりやすいから
0860名前は開発中のものです。2005/08/10(水) 23:12:02ID:EzSJcbzY
あー、なるほど、俺もフレームレートも固定少数使ってみよう
少しぐらい改善すっかな
08618552005/08/11(木) 11:06:48ID:s0SfDH7M
>>859
それnowTimeもpreTimeも更新されないんじゃ?

具体的なコードが見たいんですけど駄目ですか?>>ALL
0862名前は開発中のものです。2005/08/11(木) 13:55:51ID:7JeDKIu2
// ここで描画やらなにやら

while ( SDL_GetTicks() - preTime < 16 )
{
SDL_Delay( 0 );
}
preTime = SDL_GetTicks();

>>859じゃないけど、普通に考えればこうでしょう。
1から100まで全部与えられるのを待ってないで考えましょう。
0863名前は開発中のものです。2005/08/11(木) 16:16:47ID:u3UR2EZN
SDL_GetTicks() - preTime < 1000/60

これ、整数の除算のところで誤差が出るよね。
固定小数点で計算する方法って、32bitのうち小数側に16bit使うと決めたら

(60*(SDL_GetTicks() - preTime) << 16) < (1000 << 16)

みたいにすればいいのかな?
0864名前は開発中のものです。2005/08/11(木) 16:21:33ID:u3UR2EZN
あれ、これじゃシフトする意味ないじゃん。出直してこよう、、
0865名前は開発中のものです。2005/08/11(木) 16:29:32ID:u3UR2EZN
((SDL_GetTicks() - preTime) << 16) < (1000 << 16) / (60 << 16)

60が右辺にないと意味なかったね。Delphiで試してみたらFPSが59.9〜60.0くらいになったんで、
合っているのかな。
0866名前は開発中のものです。2005/08/11(木) 16:37:51ID:u3UR2EZN
いや合ってないや。ごめんもうやめるわ。
08678592005/08/11(木) 19:06:56ID:W/ukyUzH
うわ、適当に書いたんで思いっきりミスしてるな orz
>>862フォローthx!
0868名前は開発中のものです。2005/08/11(木) 19:21:03ID:Gg/tPqOJ
固定小数点でこんな感じでどう。

#define FRAMETIME 4271/* (1000ms/59.94frame)*256 */

ループ{
描画etc.

while ( SDL_GetTicks() < nextTime/256 )
{
SDL_Delay( 0 );
}
nextTime += FRAMETIME;
}
0869名前は開発中のものです。2005/08/11(木) 22:03:19ID:IbwMjIl9
一応オーバーフローも考えて欲しい。
08708552005/08/11(木) 23:36:45ID:s0SfDH7M
>>862
そりゃ考えましたよ。
それで適当に書いた>>867とか言われても困るんですけどね。

というか、みんなはどうやってるの?って聞いてるのに何でかなぁ。FPS固定やってないの?
そんなにコード晒すの嫌?別段他のモジュール参照してるわけじゃなし、部分的に抜粋してもらえればいいのに。
って偉そうですね。すみません。

出し惜しみ?自分の技術不足を指摘されるのが恥ずかしい?
あ、面倒なの。

オープンソース糞喰らえですね!みんなはなんでSDL使ってるの?
0871名前は開発中のものです。2005/08/12(金) 00:38:27ID:oL+JILND
気持ちは分かるけど、書き込む前に深呼吸しろな。
■ このスレッドは過去ログ倉庫に格納されています