В настоящее время я создаю игру с pygame, и мне нужно объяснение некоторого векторного кода - PullRequest
0 голосов
/ 08 мая 2020

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

    def Shoot(self):
        pos = self.rect.centerx, self.rect.centery
        mpos = py.mouse.get_pos()
        direction = py.math.Vector2(mpos[0] - pos[0], mpos[1] - pos[1])
        direction.scale_to_length(10)
        return Bullet(pos[0], pos[1], round(direction[0]), round(direction[1]))

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

Ответы [ 2 ]

1 голос
/ 08 мая 2020

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

mpos - это позиция мыши на экране

direction получает направление между игрок и мышь. например, это направление может быть на 10 пикселей вниз и 100 пикселей вправо.

pic of maths

Следующая строка масштабирует направление вниз до 10, поэтому вместо перемещения 100 пикселей вправо и 10 вниз оно приближается к примерно 1 вниз и 10 справа (не совсем, но довольно близко)

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

0 голосов
/ 08 мая 2020

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

Инструкция

direction = py.math.Vector2(mpos[0] - pos[0], mpos[1] - pos[1])

Вычисляет расстояние от точки pos ( A ) до точки mpos ( B ) по оси x и оси y. Такой набор расстояний, выровненных по оси, называется Вектор :

Здесь евклидово расстояние от точки A до точки B неизвестно.

Далее вектор масштабируется до длины 10 с помощью операции pygame.math.Vector2.scale_to_length:

direction.scale_to_length(10)

Это означает, что компоненты x и y вектора изменяются таким образом ( xd, yd ), что евклидова длина вектора равна 10 ( d = 10 ):

Если компоненты вектора складываются с компонентами точки A , один раз за кадр, затем точка A шагает к точке B ( A1 , A2 , ...) :

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