Функция Blit не работает, цикл идет быстро? - PullRequest
0 голосов
/ 12 апреля 2019

Эй, я работаю над гравитацией для моего супер Марио Бросса.Я хотел бы плавного движения гравитации. Но мой игрок словно телепортируется с вершины на землю.

Я думал, что это была петля, которая двигалась слишком быстро, и Pygame не мог стереть изображение, но япопытался замедлить цикл с помощью time.sleep () или pygame.time.wait () не работает.В начале это выглядит так: Изображение: до Изображение: через секунду Спасибо за помощь!

def moove(self,keys):     
        if(self.gravity()):
            if keys[pygame.K_LEFT]:
                self.orientation = "Left"
                if not(self.x - vel<0) and not self.collision_with_walls():
                    map.draw()
                    self.rect.x -= vel
                    camera.update(player)
                    self.draw_player()
def gravity(self):
        refresh = 0
        self.collision_with_ground = False
        while not self.collision_with_ground:
            self.rect.y += 1
            blocks_hit_list = pygame.sprite.spritecollide(self,sol_sprites,False)
            if not(blocks_hit_list == []):
                self.collision_with_ground = True
                self.rect.y -= 1
                map.draw()
                player.draw_player()
                return True 
            else:
                map.draw()
                player.draw_player()
                pygame.time.wait(10)

1 Ответ

0 голосов
/ 12 апреля 2019

В вашей строке: while not self.collision_with_ground: вы гарантируете, что не покинете этот цикл, пока ваш игрок не достигнет земли.Вы никогда не будете мигать (который находится вне этого цикла), пока этот цикл не был оставлен.Попробуйте if вместо while и переместите другие функции за пределы этого цикла (вам, вероятно, следует исключить их из этой функции):

def gravity(self):
        refresh = 0
        self.collision_with_ground = False
        if not self.collision_with_ground:
            self.rect.y += 1
            blocks_hit_list = pygame.sprite.spritecollide(self,sol_sprites,False)
            if not(blocks_hit_list == []):
                self.collision_with_ground = True
                self.rect.y -= 1
                map.draw()
                player.draw_player()
                return True 

        map.draw()
        player.draw_player()
        pygame.time.wait(10)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...