Самый эффективный способ создания карт в 2D?

#java #maps #2d

#java #Карты #2d

Вопрос:

Мне было интересно, какой был бы наиболее эффективный способ создания карты в 2D для java-игры?

Я знаю, что это зависит от того, как игра будет восприниматься и сделана, поэтому я включил информацию об этом.

Вид: Сверху проигрывателя

Тип игры: 2D шутер

Игровая камера будет сфокусирована на игроке.

Я собираюсь создать свой собственный «map maker», но мне было интересно, следует ли хранить его в формате xml или что-то в этом роде. Не совсем уверен, как это сделать. Есть ли какие-нибудь хорошие книги по этому вопросу? Я читал «убийственные Java-игры», но там не очень хорошо освещалась эта конкретная тема для того, что я пытался сделать.

Теперь, чтобы показать вам, что я думал…

Я думал, что лучшим способом будет .xml

Вот пример:

e = вход / выход

b = блок

. = открытое пространство

 <?xml version="1.0" encoding="UTF-8"?>
<info>
    <name>Crack House</name>
    <date>9:49PM 5/8/2011</date>
    <level>Easy</level>
    <rows>10</rows>
    <colums>7</colums>
</info>
<map>
    <row1>bbbebbb</row1>
    <row2>b.....b</row2>
    <row3>b..bbbb</row3>
    <row4>b.bb..b</row4>
    <row5>b.....b</row5>
    <row6>b..b..b</row6>
    <row7>b..b..b</row7>
    <row8>b..bbbb</row8>
    <row9>b.....b</row9>
    <row10>bbbbbbb</row10>
</map>
  

Ответ №1:

Это зависит от того, какая эффективность для вас наиболее важна:

  • эффективная загрузка карт (затрачиваемое время),
  • эффективное хранение карт (использование пространства),
  • эффективное использование времени разработчика.

Это также зависит от ваших навыков разработчика и других характеристик проблемы, которые вы не описали.

Но суть в том, что ваша лучшая стратегия, вероятно, заключается в том, чтобы просто реализовать ее простым способом для начала, а потом беспокоиться об эффективности… если это окажется РЕАЛЬНОЙ проблемой.


Один совет. Попробуйте спроектировать / структурировать свое программное обеспечение так, чтобы вы могли изменять способ хранения карт без особых усилий.

Комментарии:

1. Значит, каждая игра отличается? Для этого нет стандарта? Честно говоря, я нахожу это довольно странным.

2. Это зависит от игры. Многие из них используют XML, но используются и другие форматы. Если игра использует существующий редактор карт, это может повлиять на их решение (Tiled использует XML для хранения карт). На самом деле, следует учитывать еще кое-что, если карты будут пересылаться по сети; тогда пропускная способность также является проблемой.

3. @Ryan Mast Это отличный момент… даже не подумал о пропускной способности! Я полагаю, что это не должно быть большой проблемой, пока у каждого есть локальная копия.

Ответ №2:

XML было бы легко анализировать и работать с ним, и в него должно быть легко вносить изменения, если вам понадобится добавить к нему дополнительную информацию позже. Однако это заняло бы больше места на диске, и потенциально может быть медленнее анализировать его при начальной загрузке карты.

Некоторая форма пользовательского формата двоичной карты занимала бы меньше места на диске и могла бы быть быстрее проанализирована, но она не была бы такой гибкой, если вам потребуется изменить формат позже.

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

Ответ №3:

Я использовал для 2D стратегической игры простой текстовый файл. Файл выглядит следующим образом:

00000000000
00111111100
00111111100
00222222200
00111221100
00000000000

0 = заблокированная плитка
1 = травянистая плитка
2 = дорожная плитка

Я думаю, что это действительно компактный метод. Моя реализация синтаксического анализатора работает очень быстро, и после синтаксического анализа я получаю двумерный массив -> плитка [столбец] [строка]