Какова фундаментальная концепция 2D-прокрутки игровой камеры?

#c# #wpf #camera #2d

#c# #wpf #камера #2d

Вопрос:

Небольшой вопрос — правильно ли я предполагаю, что базовая 2D-камера для игры с прокруткой в стиле параллакса в основном основана на эффекте псевдо-панорамирования камеры, следующей за игроком; но на самом деле окружение игрового мира движется вокруг довольно статичного игрового персонажа, создавая эффект параллаксной камеры.

Или, действительно ли существует более глубокий алгоритм, который обслуживает прокрутку виртуальной камеры, при этом координаты персонажа пересекают окружающую среду, а вид игрока следует за ним?

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

Спасибо за любую помощь / ссылки на соответствующие ресурсы.

P.S. Ранее я написал прототип функциональности камеры, используя WPF для интерфейса, используя первый подход, который я описал. Результаты были базовыми, но работали. Однако я подозревал, что в профессиональном / инди-названии логика камеры следует более сложной парадигме, в отличие от псевдо-панорамирования, основанной на движущейся среде.

      if (this.playerPositionXAxis >= this.cameraRightLimit)
        {
            // Camera shift/offset algorithm. RIGHT movement.
            double offset = Math.Abs(this.playerPositionXAxis - this.cameraRightLimit);
            this.MainCanvas.Margin = new Thickness(this.canvasMarginLeft -= offset, 0, -8, -10);

            this.cameraRightLimit  = offset;
            this.cameraLeftLimit  = offset;

            this.translateCamera = true;
        }

        if (this.playerPositionXAxis <= this.cameraLeftLimit)
        {
            // Camera shift/offset algorithm. LEFT movement.
            double offset = Math.Abs(this.playerPositionXAxis - this.cameraLeftLimit);
            this.MainCanvas.Margin = new Thickness(this.canvasMarginLeft  = offset, 0, -8, -10);

            this.cameraLeftLimit -= offset;
            this.cameraRightLimit -= offset;

            this.translateCamera = true;

        }

        this.CameraLimitsTextBlock.Text = "Camera limit LEFT: "   this.cameraLeftLimit.ToString()  " Camera limit RIGHT: "   this.cameraRightLimit.ToString();
    }
  

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

1. Забудьте о любой камере. Это не 3d. Игра выбирает ту часть фона, которая находится в поле зрения, и такого рода движения. Спрайт или изображение персонажа сидит поверх этого, и его ноги могут шевелиться или что-то в этом роде. Насколько я понимаю, часто фактически 3 плитки. Слева, посередине и справа. Они анимированы, и когда один из них выходит из поля зрения, они логически переключаются, и один удаляется, добавляется другой.

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