我想在 pygame 中来回移动对象,但它只向左移动然后停止

I want to move object back and forth in pygame but it only moves left and then it stop

我试图前后移动我的 Boss 精灵,但它只向左移动并停留在那里我的代码有什么问题。

def horizontal_movement(self):
    self.rect.x-=1
    if self.rect.left<0: #when boss reaches extreme left
        self.rect.x+=1 #move right
        if self.rect.right==screen_width: #when boss reaches extreme right
            self.rect-=1 #move left
            if self.rect.midbottom==[boss_x,boss_y]: #stop the motion when boss reaches original position
                pass
  1. 您在迭代此代码时始终向左移动 (-1)。无论每次迭代的第一步是什么,都剩下 1。
  2. 点击屏幕边缘后,您将向右移动一个位置。代码再次迭代,您向左后退 1 个位置(正如我在上面指出的第一行代码)。

此模式永远重复:每次迭代向左移动一次 space 直到您到达屏幕边缘,然后在屏幕边缘和右侧的一个位置之间来回移动一遍又一遍再来一遍。

也许 self.rect.x-=1 应该在(-1 和 1)之间随机移动,以便每次迭代随机向右或向左移动?

您的代码的问题是它向左移动了 1,但随后又向右移动,因为 if self.rect.right==screen_width: #when boss reaches extreme right 的计算结果为 false 你可以这样做:

self.right_movement = False
def horizontal_movement(self):
    if self.right_movement:
        if self.rect.bottom <= boss_x:
            self.right_movement = False
        self.rect.x += 1

    else:
        if self.rect.right >= screen_width:
            self.right_movement = True
        self.rect.x -= 1

添加一个指示移动方向的属性。当敌人到达边界时改变方向:

class YourClassName:
    def __init__(self):
       # [...]
   
       self.direction = -1

    def horizontal_movement(self):
        self.rect.x += self.direction

        if self.rect.left <= 0: #when boss reaches extreme left
            self.direction = 1
        elif self.rect.right <= screen_width: #when boss reaches extreme right
            self.direction = -1
        
        if self.rect.midbottom==[boss_x,boss_y]: #stop the motion when boss reaches original position
            pass