【问题标题】:My enemy isn't moving when my character is standing still当我的角色静止不动时,我的敌人没有移动
【发布时间】:2020-05-31 16:31:14
【问题描述】:

我目前正在用 python 编写游戏,我需要一种方法让敌人跑向玩家。它必须具有一个循环 5 个像素的恒定速度,这是我当前的代码:

def move(self,character):
    characterposition = Vector(character.posx,character.posy)
    self.position = Vector(self.posx,self.posy)
    dist = characterposition.subtract(self.position)
    dist.normal(dist.length())
    length = dist.length()
    ratio = self.speed/math.sqrt(length)
    self.posx += dist.x * ratio
    self.posy += dist.y * ratio

这似乎一直有效,直到我的角色停止移动。当角色停止移动时,敌人也会停止。这是一个问题,如果有任何建议,我将不胜感激。

编辑:这是我的循环。


while True:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
             pygame.quit()
             run = False
             continue
        updatecharacterposition()
        collided = checkforbarriercollision()
        badguy.move(character)
        if collided:
            print("YOU LOST")
            pygame.quit()
            time.sleep(5)
    redrawgamewindow()

【问题讨论】:

  • Rabbid76,循环代码我加了,你能再看一遍吗?

标签: python python-3.x vector pygame game-physics


【解决方案1】:

上面代码中的缩进是否正确?它在for event in pygame.event.get(): 循环内显示updatecharacterposition() 及其后面的行。

如果确实如此,那么如果您没有收到任何事件,则不会调用任何代码。这将导致所有运动停止。

试试这个:

while True:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
             pygame.quit()
             run = False
             continue
    updatecharacterposition()
    collided = checkforbarriercollision()
    badguy.move(character)
    if collided:
        print("YOU LOST")
        pygame.quit()
        time.sleep(5)
    redrawgamewindow()

在旁注中,badguy.move(character) 在碰撞检查之后对我来说似乎很奇怪。通常你会移动所有东西(玩家和“坏人”),然后进行碰撞检查。

【讨论】:

  • 谢谢你,我不敢相信我犯了这么愚蠢的错误
  • @VigneshMuralidharan 我在最后添加了一条关于碰撞检查位置的评论。
  • @VigneshMuralidharan 作为一种帮助您自己调试这些东西的方法(如果您没有调试器)。您可以尝试添加打印语句。当运动停止时,您会发现代码未到达,您可能已经弄清楚了。
猜你喜欢
  • 2021-05-10
  • 2014-04-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-12-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多