私は現在、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;
}
}
}
少なくとも、それが一般的な考え方です。残念ながら、指定されたコードの結果は次の出力になります。これを解決する方法について何か考えはありますか?