[過去ログ] SDLスレ (987レス)
1-

このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
860: 名前は開発中のものです。 [sage] 2005/08/10(水) 23:12:02 ID:EzSJcbzY(1) AAS
あー、なるほど、俺もフレームレートも固定少数使ってみよう
少しぐらい改善すっかな
861: 855 [sage] 2005/08/11(木) 11:06:48 ID:s0SfDH7M(1/2) AAS
>>859
859(4): 名前は開発中のものです。 [sage] 2005/08/10(水) 21:58:53 ID:sHNa10sC(1) AAS
とりあえず、

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

のほうがいいよ
タイマの精度に期待出来ないことも多々あるんで、待ちすぎが起こりやすいから
それnowTimeもpreTimeも更新されないんじゃ?

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

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

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

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

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

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

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

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

ループ{
描画etc.

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

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

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

オープンソース糞喰らえですね!みんなはなんでSDL使ってるの?
871: 名前は開発中のものです。 [sage] 2005/08/12(金) 00:38:27 ID:oL+JILND(1) AAS
気持ちは分かるけど、書き込む前に深呼吸しろな。
872: 859 [sage] 2005/08/12(金) 04:23:14 ID:DYAIzoXI(1) AAS
あー、いい加減な書き方したのはスマンかったね
お詫びの意味も込めて、前作ったゲームのを調べてみた

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;
}

途中を色々はしょった時にミスが入ってる可能性はあるが、こんな感じだった
873
(1): 名前は開発中のものです。 [sage] 2005/08/12(金) 18:43:40 ID:KeDmnrCr(1) AAS
これでいいじゃない。
外部リンク[html]:www.sun-inet.or.jp

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; // ぴったりで描画が完了した仮定する。(端数を持ち込まないため)
}
874: 名前は開発中のものです。 [sage] 2005/08/12(金) 20:13:16 ID:rlG30S65(1) AAS
>>873
SDL_GetTicks()とSDL_Delay()に置き直して
875: 名前は開発中のものです。 [sage] 2005/08/14(日) 22:40:50 ID:O5bcwOke(1) AAS
SDL_inputmethodのソースコードはこれが最新ですか?
外部リンク[php]:sdlinputmethod.sourceforge.net
876
(1): 名前は開発中のものです。 [sage] 2005/08/19(金) 22:03:31 ID:nTcnwqoX(1) AAS
次スレ
2chスレ:tech
877: 名前は開発中のものです。 [sage] 2005/08/20(土) 01:38:13 ID:Uu3xgTeL(1) AAS
>>876 クマー
878: 名前は開発中のものです。 [sage] 2005/08/23(火) 01:30:58 ID:GcWYfYM0(1) AAS
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を無視したら、ものすごい怒られました・・・(´・ω・`)
879: 名前は開発中のものです。 [sage] 2005/08/23(火) 06:21:23 ID:W08ZteNn(1) AAS
本体がデバッグビルドとか?
880
(1): 名前は開発中のものです。 [sage] 2005/08/23(火) 09:28:07 ID:0d6CfNLS(1/2) AAS
作った。いらなきゃ消す。
全然いじってない。帰ってきたらいろいろ変える。
外部リンク:wiki.livedoor.jp
881: 名前は開発中のものです。 [sage] 2005/08/23(火) 10:59:53 ID:LxnRBaho(1) AAS
GJ!
882: 880 [sage] 2005/08/23(火) 17:14:36 ID:0d6CfNLS(2/2) AAS
881がGJをくれたのでちょっといじった。

livedoorWikiは使いづらいぞw。ちょい機能がたりないように感じる。
もうちょっとやってみるわ。
883: 名前は開発中のものです。 [sage] 2005/08/23(火) 20:10:29 ID:d61Nt7TU(1) AAS
ユーザー登録しなきゃ編集できないなんて冗談みたいな仕様だな。
884: 名前は開発中のものです。 [sage] 2005/08/23(火) 21:09:14 ID:DXl7coHI(1/3) AAS
うん、やめようか。
別のどっかいいところある?俺サーバーとかよくわかんないんだけど
1-
あと 103 レスあります
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル

ぬこの手 ぬこTOP 0.017s