XNA Tile Mapping Platformer? - PullRequest
       1

XNA Tile Mapping Platformer?

2 голосов
/ 18 октября 2011

Только что начал учиться в области компьютерных наук со степенью разработки игр.Заглядывая в создание 2D-платформера с использованием мозаичного отображения.Очевидно, что одна из особенностей 2D-платформеров - это мир, который больше экрана, то есть Super Mario Brothers, Legend of Zelda и т. Д.

Мне интересно, как это сделать.У меня есть карта тайлов, созданная с использованием массива текстур, но теперь я застрял на:

  1. Как вы кодируете тот факт, что когда игрок находится в тайле с y = 0или x = screenWidth, затем прокрутить вверх или немного вперед?
  2. Как мне нарисовать игрока во всем этом?(Используя базовые квадраты, пока я не разберусь с этим, а затем у меня есть художник, чтобы нарисовать что-нибудь)

Любая помощь будет отличной.Большинство ответов на подобные вопросы предлагают использовать движок, но я не хочу сделать это, поэтому, пожалуйста, не предлагайте его.

edit: Кроме того, да, у меня былпосмотрите на стартовый комплект платформера.Я не думаю, что это было действительно много помощи?Мне нужно некоторое объяснение вместе с кодом, и это не очень хорошо прокомментировано.

Ответы [ 3 ]

2 голосов
/ 18 октября 2011

Мне нравится использовать объектно-ориентированный подход к решению подобных проблем.

Вы упомянули вам сетку плиток (ваш мир) для рисования. Я предполагаю, что вы также будете использовать это для столкновения, но это не упоминается, поэтому я проигнорирую это.

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

У меня было бы два класса. Один для вас, игрок, имеющий позицию в мире координаты (НЕ относительные координаты). Тогда у меня будет класс, описывающий тайлы мира (ваша карта тайлов). Затем вы можете нарисовать тайлы на основе их мировых координат, преобразованных какой-либо матрицей камеры (матрицей перевода, используемой для смещения обзора мира). Идея в том, чтобы переместить камеру , а не двигать мир. Вы можете нарисовать игрока с той же матрицей преобразования камеры.

Поскольку игрок понятия не имеет, что за ним наблюдает камера, камера должна знать, что ей делать. Поэтому камера должна «следить» за игроком. Вы могли бы дать камере координату «Target», и у камеры могли бы быть правила того, как следовать за игроком.

Затем камера может определить, нужно ли ей «прокручивать» быстрее или медленнее, чтобы не отставать от игрока. Камера должна быть в состоянии определить, нарисован ли игрок около края экрана, и сдвинуть его в сторону. Etc.

Надеюсь, это было полезно:)

1 голос
/ 18 октября 2011
  1. Я сохраняю 4 переменные, определяющие границы камеры.Если игрок находится за этими границами относительно камеры и движется, прокрутите его в соответствующем направлении.И что я имею в виду под камерой, это не фактические координаты игрока в мировом пространстве, а на экране.Если это требует дальнейших разъяснений, скажите, пожалуйста.

  2. Spritebatches будет вашим другом!Объедините их с экземплярами texture2D, и все будет готово.

      SpriteBatch batch = new SpriteBatch();
      Texture2D mySprite = Content.Load<Texture2D>("mySprite");
    
      batch.begin();
      batch.draw(mySprite, x, y, width, height); //not sure about these parameters, double check them!
    
      batch.end();
    

Инкапсулируйте этот материал в класс для более удобного управления!

1 голос
/ 18 октября 2011

Вы должны отслеживать некоторые scrollPositionX и scrollPositionY, которые смещают плитки, которые вы рисуете.Используя простой метод прокрутки (1 целая плитка за раз), вы можете добавить scrollPositionX к индексу столбца и scrollPositionY к индексу строки ссылок на ваш массив при рисовании карты.Когда игрок перемещается около края, увеличивайте или уменьшайте scrollPositionX и scrollPositionY.Я рекомендую отслеживать абсолютную позицию игрока на карте, а не позицию игрока на экране.Поэтому, если scrollPositionX == playerX, это означает, что игрок находится в первом столбце, и вам, вероятно, следует уменьшить scrollPositionX.

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