Движение в реальном времени показано графически. стриж

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

Я создаю игру, в которой вы бегаете от зомби в режиме реального времени. По сути, если пользователь движется в реальности, то и он в игре. Зомби явно преследуют игрока.

Мое приложение определяет местоположение пользователя и с помощью рандомизации создает пару местоположений, которые находятся на расстоянии от 50 до 800 м от пользователя. Затем локации зомби представляются в виде точек, назовем их пользовательской радарной картой:

Радар, показывающий зомби вокруг в данной области

Тогда это все математика.

Каждую 1 секунду каждая точка "тянет" к центру, как если бы зомби преследовали игрока. Имея точки зомби и точку центра UIScreen, где отображается изображение цели (и которое представляет собой положение пользователя), я вычисляю арктангенс и использую параметрические уравнения для круга (оставайтесь со мной, это не моя проблема!) чтобы получить новые координаты для точек зомби. Делая все это, у меня есть свое представление движения. Очки идут к цели (пользователю), и это нормально. Yahoo!

Проблема появляется с движением пользователя. Используя скорость CLLocation, я проверяю, какое расстояние выполняется каждые 1 секунду (радиус), а затем, в зависимости от используемого магнитного жатки, я проверяю, под каким углом перемещается пользователь, и поэтому я снова использую параметрические уравнения для расчета смещения пользователя. Затем я применяю это смещение к точкам зомби, потому что я хочу, чтобы оно выглядело как радар. Если что-то движется или владелец радара движется, он / она должен просто видеть, что вещество движется к нему или от него. Я надеюсь, что вы получите это "отношение", которое я пытаюсь интерпретировать прямо сейчас.

Во всяком случае, я не думал об одной проблеме, и вот проблема! Если игрок держит свое устройство iOS прямо, а пользователь ходит / бежит прямо, как на картинке:

представление пользователя, идущего прямо с его устройством, расположенным прямо

Там нет никаких проблем вообще. Но, если он хочет держать устройство, подобное этому:

представление пользователя, идущего прямо с его устройством, расположенным справа

Но движется / идет прямо, смещение происходит относительно направления, на которое указывает устройство, а не направления, в котором ходит пользователь.

Как мне реализовать движение пользователя? Я ищу решение, отличное от вычисления atan2 для двух пользовательских местоположений, одного ранее, а другого - позже, а затем использую его в параметрических уравнениях. Некоторые обновления гироскопа или что-то?

КОД:

func updatePositions()
{
    for i in 0..<number
    {
        if Int(userLocation.speed) >= 0
        {
            /* USER MOVES */

            let userSpeed = userLocation.speed * 1/5 /* s = vt */
            let userMoves = CGPoint(x: CGFloat(userSpeed * cos(userTheta)), y: CGFloat(userSpeed * sin(userTheta)))

            markers[i].center = CGPoint(x: markers[i].center.x - userMoves.x, y: markers[i].center.y - userMoves.y)

            /* USER CHANGES DIRECTION */


            /* ZOMBIE MOVES */

            let zombieTheta = atan2((markers[i].center.y - aim.center.y), (markers[i].center.x - aim.center.x))

            let zombieSpeed = Double(speed)/5
            let zombieMoves = CGPoint(x: CGFloat(zombieSpeed) * cos(zombieTheta), y: CGFloat(zombieSpeed) * sin(zombieTheta))

            markers[i].center = CGPoint(x: markers[i].center.x - zombieMoves.x, y: markers[i].center.y - zombieMoves.y)
        }
    }
}

0 ответов

Другие вопросы по тегам