Создание игры на плитке, как загрузить данные уровня извне - PullRequest
1 голос
/ 14 июня 2011

Я строю базовую игру с тайлами, содержащую 3 слоя «плиток»

  • Сама плитка
  • Объекты
  • Детали

image Игра имеет размер 3x3, мой массив данных выглядит так:

    public var tiles_Array:Array = 
    [   [1, 1, 1,],
        [1, 2, 1,], 
        [1, 1, 1,], 
    ];

    public var objects_Array:Array = 
    [   [1, 3, 1,],
        [5, 4, 1,], 
        [1, 7, 1,], 
    ];

    public var items_Array:Array = 
    [   [1, 1, 1,],
        [1, 1, 8,], 
        [5, 1, 1,], 
    ];

У меня есть 2 вопроса:

  • Как я могу загрузить эти данные из внешнего файла, который легко редактировать для указателей уровней? (а что лучше всего использовать, xml, json, ...?)
  • Не лучше ли просто использовать 1 файл данных вместо 3 и каков наилучший способ сделать это?

Ответы [ 3 ]

2 голосов
/ 14 июня 2011

вот мое мнение.

Каждое действие при загрузке файла манипулирует строкой (набор символов), поэтому использование чистой строки лучше, чем любой другой формат.Для XML Actionscript имеет встроенную функцию для анализа строк чтения в типизированную XML-переменную.Библиотека для анализа формата JSON из строки также доступна где-то в Интернете.Но оба они требуют дополнительных ресурсов.

Для вашего случая я предлагаю решение, подобное приведенному ниже:

_ В файле конфигурации хранится строка, подобная этой:

1,1,1,1,2,1,1,1,1
1,3,1,5,4,1,1,7,1
1,1,1,1,1,8,5,1,1

_В вашем приложении вам нужно выполнить два шага для разбора файла конфигурации: + Разобрать файл на набор уровней, разделив данные файла с символами разрыва строки

var levels:Array = fileData.split("\n");
  • снова разделить каждый уровень, чтобы получитьфактический массив

    var level1: Array = уровней [0] .split (",");

Надеюсь, что эта помощь.

1 голос
/ 14 июня 2011

1) Я думаю, что лучше использовать формат CSV (Comma Separated Values) для указания 2d массива.Например, tiles_array.csv файл с указанием tiles_Array будет выглядеть примерно так:

1,2,1
1,2,1
1,1,1

2) ИМХО, дизайнерам уровней будет удобнее иметь 3 отдельных файла

0 голосов
/ 14 июня 2011

Для данных уровня может работать любой из перечисленных форматов файлов.Я часто использую XML, но это в основном потому, что во Flash есть встроенные команды для обработки XML, поэтому анализировать его немного удобнее.JSON также отлично работает через свободно доступные библиотеки, или вы можете просто свернуть свой собственный формат файла и проанализировать его, используя простые строковые команды.В конце концов, это на самом деле не имеет значения, если выбранный вами формат файла достаточно гибок, чтобы приспособиться к неизбежным будущим расширениям (например, вы добавили новые типы объектов в вашу игру).

Это почтиВсегда лучше хранить отдельные данные в виде отдельных файлов, потому что это дает вам гораздо больше гибкости в управлении файлами.Единственное исключение, о котором я могу подумать, это если вы хотите сохранить данные уровня в базе данных, и это довольно редкая ситуация.Я никогда не делал этого лично, но я знаю, что это имело бы смысл для онлайн-игры с сгенерированными пользователем уровнями.

На самом деле загрузка файла выполняется с использованием URLLoader, как описано здесь: http://www.kirupa.com/developer/flashcs3/using_xml_as3_pg2.htm

(Примечание. Это применимо только к отдельным плоским файлам. Для уровней, хранящихся в базе данных, потребуется совершенно другой рабочий процесс, включающий запросы GET для выполнения кода бэкенда на вашем сервере.)

Для редактирования данныхдизайнеры уровней никогда не должны смотреть на данные XML (или JSON, CSV или что-то еще) напрямую, а вместо этого вы должны написать для них редактор уровней, который будет иметь команды для загрузки и сохранения уровней.Если вы используете Air, вы можете сохранять текстовые файлы напрямую, но даже без этого вы можете просто сделать так, чтобы редактор выгружал данные в текстовое поле, которое вы можете вставить в файл.

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