2017-02-03 12 views
0

Я не выполняю действующую боковую прокрутку для платформера с использованием pygame: всякий раз, когда игрок не центрирован по горизонтали, я хочу, чтобы мир (то есть платформы) прокручивался.Pygame боковая прокрутка: платформы продолжают двигаться в противоположном направлении к положению 0

Я считаю, что соответствующая часть коды в главном цикле составляет:

if self.player.rect.center[0] != WIDTH/2: 
    self.player.pos.x -= self.player.vel.x 
    for pl in self.platforms: 
     pl.rect.x -= self.player.vel.x 

Однако то, что происходит, что

  • , когда игрок перемещается влево, все платформы с х позициями <-двигаться в постоянная скорость вправо, но только до x = 0;
  • , когда игрок переходит к правым, все платформам с й позицией>-двигаться с постоянной скоростью влево, но только до й = 0.

Иногда платформы не двигается вплоть до й = 0 . Я считаю, что они останавливаются, когда скорость игрок практически 0.

Hopefully this makes it more clear. The platforms should not move relative to each other. (Sorry about the artifacts)

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

+0

проблема должна быть в разной части кода, поэтому мы не можем помочь без остальной части кода. – furas

+0

BTW: вместо 'center [0]' вы можете использовать 'centerx' – furas

+0

Извините, но мы не можем помочь вам, если вы не внесете свой весь свой код. Нам нужно знать, как разные части взаимодействуют друг с другом, чтобы найти вашу проблему. – Douglas

ответ

0

Я уверен, причина в том, что вы использовали метод (+ = скорость) как для self.player.pos.x, так и для p1.rect.x. Это вызывает множество проблем, так как игрок может двигаться только тогда, когда он не находится в центре (что означает, что когда он находится в центре, он не выходит) и что платформы движутся с той же скоростью и в том же направлении, что и игрок должен быть. Это то, что вызывает эти странные последствия. (вам нужно разделить Vel в полтора раза, в противном случае вы будете двигаться вдвое быстрее !!!)

self.player.pos.x -= self.player.vel.x/2 
if self.player.rect.center[0] != WIDTH/2: 
    for plat in self.platforms: 
     plat.rect.x += self.player.vel.x/2