【问题标题】:Pygame Simple Movement: Enemy mimicking player movement and also retracing stepsPygame 简单运动:敌人模仿玩家运动并回溯步骤
【发布时间】:2017-10-26 08:34:36
【问题描述】:

我想使用我的玩家类的移动方法,让敌人复制玩家的动作。我希望敌人基本上跟随玩家,直到满足某个条件,例如 3 分钟过去了,之后我希望敌人回溯它的所有步骤。下面是我在玩家类的移动方法

class PacMan(pygame.sprite.Sprite):
    def __init__(self, x, y, radius):
        super().__init__()
        self.image = pygame.Surface([radius, radius])
        self.image.fill([250, 250, 0])
        self.rect = self.image.get_rect()
        self.rect.x = x
        self.rect.y = y
        self.queue = [-speed1, 0]
        self.direction = [-speed1, 0]

    def change_direction(self, x, y):
        self.queue = [x, y]

    def move(self, level):
        self.rect.x += self.queue[0]
        self.rect.y += self.queue[1]
        hitlist = pygame.sprite.spritecollide(self, level.wall_list, False)
        if hitlist:
            self.rect.x -= self.queue[0]
            self.rect.y -= self.queue[1]
            self.rect.x += self.direction[0]
            self.rect.y += self.direction[1]
            seclist = pygame.sprite.spritecollide(self, level.wall_list, False)
            if seclist:
                self.rect.x -= self.direction[0]
                self.rect.y -= self.direction[1]
        else:
            self.direction[0] = self.queue[0]
            self.direction[1] = self.queue[1]

        if self.rect.x < -pacman_length:
            self.rect.x = board_dimensions[0] - wall_length
            self.rect.y = self.rect.y
        if self.rect.x > board_dimensions[0]:
            self.rect.x = wall_length

接下来是敌人类,除了一次向右移动 4 个像素外,它不会起作用

class Ghost(pygame.sprite.Sprite):
    def __init__(self, x, y, color,):
        super().__init__()
        self.color = color
        self.image = pygame.Surface([pacman_length, pacman_length])
        self.image.fill(color)
        self.rect = self.image.get_rect()
        self.rect.x = x
        self.rect.y = y
        self.direction = [0, speed1]
        self.moves = [False, True, True, False]
        self.edible = False
        self.wait = False
        self.waitcount = 0
        self.speed = speed1

    def move(self, level):
        status1 = False
        status2 = True



        self.rect.move_ip(4, 0)
        x_change = 0
        y_change = 0

        for i in startingmovements:
            print (i)
            print(i[0])
            print (i[1])
    def change_color(self, color):
        self.image.fill(color)

我使用 while 循环实际上使字符像这样移动:

        player.move(board)

        for i in board.ghost_list:
            i.move(board)

    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            pygame.quit()
            return
        if event.type == pygame.KEYDOWN:
            if event.key == pygame.K_LEFT:
                player.change_direction(-4, 0)
            elif event.key == pygame.K_RIGHT:
                player.change_direction(4, 0)
            elif event.key == pygame.K_DOWN:
                player.change_direction(0, 4)
            elif event.key == pygame.K_UP:
                player.change_direction(0, -4)
            elif event.key == pygame.K_SPACE:

我知道代码有一个简单的解决方案,但是我只是遇到了一个我似乎无法掌握答案的时候。任何提供的帮助将不胜感激

【问题讨论】:

    标签: python python-3.x pygame


    【解决方案1】:

    解决方案是将列表作为属性添加到您的 pac-man 类中。例如,self.steps=[]。吃豆人会列出他的坐标,以便鬼魂追踪他。

    在您的代码中实现:

    class PacMan(pygame.sprite.Sprite):
    def __init__(self, x, y, radius):
        super().__init__()
        self.image = pygame.Surface([radius, radius])
        self.image.fill([250, 250, 0])
        self.rect = self.image.get_rect()
        self.rect.x = x
        self.rect.y = y
        self.queue = [-speed1, 0]
        self.direction = [-speed1, 0]
        #add some starting values
        self.steps=[]
    

    现在让我们添加一个函数让 pac-man 列出他的步骤。

    def update_steps():
        #add current position
        self.steps.insert(0,(self.rect.x,self.rect.y))
        #delete old steps
        del self.steps[:-1]
    

    现在是幽灵功能:

    def update_pos(steps):
        self.rect.x=steps[:-1[1]]
        self.rect.y=steps[:-1[2]]
    

    另外,请务必先更新 ghost 而不是 pac-man。

    我希望这会有所帮助!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-05-11
      • 2023-02-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多