【问题标题】:Player getting stuck when hitting a wall pygame玩家在撞墙 pygame 时被卡住
【发布时间】:2021-03-18 23:00:00
【问题描述】:

所以我试着让一个敌人在撞墙时转身,结果卡住了。

这是只针对敌人的代码:(屏幕大小为 1000 x 1000 btw)

xEnemy = random.randint(0,1000)
yEnemy = random.randint(0,1000)

#enemy
def enemy():
    global xEnemy, yEnemy
    pygame.draw.rect(screen,(255,0,0),(xEnemy,yEnemy,15,15))
    
    if xEnemy > 0 and xEnemy < 1000:
        xEnemy -=velEnemy
        if xEnemy < 0 and xEnemy > 10:
            xEnemy += velEnemy

【问题讨论】:

  • xEnemy &lt; 0 and xEnemy &gt; 10 永远不会是真的。此外,即使您将其调整为您可能的意思,请注意 (a) 将此 if 嵌套在前一个下方的效果,以及 (b) 触发两个条件的可能性,因此您减去 velEnemy 然后添加再次,没有结果。
  • xEnemy &lt; 0 and xEnemy &gt; 10 应替换为 xEnemy &lt; 0 or xEnemy &gt; 1000。另外,如果这个条件成立,你想在之后反转敌人的速度,velEnemy = -velEnemy
  • 如果 xEnemy > 0: xEnemy -=velEnemy 如果 xEnemy
  • 这段代码使敌人站起来,因为这两个条件同时为真
  • 那么我如何让他到达终点时改变方向

标签: python pygame


【解决方案1】:

如果xEnemy &gt; 1000xEnemy &lt; 0,您必须更改速度。如果xEnemy &gt; 1000,则速度必须变为负值。如果xEnemy &lt; 0,速度必须变为正。速度的绝对值可以通过abs(velEnemy) 获得。别忘了global velEnemy

def enemy():
    global xEnemy, yEnemy, velEnemy

    if xEnemy < 0:
        velEnemy = abs(velEnemy)
    if xEnemy > 1000:
        velEnemy = -abs(velEnemy)
    xEnemy += velEnemy

    pygame.draw.rect(screen, (255,0,0), (xEnemy, yEnemy, 15, 15))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-07
    • 1970-01-01
    • 1970-01-01
    • 2013-08-05
    • 1970-01-01
    • 2021-05-24
    相关资源
    最近更新 更多