トップページ > 過去ログ > 記事閲覧
高速化について
名前:meigin 日時: 2008/10/02 14:02

毎度お世話になっています。 文字を表示する処理なのですが。 すごく遅くなってしまうので、 何かいい方法はないかと考えているのですが 思いつきませんでした。 仕様 ・文字は一文字づつ表示 ・\の文字を見つけると特殊処理をする ・\| 数秒待ち ・\! クリック待ち ・\c[?] カラーの変更 一文字毎にチェックが入るので、 処理が遅くなるのはわかりますが、 演出を変えずに処理を早くしたいと思うのです。 文章が長くなれば長くなるほど、 遅くなるのです。 三行に制限したものの、 遅くなるので困っています。 何かいい方法はないでしょうか?

Page: 1 |

Re: 高速化について ( No.1 )
名前:GPGA 日時:2008/10/02 15:29

一文字毎にチェックするのを、その文字を表示するときにやるのではなく 文字列全体を読み込んだ時に処理をしてしまうことと、文字をあらかじめテクスチャーに 描き込んでおき、表示時にはそのテクスチャーを表示することで、かなり処理速度を稼げます。 文字列全体を読み込んで処理をするというのは、文字データ構造体を作って 一文字単位でその構造体に入れてしまうということです。 struct CharaData { char str[3]; // 全角+ナル文字分の領域 int xpos; // 文字の表示X座標 int ypos; // 文字の表示Y座標 int width; // 文字の幅 int color; // 文字の色 int waitTime; // 待つ時間 bool click; // クリック待ちの有無 }; 上記のような構造体を作成し、読み込み時に上記の構造体に一文字ずついれてやることで 表示時には、構造体情報を元に処理するだけとなるため、かなり軽くなります。 テクスチャーに関しては、DXライブラリのAPI仕様を見る限り、文字を別のテクスチャーに書き込んで それを表示するというのは、透過の関係上、厳しいですね。(非公開APIに便利なものがあるかもしれませんが) 作成しようとしているゲームはADVだと思うのですが もし私が、DXライブラリでADVを作るのであれば、文字表示はDXライブラリの文字表示関数を使用せず 予め、文字の画像を作ってしまい、起動時にその画像を読みこんで使用します。 SJISの第一水準と第二水準の文字を、一文字あたり20x20くらいのサイズで用意した場合でも 消費メモリは2〜3M程度ですので、メモリを心配することもありません。
Re: 高速化について ( No.2 )
名前: 日時:2008/10/02 15:39

単純に1字ずつチェックしても、 やりかた次第ではそれほど遅くはならない かと思いますが、まずはどこがボトルネックに なっているのかそこを探すのが先決でしょう。 今の実際の処理はどうなっているのでしょうか?
Re: 高速化について ( No.3 )
名前:meigin 日時:2008/10/02 17:27

GPGAさん 毎回、解析するより速くなりそうですね。 テスクチャーとかよく解らないです。 RPGです、メッセージ枠一杯になると、 上のを消して、追加していくタイプにしています。 メッセージは、読める速さで表示しています。 メッセージを表示しきるまでに行動する事もできるような仕組みになっていて、見なくても進められるようにしています。 どんどん表示する予定のものが追加されていくという感じです。 必要なくなったものは排除していくとい感じです。 通さん 実際の処理はrubyで書いてます。 あまりに遅いので、c++で書きなおそうと思いまして。 アルゴリズムが同じなら、大した差は出ないと思って 質問した次第です。 元々は、ツクールXPのソースを参考に書いていたのですが、更新すると文字が消えてしまうので、 毎回チェックして表示するようにしたんです。 文字が増えるほど遅くなるのは当然ですね。 ありがとうございます。 先に解析を済ませれば、 速くなりそうです。
Re: 高速化について ( No.4 )
名前:GPGA 日時:2008/10/03 11:09

>テスクチャーとかよく解らないです。 ゲーム内で使用する画像と同意語と思ってもらえればいいです。
Re: 高速化について ( No.5 )
名前:meigin 日時:2008/10/05 11:31

ありがとうございます 何とか、処理が速くなりました。 テスクチャーの使い方とか書いてないので、 解らないんですよ。 DXライブラリを使うのは、画像の事をあまり意志せずに使えるからです。

Page: 1 |