« Rogue | Main | MacWorld Expo Tokyo »

Rogue


どうもrogueの動作が遅い。自動移動などで、時々いらつく程度に遅い。これではPPCネイティブ化した意味がない。実際68k版と動作速度が変わらない気がする。PPCProfかましてみたら、かなりの部分DrawTextに食われている。API呼び出しがCPUタイムのほとんどをくっているわけで、これでは68k版(エミュレーション)との差も出ないはずだ。つまりこちらの責任ではなく、MacOSのAPIが遅いのだ。と言いたい所だが、アンチエイリアステキストの描画なんて、どうやったって遅いのは当たり前。無駄にDrawTextを呼ばないようにするべきなわけで、MacCursesのコードを調べると、wrefreshの度に全画面描きなおしてる。まあ動作として間違ってはいないが、無駄だ。特にrogueだけに使うなら、あまりいろんな状況を考えなくても良いので、表示行数分の真偽値フラグ配列を用意し、文字追加などのたびに「この行はアップデートが必要だよ」という印をつけ、wrefreshの時には、その印がついてる行だけ描画するようにする。
真に無駄を省くなら、文字単位でダーティかどうか判断し、最小限の描画で済ませるという方法も考えられるが、DrawTextは小数点幅の文字を制御するため、一文字ずつ描画する場合と、一行描画する場合で幅が若干異なってしまう。行単位のフラグで十分速くなったので、これでよしとするか。
というか、すでにちと速すぎる。これでは移動途中を表示しない設定とあまり変わらない。移動中のキャラクターがジャンプ移動しているように飛び飛びに見える事を考えると、どうやらモニターのリフレッシュレート以上の速度で画面を描き換えているようだ。うちはPowerMac 7600にG3/266を挿しているが、おそらく今どきのマシンはCPUクロックのみならず、バススピードもビデオカードも高速化しているから、どれもこれの倍速いだろう。そうなると、移動途中の表示を切った状態と変わらない事になる。一般的なモニターとビデオカードの組み合わせなら、どれでも60Hz以上のリフレッシュレートだから、60fpsにしておけば、移動中のキャラクターは完全に表示されるはずだ。前回表示してから1/60程度経たないうちは次の描画を行わないようにした方がいいような気がする。60fpsだと、横一杯移動するのに約1.3秒かかる計算になるか、うーん、悩ましい。ま、いいか。ウエイト入れとこう。ここに置いておくので、Macユーザーでrogueやりたいひとはもって行って下さい。

|

« Rogue | Main | MacWorld Expo Tokyo »

「ゲーム」カテゴリの記事

「パソコン・インターネット」カテゴリの記事

Comments

Post a comment



(Not displayed with comment.)




TrackBack

TrackBack URL for this entry:
http://app.cocolog-nifty.com/t/trackback/10254/53228

Listed below are links to weblogs that reference Rogue:

» The Blog [The Blog]
Provides extranet privacy to clients making a range of tests and surveys available to their [url=http://olasep.info/Ml84Mzc1NTc=]human[/url] resources departments. [Read More]

Tracked on 2007.06.01 at 08:34 PM

« Rogue | Main | MacWorld Expo Tokyo »