2

学習目的で Windows 用のゲームを開発しています (DirectX を学習しています)。UTF対応にしてほしいです。

この質問を読んwchar_tで、windowsが UTF-16 を使用していることを知りました。ゲームで Lua スクリプトをサポートしたいのですが、Lua は Unicode があまり好きではありません。単に文字列を「バイトのストリーム」として扱います。これは UTF-8 では十分に機能しますが、UTF-16 を使用することは事実上不可能です。

簡単に言うと、windows は UTF-16 を必要とし、lua は UTF-8 を必要とします。

char*だから私は思った、UTF-8を通常と一緒に使いましょうstring.length()めちゃくちゃになりますが、誰が気にしますか?ただし、機能しません:

const char test_utf8[] = { 111, 108, 0xc3, 0xa9, 0 }; // UTF-8 for olè
mFont->DrawTextA(0, test_utf8, -1, &R, DT_NOCLIP, BLACK);
    /* DrawText is a Direct3d function to, well, draw text.
     * It's like MessageBox: it is a define to either DrawTextA
     * or DrawTextW, depending if unicode is defined or not. Here
     * we will use DrawTextA, since we are passing a normal char*. */

これは印刷されoléます。つまり、UTF-8 ではなくISO-8859-1を使用しているように見えます。

それで、なにかお手伝いできますか?次のことが考えられます。

  1. UTF の概念を放棄します。ISO-8859-1 を使用して満足してください (これは World of Warcraft が行うことです。少なくとも enUS バージョンではそうです)。
  2. すべての単一フレームですべての単一文字列を UTF-8 から UTF-16 に変換します (ただし、各文字列に対して 1 秒間に 60 回以上実行され、O(N) であることを考えると、パフォーマンスの問題が心配です)確かにかなり遅くなります)
  3. lua 文字列ごとに UTF-16 のコピーを保持します。大量のメモリの浪費、実装が非常に困難 (Lua で変更されたときに UTF-16 文字列を最新の状態に保つなど)
4

4 に答える 4

5

8859-1 も使用せず、システムのローカル コード ページを使用します。文字列を自分で変換することで、UTF16 に変換して DrawText() を使用できます。クラス ライブラリにサポートがない場合は、MultiByteToWideChar()を使用できます。

于 2010-02-26T22:15:19.687 に答える
2

lua に UTF-16 への変換をキャッシュさせることができます

utf16 = setmetatable ( {} , { __index = function ( t , k , v )
        local utf16str = my_conversion_func_to_utf16 ( v )
        rawset ( t , k , utf16str )
        return utf16str
    end } )

次に、すべての関数にutf16文字列タイプのみを使用させます(これは、lua文字列またはある種のユーザーデータ(wchar_t配列である可能性があります)である可能性があります)

わからないことがあれば、もっとサポートします...

于 2010-02-27T04:37:53.133 に答える
2

WoW が DirectX テキスト描画メソッドを使用していないことには驚かないでしょう。独自のカスタム テキスト描画ソリューションを使用すると、エンコーディングのサポートがより柔軟になります。さほど難しくありません。

于 2010-02-26T22:56:29.913 に答える
1

한êµì–´/ì¡°ì„ ë§. StarCraft では Unicode が適切にサポートされていないため、これは常に見られます。

がんばれ!UTF-8 を使用します。すべてのフレームで UTF-16 に変換します (私が見るのが面倒なドキュメントに記載されているより良い方法がない限り)。問題が発生するまで、ここでのパフォーマンスについて心配する必要はありません。

于 2010-02-26T22:16:09.217 に答える