Анимированный спрайт PyGame, стоящий перед проблемами слева

У меня проблемы со следующим фрагментом кода:

def handle_image_flip(self, old_rect):
    new_rect = self.last_frame.get_rect()
    self.owner.rect = new_rect
    self.owner.rect.y = old_rect.y
    if self.owner.facing == -1:
        self.owner.rect.right = old_rect.right
    else:
        self.owner.rect.x = old_rect.x

def animate(self, tick):
    if tick - self.last_update > self.image_info[self.action]["frame_rate"]:
        self.last_frame = self.get_next_frame(tick)
        old_rect = self.owner.rect.copy()
        self.owner.image = self.last_frame
        self.handle_image_flip(old_rect)
        self.last_update = tick 

Где:

self.owner is the sprite this piece of code handles
self.owner.facing is the direction the sprite is facing
self.last_frame is the new image I want to display

Поскольку спрайты имеют разную ширину, я получаю некорректную анимацию, когда смотрю ВЛЕВО (-1).

Никаких проблем при движении ВПРАВО нет.

Любые идеи?


person user1477160    schedule 23.06.2012    source источник


Ответы (2)


Если вы отслеживаете местоположение игрока с помощью Rect.center или Rect.centerx по умолчанию topleft, тогда может работать другая ширина.

В зависимости от вашей игры использование листов спрайтов может быть полезным.

person ninMonkey    schedule 23.06.2012

в вашем операторе if в одном случае вы изменяете self.owner.rect.right, в другом случае вы меняете self.owner.rect.x.

Это может быть частью проблемы, поскольку при движении влево вы меняете .right, а не .x.

person hammythepig    schedule 25.06.2012