#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 позицию влево (как ваша первая строка кода, как я указывал выше).
Этот шаблон повторяется вечно: перемещайтесь влево каждую итерацию на один пробел, пока не достигнете края экрана, а затем двигайтесь взад и вперед между краем экрана и одной позицией вправо снова и снова, и снова.
Вместо этого, возможно, этот 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