Я хочу перемещать объект вперед и назад в pygame, но он движется только влево, а затем останавливается

#python #pygame #pygame-surface

#питон #pygame #pygame-поверхность

Вопрос:

Я пытаюсь перемещать свой спрайт босса вперед и назад, но он перемещается только влево и остается там, в чем проблема с моим кодом.

 def horizontal_movement(self):  self.rect.x-=1  if self.rect.leftlt;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. Вы удалили из своего вопроса информацию, необходимую для того, чтобы на него можно было ответить. Пожалуйста, не надо. Имейте в виду, что пары вопросов и ответов в StackOverflow должны быть полезны в будущем. Это не так, если вы удаляете информацию. Кроме того, ответ выглядит странно ясновидящим, если они отвечают на вопросы, не содержащие информации.

Ответ №1:

Добавьте атрибут, указывающий направление движения. Измените направление, когда враг достигнет границ:

 class YourClassName:  def __init__(self):  # [...]    self.direction = -1   def horizontal_movement(self):  self.rect.x  = self.direction   if self.rect.left lt;= 0: #when boss reaches extreme left  self.direction = 1  elif self.rect.right lt;= 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  

Ответ №2:

  1. Вы всегда двигаетесь влево (-1) при повторении этого кода. Независимо от того, какой первый ход на каждой итерации-1 слева.
  2. Как только вы достигнете края экрана, вы переместитесь на одну позицию вправо. Код повторяется еще раз, и вы возвращаетесь на 1 позицию влево (как ваша первая строка кода, как я указывал выше).

Этот шаблон повторяется вечно: перемещайтесь влево каждую итерацию на один пробел, пока не достигнете края экрана, а затем двигайтесь взад и вперед между краем экрана и одной позицией вправо снова и снова, и снова.

Вместо этого, возможно, этот self.rect.x-=1 должен быть случайным между (-1 и 1) для случайного перемещения вправо или влево на каждой итерации?

Ответ №3:

Проблема с вашим кодом в том, что он идет влево на 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 lt;= boss_x:  self.right_movement = False  self.rect.x  = 1   else:  if self.rect.right gt;= screen_width:  self.right_movement = True  self.rect.x -= 1