2014-02-17 2 views
0

У меня отличная идея для приложения для Android. Моя большая проблема: Я «новичок» в JAVA. У меня была Java в ИТ-университете, но это были абсолютные основы! Обычно я развиваюсь в .Net.JAVA 2D-макет прокрутки и препятствия с обнаружением столкновений

Я делаю вертикальную игру прокруткой 2D: SplashScreen (без проб) Главное меню (без проб) обзор уровня (без проб) Игра сама по себе (большой Prob :))

Вертикальная прокрутка: Я могу сделайте это, достаточно учебников Карта игры и препятствия (нет)

Как создать карту (есть стены справа и слева) Средняя часть бесплатна для игры с препятствиями.

Существует (например) мяч, где падают, и вы должны повернуть его в правильном направлении, прежде чем мяч исчезнет, ​​когда появится верхняя граница.

Как я могу обнаружить столкновение от черной стены и красных препятствий? (это пример, текстуры не включены)

И не забывать, он перемещается вниз. Я думал, что с AndEngine с камерой ...

Изображение:

https://www.dropbox.com/s/kzafsb041po9jc7/Unbenannt-2.png

ответ

1

Как я могу создать карту

На экране или в памяти?

  • JOGL, LWJGL, .. есть слишком много вещей, которые вы можете начать отрисовку OpenGL на экране. (Возможно AndEngine лучше я не знаю), вы должны использовать версии-совместимые функции OpenGL.
  • Если вам нужно сгенерировать информацию о стене в памяти, вы можете использовать простую функцию, расположенную сверху с картой высоты. Вам нужно вычислить нормали поверхности, чтобы иметь возможность накладывать вещи поверх других.(Я не уверен, если андроид устройство способно производительность в реальное время для высокого разрешения)

Например, начиная с синусоидальной волной,

enter image description here

Добавлением квадратной волны на вершине, что,

enter image description here

Superpositioned случай:

enter image description here

Добавление карты с произвольной высотой, вы получаете одну сторону стены со случайностью, и ее можно сгенерировать с использованием только одной или двух строк кода (тогда вы можете сохранить координаты, если вам нужно сохранить циклы CPU больше, чем объем памяти):

enter image description here

Как я могу обнаружить при столкновении

ли вам нужно событийный или прямое обнаружение?

  • Приоритетное обнаружение: вы снимаете воображаемые лучи из шара с направлением вектора скорости шара. Проверьте координаты обеих стенок и красных препятствий для пересечения лучей. Если он пересечет, он узнает, с каким объектом мяч столкнется после n шагов времени. (если все остается неизменным). Вы можете попробовать несколько лучей, которые работают на фоне, например, первые лучи для пробных лучей с текущего положения, следующие тестовые выстрелы из следующего положения мяча, следующий следующий, ... Хорошо: вы узнаете, прежде чем он столкнется , поэтому вы можете остановить его «как раз вовремя». Вы можете вычислить, где мяч будет прыгать после столкновения! Даже для последовательных столкновений. Плохо: требуется больше циклов процессора, рекурсия может убить производительность. Более чем один движущийся объект будет экспоненциально увеличивать сложность.

Использование алгоритма «Сортировка сортировки» в отдельном буфере координат объекта перед съемкой лучей может ускорить трассировку.

  • Обнаружение Posteriori прост, так как вы проверяете, только если координата шара соответствует интервалу допуска любой координаты другого объекта. Хорошо: это самое простое. Плохо: он уже столкнулся. Может быть, ошибка или взрыв, вам нужно вернуть мяч в разумную позицию. Если физика позади хороша, вам не понадобится перепозиционирование. Сила отталкивания может быть получена из усеченного экспоненциального потенциала или некоторой простой ступенчатой ​​функции.

Оба типа требуют структуры ускорения, если число объектов велико. (KD-tree помогает)

  • Вы можете жестко закодировать зоны столкновения. Каждый новый объект добавит еще одну строку кода для реализации. Требуется минимальный цикл процессора.(например, карта столкновения, чтобы проверить, является ли положение стенным положением или любым другим препятствием, 1 для столкновения и 0 для не столкновения, карта 50x400 из 1 с и 0 с не должна заполнять слишком много памяти)
+0

Я хотел бы создать карты в редакторе, например, Adobe Photoshop. Я хочу нарисовать пределы игры (стена справа и слева), и если это возможно, препятствия. Я прочитал/нашел возможное решение, обнаружив пиксельный цвет. Все линии препятствий черные (стена и барьеры). Я так думал, потому что на каждом уровне есть другой макет, цвета и текстуры (для разнообразия). – Benini

+0

Это то, что я пытался сказать в последней части :), если каждый уровень имеет одинаковый цвет стен, препятствий и т. Д., Тогда все в порядке с этим. Я использовал это один раз для моего симулятора полета qbasic, и мой самолет подпрыгивал от «индикатора времени/даты», потому что он был того же цвета для некоторых других самолетов :) Если вам нужно использовать другие цвета, вы можете использовать «карту столкновений», которая может сохраните все цвета. 1 для квадрата столкновений, 0 для не столкновений. Так просто. –

0

еще некоторая информация:

I. использовать AndEngine

https://github.com/nicolasgramlich/AndEngine https://github.com/nicolasgramlich/AndEngineExamples

андроид приложение о примерах: найти "AndEngine примеры" в Google Play

II. столкновения обнаружения

Key часть: collidesWith метод напр .:

if(line.collidesWith(face)) { 

    line.setColor(1, 0, 0); 

    } else { 

    line.setColor(0, 1, 0); 

    } 

III. LevelLoader (работает с xml) является частью Andengine. Вы можете использовать его.

ps: Мне нужно было создать собственный редактор карт для моей игры (в Google Play: «Пираты: капитан Джек»), где я сохраняю значения в xml-файлах.

Реализация редактора занимает немного времени, но стоит.

Смежные вопросы