Python / Pygame заставляет объект следовать за другим объектом

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

    if playerx > zombiex:
        zombiex=zombiex - 2
        screen.blit(zombie,(zombiex,zombiey))

аааааи это не сработало ....: /
Есть идеи?


person Community    schedule 22.07.2011    source источник
comment
Этого фрагмента кода недостаточно, чтобы показать, в чем может быть проблема. Почему бы не записать в каком-нибудь псевдокоде, как будет выглядеть ваш алгоритм, и не посмотреть, где ваша логика ошибочна.   -  person James Black    schedule 22.07.2011
comment
Если playerx был БОЛЬШЕ, чем zombiex, вы сделали zombiex МЕНЬШЕ?   -  person agf    schedule 22.07.2011
comment
это был просто пример, я действительно не использовал этот код. Я просто ДУМАЛ сделать что-то подобное. и я торопился, поэтому в этом фрагменте кода есть недостатки   -  person    schedule 23.07.2011


Ответы (2)


Может это то, что вы искали.

def length(x, y):
    return (x ** 2 + y ** 2) ** .5

def norm(x, y):
    _len    = length(x, y)
    return x / _len, y / _len

class ZombieController(object):

    def __init__(self, zombie_view_range):
        self._zombs = []
        self.append = self._zombs.append
        self._range = zombie_view_range

    def NextFrame(self, player_pos):
        px, py      = player_pos
        _range      = self._range
        for zombie in self._zombs:
            x, y    = zombie.position
            dx, dy  = px - x, py - y
            _len    = length(dx, dy)
            if _len <= _range:
                speed       = zombie.speed
                direction   = norm(dx, dy)
                zombie.positon  = x + direction[0] * speed, y + direction[1] * speed
person Niklas R    schedule 22.07.2011

Во-первых, не могу ответить на все ваши вопросы, так как информации недостаточно. Как это точно не работает?

Во-вторых, если вы хотите, чтобы зомби следовали за ними, вам нужны их координаты, чтобы они сходились с игроками, поэтому вам нужно что-то вроде:

if playerx > zombiex:
    zombiex = zombiex + max(zombiespeed, playerx - zombiex)
elif playerx < zombiex:
    zombiex = zombiex - max(zombiespeed, zombiex - playerx)

NB:

  • Я заменяю 2 на zombiespeed, который вы определяете в другом месте, чтобы вы могли изменить скорость в одном месте в будущем.
  • Я использую max(), чтобы зомби не двигался мимо игрока, когда он очень близко.
  • Очевидно, вы сделали бы то же самое и для направления y.
person xan    schedule 22.07.2011