0

Web サイトに直接埋め込まれた HTML5 と JavaScript を使用して、Web RPG を作成しています。ゲームはコンピュータの対戦相手に対するシングル プレイヤー ゲームになります... デザインはトップダウン 2D のゼルダ スタイルになります。リアルタイムですが、コンピュータ プレイヤーとの会話はスクリプト化されます... 彼らが何か言うと、いくつかの応答オプションが与えられます。

ダイアログは XML で書こうと思っていたのですが、JavaScript の方が解析しやすいので JSON の方がいいと言われました。

XMLでAbstract Chaosの回答を見ました...

<?xml version="1.0" encoding="UTF-8"?>
    <npcs>
      <npc name="Abstract">
        <dialogue>
          <text>Welcome #{PlayerName} to Stack Exchange, What would you like to know? </text>
          <options>
            <option action="dialogue5">Tell me about Stack Exchange?</option>
            <option action="quest1">Give me quest</option>
            <option action="object1">Give me object</option>
          </options>
        </dialogue>
        <dialogue id="5">
          <text>Stack Exchange is a fast-growing network of 87 question and answer sites on diverse topics</text>
          <text>We build libraries of high-quality questions and answers, focused on the most important topics in each area of expertise</text>
        </dialogue>
      </npc>
    </npcs>

そして、JSONで同じ種類のレイアウトをどのように実現できるか疑問に思っていました...

私の質問は次のとおりです。

  • JSON で RPG ダイアログ スクリプトをレイアウトして JavaScript で解析するにはどうすればよいですか?
  • JavaScript ロジックを使用して、特定の条件で JSON を解析する方法の例を教えてください (例: NPC が「助けてくれませんか?」という質問をする場合、JSON には「はい」と「いいえ」のオプションが必要です。プレイヤーが実際にそのスキルセットを持っている場合)。
  • JSON ダイアログ テキストは、プロジェクト フォルダー内の別の「dialog」フォルダーに保存されるため、外部からアクセスする必要があります。

JSONをレイアウトして解析する方法について私が見つけた唯一のものは次のとおりです。

        var json = '{"result":true,"count":1}',
            obj = JSON && JSON.parse(json) || $.parseJSON(json);

        alert(obj.result);

しかし、XML に見られるようなきちんとした要素はありません。

どんな助けでも大歓迎です...

ありがとう!


外部の JSON テキスト ファイルを読み込んで警告しようとしても機能しません。

HTML:

<html>
    <head>
        <title>Working with JSON</title>
        <script src="jquery.js"></script>
        <script>
            (function() {

            var data = "/JSON_TEXT.txt";    

            var first_q = data.npcs[0].dialogs[0];
            alert(first_q.text);

            }());
        </script>

    </head>
    <body>
    </body>
</html>

JSON プレーン テキスト ファイル: JSON_TEXT.txt

'npcs': [
            {
                'name': 'Abstract',
                'dialogs': [
                    {
                        'text': 'Welcome',
                        'options': [
                            'df', 'f'
                        ]
                    }
                ]
            }
        ]
4

2 に答える 2

1

JSON は XML よりも読みにくいと感じる人もいます。特にJSで解析したい場合は、はるかにクリーンで使いやすいと思います。

とはいえ、あなたの質問が何なのかよくわかりません。既に XML 形式のデータがあるので、それを JSON に変換してください。[]リストには配列 ( ) を{}、名前付きキーが必要な場合にはオブジェクト ( ) を使用できます。

{
    'npcs': [
        {
            'name': 'Abstract',
            'dialogs': [
                {
                    'text': 'Welcome #{PlayerName} to Stack Exchange, What would you like to know?',
                    'options': [
                        //options here
                    ]
                },
                //next dialog object here
            ]
        },
        //next npc object here
    ]
}

したがって、あなたが言ったように、最初に JSON 文字列を解析する必要があります。

var json; //contains the json string, perhaps retrieved from a URL via AJAX
data = JSON && JSON.parse(json) || $.parseJSON(json);

最初に JSON オブジェクトを JS 変数に割り当てることもできます (たとえば、.jsどこかのファイル内)。解析する必要はまったくありません。グローバルスコープを汚染しないようにしてください。

解析後data、通常の JS オブジェクトです。他のオブジェクトと同じように、そのプロパティにアクセスできます。したがって、最初の NPC から最初の質問にアクセスするには、次のようにします。

var first_question = data.npcs[0].dialogs[0];

質問自体に警告しましょう:

alert(first_question.text);

次のようにそのオプションにアクセスできます。

first_question.options;

外部ファイルから JSON データをロードする方法について質問されました。通常のアプローチは、AJAX 経由でファイルの URL をロードすることです。バニラ JavaScript で AJAX リクエストを作成するための優れたチュートリアルは次のとおりです: https://developer.mozilla.org/en-US/docs/AJAX/Getting_Started

しかし、普通の JavaScript で AJAX リクエストを手作業でコーディングする理由はあまりありません。jQueryのようなライブラリを使用することをお勧めします。これには、便利な AJAX 関数.ajax(省略形の function など) があります.get。を使用した例を次に示し.getます。

var data;                          //will hold the parsed JSON object
var json_url = 'json.txt';         //URL of your JSON (just a plain text file)
$.get(json_url, function(json) {
    data = JSON && JSON.parse(json) || $.parseJSON(json);
});

//use data here
于 2013-07-31T16:34:22.023 に答える