Проблема с созданием представления в среде тайла карты (SFML) - PullRequest
0 голосов
/ 27 апреля 2019

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

Этот массив для контекста:

int map[10][30] =
{
    {2, 3, 2, 3, 3, 3, 2, 2, 2, 2, 2, 3, 2, 3, 3, 3, 2, 2, 2, 2, 2, 3, 2, 3, 3, 3, 2, 2, 2, 2},
    {2, 2, 2, 2, 2, 2, 2, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 2, 2},
    {2, 2, 2, 3, 2, 3, 2, 2, 2, 2, 2, 2, 2, 3, 2, 3, 2, 2, 2, 2, 2, 2, 2, 3, 2, 3, 2, 2, 2, 2},
    {2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2},
    {1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1},
    {1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1},
    {1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1},
    {1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1},
    {1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1},
    {1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1}
};

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

Я попробовал использовать этот код в качестве примера, чтобы проверить, сработает ли моя идея:

for (int mapY = 0; mapY < 10; mapY++)
    {
        for (int mapX = 0; mapX < 30; mapX++)
        {
            if (map[mapY][mapX] == 1)
            {
                ground.setPosition(mapX * 50, mapY * 50);
                ground.move(-300, 0);
                window.draw(ground);
            }
            else if (map[mapY][mapX] == 2)
            {
                sky.setPosition(mapX * 50, mapY * 50);
                sky.move(-300, 0);
                window.draw(sky);
            }
            else if (map[mapY][mapX] == 3)
            {
                cloud.setPosition(mapX * 50, mapY * 50);
                cloud.move(-300, 0);
                window.draw(cloud);
            }
        }
    }

Объекты в коде sky, ground и cloud имеют форму RectangleShapes размером 50 на 50, различающиеся разными цветами.

Этот код работает для распечатки мира, но по какой-то причине я вообще не перемещаю блоки. В соответствии с моей логикой, этот код помимо печати всего мира также перемещает его (все блоки, которые есть) для каждого кадра. Если бы я мог сделать эту работу, я мог бы заменить текущий вектор движения, который перемещает мир только в одном направлении, вектором view_direction, который изменяется в зависимости от состояния персонажа (неподвижность, движение влево, движение вправо, перемещение вверх, перемещение вниз). Любой, кто знает, что я здесь делаю неправильно, или кто имеет более эффективное и простое представление о том, как создать свое собственное представление, будет работать в этой среде.

...