• ベストアンサー

DirectXでの変数の表示について

デバッグ用に変数を表示できるようにしたいんですが、float型をchar*の文字列に変換できるようにするにはどうしたらいいですかね? Javaのようにstringオブジェクトに用意されているんでしょうか? どうかご教授お願いします。 あと実際、DirectXでデバッグ用に変数を表示する場合の一般的にどのような方法をとられているのでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
  • aho0xff
  • ベストアンサー率12% (218/1772)
回答No.3

お礼ありがとうございます。再度No.2です。 「速度」ですか・・・そうですねぇ・・個人的にはデバック用に用意したコードに そこまで速度を求めてどうするのか?とも思ったりしますが、私個人の指針を とりあえずあげてみます。 まずたとえデバックコードだろうが絶対速度が欲しい!!というのなら、ビデオメモリに 必要となる文字をあらかじめ描画しておき、表示するときはそれを使用して表示する 方法があります。基本的には半角の a~z A~Z 0~9 と一部の記号があればデバック用なら 事足りるハズです。準備する方法が分からないなら、あらかじめ画像を用意するのが早いです。 問題があるとすれば、用意した分の文字しか使えない点でしょうか? デバック用に使用する文字コードを任意の転送元座標に変換するのは半角文字だけなら 変換テーブルを作成すれば割とすんなりいくかと思います。 後は文字列を描画する方法ですが、文字に限らず、各サーフェス(テクスチャ?)に対して GDIで描画する必要がある場合、一回の描画ループで何回もGDI関数を使用しない方向に 持っていくのがキモです。つまり、D3DXFont を使用する場合、いくらデバック用だからって 何回も DrawText() メソッドを使用したら、そりゃその分だけ速度が落ちていきます。 あらかじめデバック用の表示文字列を、文字列バッファとして保持しておいて、 画面に転送する直前にDrawText()一回で全デバック文字を描画してしまうのが、 速度的にも負担は最小で済むはずです。 あくまで私個人の・・・ではありますが、2通り概念だけ説明してみました。 コレを鵜呑みにするもしないも、実際どう作るのかどうかも後は貴方次第 ということでいかがでしょうか?

mrkmrk
質問者

お礼

2度もご回答感謝します。確かに考えてみれば、速度はそこまで必要ありませんよね。 提案された方法ですが、非常に参考になりました。 今回は手っ取り早くD3DXFontでやってみます。 ありがとうございました。

その他の回答 (2)

  • aho0xff
  • ベストアンサー率12% (218/1772)
回答No.2

float型を文字列にするにはNo1番さんの回答でいいと思います。 後は描画方法ですが、いくつかあります。参考URLをどうぞ 個人的なオススメは D3DXFont を利用することです。 sprintfで表示する文字列を作成したのちに、D3DXFontで表示する。 あくまでデバック用途なら、おそらくコレが一番手っ取り早いです。

参考URL:
http://www.c3.club.kyutech.ac.jp/~sukiyaki/index.php?%CA%B8%BB%FA%CE%F3%C9%C1%B2%E8
mrkmrk
質問者

お礼

ご回答感謝いたします。そのサイトを見て作成していたのですが、実行速度が遅くデバック向きではないのかと思い、質問させていただきました。言葉足らずで申し訳ございません。

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.1

sprintf で文字列として確保したメモリに書き出せば良いと思います。 C++だったら、std::string がありますが、Cにはありません。

mrkmrk
質問者

お礼

ありがとうございます。おかげでできました。 C++には標準ライブラリ用意されているのですね。

関連するQ&A

  • LPCWSTRへの型変換について

    C++のDirectxでデバッグをするのにD3DXCreateFontを使って変数を表示したいのですが、FLOATからLPCWSTRに型変換する方法がわかりません。 どうすればよいでしょうか?

  • 動的な変数名のつけ方について

    ■環境 OS:XP 言語:C++ コンパイラ:Visual C++ 2008 char*やstd::string等で格納された文字列を使用して 変数を宣言することは可能でしょうか。 用途として、テキストファイル等から文字列を取得し その文字列を変数名としてプログラミング内で使用するという方法を考えています。 よろしくお願い致します。

  • 参照型変数の比較について

    1,2のソースについての質問となります。 ご教授の程お願い致します。 ◇◆1◆◇ class Sample{ public static void main(String args[]){ String s1 = "Hello"; String s2 = "Hello"; String s3 = new String("Hello"); System.out.println(s1 == "Hello"); //(1) } } ◇◆2◆◇ class Sample{ public static void main(String args[]){ String s1 = "Hello!Java"; String s2 = s1; s1 = s1.substring(6); //(2) System.out.println(s1); //(3) System.out.println(s2); //(4) } } ○1の質問 (1)の部分になりますが、 「s1 == "Hello"」の結果がtrueとなる理由が理解しずらいです。 「==」演算子では、「同じオブジェクトを参照しているか」を 比較するものであって、この場合「オブジェクトと文字列」の比較を しているので、falseになると思われます。 仮に、Helloがオブジェクトとして捉えられている場合であっても 「String s3 = new String("Hello");」で作成されたオブジェクトを 参照しているものとなるので、s1と比較をしてもfalseになると 思われます。 ○2の質問 このソースを実行後、 Java Hello!Java と、出力される理由についての質問となります。 (2)で「Java」の文字列を返し、s1に代入されますが、 s2はs1の参照型であるため、「Hello!Java」から「Java」に 変わると思われます。実際には、 Java Java と、出力されると思われます。 以上、わかりにくい箇所があると思われますが、 ご教授の程お願い致します。

    • ベストアンサー
    • Java
  • javaのchar型とstring型の使い分け

    javaでchar型とstring型はどう使い分けられているのでしょうか? 一見、1文字しか入れられないcharよりstringのほうが汎用性高いので、 文字を代入する変数はすべてcharを使わずstringだけで定義しても いいような気がしました。 よろしくお願いします

    • ベストアンサー
    • Java
  • 変数の使用方法

    ファイルを読み込み、 任意の文字列だけを変数にするプログラムを記述したのですが、 sscanfでその文字列を各変数に代入し、 if((fd = popen("smbmount cause /mnt/date -o username=user","r")) != NULL){ の行で展開させようとしたのですが、 確認したところ、取得した値が代入していませんでした。 printf("%s\n", cause);の場合は、実行後、画面に表示するのですが、 変数型に問題があるのでしょうか。 すみませんが、何が問題なのかご教授よろしくお願いいたします。 FILE *fp; FILE *fd; char string[MAX_LEN]; char cause[256],point[256],user[256],passwd[256]; char id[256]; while ((fgets(string, MAX_LEN, fp)) != NULL) {  string[strlen(string) - 1] = '\0'; if(sscanf(string, "connect cause = %s", &cause) == 1){  }else if(sscanf(string, "connect point = %s", &point) == 1){  }else if(sscanf(string, "username = %s", &user) == 1){    if((fd = popen("smbmount cause /mnt/date -o username=user","r")) != NULL){    }    pclose(fd);   } } fclose(fp);

  • テキストボックスに変数を表示させたい

    access2003です。 フォーム1にテキスト0を配置し vbaで Private Sub Form_Open(Cancel As Integer) Dim 文字列 As String 文字列 = "a" End Sub と作成しました。 このときフォーム1をダブルクリックして開いた時に テキスト0に文字列に代入した変数を表示させるにはどうすればいいのでしょうか? テキスト0のコントロールソースに =[文字列] とやっても #Name? になってしまいます。 どうすれば読み取った変数をテキスト0に表示させることが可能なのでしょうか? よろしくお願い致します。

  • JAVA変数に関して

    JAVAの勉強を始めたばかりです。変数に関して基本型と参照型とあるようですが、基本型から参照型へ変換する方法を教えてください。 たとえば int型からString型への変換 または double型からString型への変換方法を教えてください。

    • ベストアンサー
    • Java
  • Drawstringで変数内の文字を表示する方法について

    Drawstringで変数内の文字を表示する方法について c言語初心者です。 ウィンドウに文字を表示するDrawstringという命令で変数内の文字を表示したいです。 たとえば、 char *a="a" DrawString(0,0,a,65535); でコンパイルすると、 宣言の構文エラー というエラーが出ます。 改善点がどうしてもわかりません。 ご指摘お願いします。 あと、c言語では変数に文字を一文字ずつしか入れられないので、文字列を変数に保存して表示したい場合にはforなどでループして表示するしかないんでしょうか? 合わせてお願いします。

  • バイナリファイル中の日本語文字列の取り出し

    C++にて,バイナリファイル中から日本語の文字列を取り出す処理に苦心しています. 具体的にはPDFファイルのXMPの記述部のXMLに日本語が含まれる場合なのですが,日本語(この場合はUTF-8ですね)の部分が含まれる部分をfread()で読み出してchar[]型の配列に入れて,printfで表示する(漢字コードの変換処理はとりあえずnkf等でUTF-8→SJISに変換)と文字化けします. Javaで同じような処理をしたときは,String の変数にUTF-8で日本語の文字列が挿入され,その文字列を扱うことができたのですが,C++での扱いがわかりません. ご教授よろしくおねがいします.

  • 変数タイプについて

    ABでプログラムを書いています。 その中で、疑問に思ったのですが、 LongとかDWordなど、たくさんの変数が用意されていますが、 使い分けが分かりません。 たとえば、『小数点を扱うならば、Doubleを使う』と言う程度なら分かるのですが、 前に質問させていただいた、EditBoxの内容を取得する時に使う変数は、 BytePtrを使っていました。 文字列を取得するのに、なんで”String”型を使わないのでしょうか? また、Doubleと、DoublePtrなどの、『Ptr』が有るものと無いものとでは、何が違うのでしょうか? 分かるかた、ご教授くださいです...

専門家に質問してみよう