0

私は現在、OpenFL を使用してインタラクティブなストーリーを開発しており、現在、C++ 出力用にエンジンを最適化するプロセスを進めています。これが私の焦点であるためです。Githubのマスター ブランチには、機能する Flash ターゲットが機能していますが、これはアンカー リンクを使用してさまざまなパッセージへのリンク内のハイパーリンクを識別し、Haxe コードを使用して HScript を使用して解析します。

C++ ターゲットではハイパーリンクが機能しないことがわかっているので、「getCharIndexAtPoint()」関数を使用して htmlText フィールド内のリンクの場所を特定する方法を調べました。どの HTML テキストが C++ で何をサポートしているかはわかりませんが、タグがまったくサポートされていない場合は、独自のパーサーを作成することもできます。

これは、インタラクティブなストーリーで従来のリンク形式を使用してリンクを解析するための現在のコードです。

private function parseLink(s:String):String
{
    _parsedLinks.splice(0, _parsedLinks.length);
    var pos:Int = 0;
    var content = s;
    while (pos < content.length) 
    {
        if (!(content.indexOf("[") > -1 && content.indexOf("]") > -1)) break;
        pos = content.indexOf("[");
        var subs = content.substring(pos + 1, content.indexOf("]"));
        if (subs.indexOf("|") > -1)
        {
            var link = subs.split("|");
            var parsedLink:ParsedLink = new ParsedLink();
            parsedLink.code = link[1];
            parsedLink.startIndex = s.indexOf(link[0]);
            parsedLink.endIndex = s.indexOf(link[0].charAt(link[0].length));
            trace("Link text: " + link[0] + "\n" + "Link code: " + link[1]);
            _parsedLinks.push(parsedLink);
            content = content.substr(parsedLink.endIndex + 1);
            trace("Content: " + content);
            s = StringTools.replace(s, parsedLink.code, "");
        }
    }

    s = StringTools.replace(s, "[", "");
    s = StringTools.replace(s, "]", "");
    s = StringTools.replace(s, "|", "");

    return s;
}

private function onLinkClicked(e:MouseEvent):Void
{
    var idx:Int = e.currentTarget.getCharIndexAtPoint(e.localX, e.localY);
    for (i in 0..._parsedLinks.length)
    {
        if (idx >= _parsedLinks[i].startIndex && idx < _parsedLinks[i].endIndex)
        {
            runCode(_parsedLinks[i].code);
            break;
        }
    }
}

少なくとも、それが一般的な考え方です。残念ながら、指定されたコードの結果は次の出力になります。これを解決する方法について何か考えはありますか?

4

1 に答える 1

0

最初の角括弧を見つけるために「indexOf」を使用しているように見えますが、テキストに角括弧を残しています。最後に、角かっこを置き換えますが、while ループはおそらく最初に同じ角かっこを取得し続けるのでしょうか?

テキストを読み進めるには、少なくとも前の「pos」値で「indexOf」を使用する必要があると思います。また、二重角括弧 ([[)、二重コロン、またはそれ自体ではテキストに表示される可能性が低いものを使用することを検討することもできます:)

于 2014-10-11T17:15:16.667 に答える