Алгоритм запуска методов, определенных в XML - PullRequest
0 голосов
/ 11 июля 2011

Я новичок в Java.

У меня в игре LevelLogic реализован таймер.

В своей игре я проверяю, на какой секунде уровня мы находимся, а затем вызываю врагов и делаю больше вещей

switch(pSecond){
case 1:
    xDestroyer.ClearPaths();
    xDestroyer.AddPathPredefined(1);
    xDestroyer.AddPathPredefined(2);
    xDestroyer.AddPathPredefined(3);
    xDestroyer.AddPathPredefined(4);
    xDestroyer.AddPathPredefined(5);
    xDestroyer.EnemyStart(14f, 5, 5, 0.0001f); 
    xShuttle0.EnemyStartByPath(1,5f,8,2,0.2f);
    xShuttle0.EnemyStartByPath(5,5f,8,2,0.2f); 
    break;
case 17:
    xShuttle0.EnemyStartByPath(1, 4f, 8, 2, 0.3f); 
    xShuttle1.EnemyStartByPath(5, 4f, 8, 2, 0.3f);
    break;
}

и так далее.Я хотел бы знать, как я могу перенести эту логику в файл XML.Каков наилучший способ сделать это?

Ответы [ 2 ]

1 голос
/ 11 июля 2011

Вы можете сделать что-то вроде этого:

<trigger time="1">
    <action target="xDestroyer" verb="ClearPaths"/>
    <action target="xDestroyer" verb="AddPathPredefined">
        <arg>1</arg> <!-- default type is "int" -->
    </action>
    <!-- etc. -->
    <action target="xDestroyer" verb="EnemyStart">
        <arg type="float">14</arg>
        <arg>5</arg>
        <arg>5</arg>
        <arg type="float">0.0001f</arg>
    </action>
    <action target="xShuttle0" verb="EnemyStartByPath">
        <arg>1</arg>
        <arg type="float">5</arg>
        <arg>8</arg>
        <arg>2</arg>
        <arg type="float">0.2</arg>
    </action>
    <!-- etc. -->
</trigger>
<trigger time="17">
    <!-- ... -->
</trigger>

Затем эти действия можно применить к целям с помощью отражения.

Альтернативой может быть предварительное определение библиотеки целейи глаголы и ссылки на них в XML по ключевому слову или индексу.Полезный прием здесь - определить тип объекта для каждого действия (имя метода).Затем вы можете поместить их в массив или хеш-таблицу и ссылаться на них по ключевому слову или индексу из XML.Они могут быть реализованы примерно так:

interface Action {
    void apply(String targetName, String... args);
}

class ClearPathsAction implements Action {
    void apply(String targetName, String... args) {
        Destroyer destroyer = findDestroyer(targetName);
        destroyer.ClearPaths(); // args ignored
    }
}

class AddPathPredefinedAction implements Action {
    void apply(String targetName, String... args) {
        Destroyer destroyer = findDestroyer(targetName);
        int index = Integer.parseInt(args[0]);
        destroyer.AddPathPredefined(index);
    }
}

// etc.

Вы, очевидно, захотите провести некоторую проверку и обработку ошибок в какой-то момент этого процесса.:)

0 голосов
/ 11 июля 2011

Вы на самом деле не очень много рассказываете о своей мотивации или о том, где вы видите проблемы.Так что я многое здесь угадываю.

Я вижу три отдельные области, где вы можете задать вопрос:

  1. Фактический технический материал о чтении XML в Java.
  2. Как представить индивидуальную информацию, касающуюся одного артефакта, такого как Разрушитель, Шаттл0, Шаттл1 и т. Д.
  3. Как представить общий алгоритмический материал, сколько секунд, диапазоны действий для каждой секунды.

Во-первых, существует много хороших библиотек Java для чтения XML, из-за истории и сред, в которых я работаю, я использую JAX / B, но есть много альтернатив.

Для второго элемента вам нужно решить, какой тип объекта вы получаете из XML для представления какого-либо действия.Ваш код выглядит так, как будто объекты xDestroyer и xShuttle уже существуют (я назову эти игровые объекты), и в определенные моменты вы выполняете их с до .Если это так, то я думаю, что вы получаете какие-то объекты «событий» из XML и применяете их к соответствующему игровому объекту.

Поэтому я бы поработал сверху вниз, сначала определив набор возможныхВиды событий, а затем генерирование XML представляют набор событий.Таким образом, DestroyerEvent может иметь массив предопределенных путей и определение Enemy.

Теперь вам просто нужно представить группы событий, которые соответствуют определенной секунде, вашему файлу XMl (или, возможно, нескольким файлам, по одному в секунду).?) содержит набор событий XML.

Резюме: подумайте о классах объектов, которые вы хотите прочитать из XML, оставьте детали XML в одной стороне.Есть хорошие инструменты для генерации XML, если вы правильно поняли модель класса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...