Как я могу преобразовать мои координаты плитки в 2D-игре в пиксельные координаты в Stack Overflow

Я работаю над игрой Tower Defense, используя c ++ и SDL. Я хочу, чтобы мои враги стартовали на пути, но на каждом уровне старт начинается в другом месте. Я мог бы жестко запрограммировать пиксели, но это могло бы показаться немного беспорядочным, чтобы точно определить, где появляются враги во время тестирования и развития игры. То, как я это делаю, немного излишне с моей стороны, и я немного его подправлю. Но мне любопытно, есть ли лучший способ сделать это, чем то, что я делаю.

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

static int ConvertTileToPixelX(int tileX, int tileSize, int scale) { return tileX * tileSize * scale; }
static int ConvertTileToPixelY(int tileY, int tileSize, int scale) { return tileY * tileSize * scale; }

Как видите, функция — это одно и то же, умножив 3 параметра вместе. Я могу сделать это в одну функцию, но для удобства чтения, когда я вызываю эти функции, это облегчает. Теперь, поскольку это статические функции, я не могу получить доступ к переменным, которые у меня есть для плиток (которые содержат масштаб и размер мозаики), и поэтому я установил их в качестве параметра. Теперь каждый раз, когда я вызываю эти функции при создании врага, я должен напечатать это:

enemy(Tile::ConvertTileToPixelX(0, TILEWIDTH, SCALE), Tile::ConvertTileToPixelY(12, TILEHEIGHT, SCALE), ...)

Как вы можете видеть это выглядит все в стиле фанк LOL. Я собирался что-то вроде этого:

enemy(Tile::ConvertTileToPixelCoords(0, 12), ...)

Примечание: я создаю врага в конструкторе (список инициализации).

Есть ли намного более простой способ добиться того, что я делаю? Я слишком много думаю?

-1

Решение

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

Есть два типа; TileLoc и PixelLoc, Они хранят оба x а также y,

определять Tile2Pixel как тип, когда * с TileLoc возвращает PixelLoc, а также Pixel2Tile это делает наоборот. Так же, TileLoc/Tike2Pixel=PixelLoc,

Он содержит информацию о масштабе / ширине / высоте.

enemyвзять PixelLoc, а не х и у.

enemy(TileLoc{0,12}*m_TileToPixel)

конструирует врага.

Tile2Pixel мог использовать матрицу. Или, может быть, не стоит.

0

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector