Как исправить анимацию прыжка в pygame? [дубликат]Python

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Как исправить анимацию прыжка в pygame? [дубликат]

Сообщение Anonymous »


Я относительно новичок в Python и использую pygame для создания игры в стиле smash-bros/streetfighter. Я нахожусь на ранних стадиях разработки и пытаюсь создать анимацию прыжка для персонажа, чтобы персонаж выглядел так, как будто он действительно совершает прыжковые движения, однако, что бы я ни пытался, анимация не будет воспроизводиться и показывать только неподвижное изображение, которое сводит меня с ума!

Извините, что не написал то, что пробовал, поскольку я перепробовал очень много вещей, поэтому не смогу разместить их все здесь. Вот код, и я показал предполагаемую проблемную область вместе с номерами строк внизу сообщения. Любая помощь будет принята с благодарностью.
импортировать pygame из импорта pygame.locals * pygame.init() часы = pygame.time.Clock() кадры в секунду = 60 ширина_экрана = 1000 screen_height = 600 экран = pygame.display.set_mode((ширина_экрана, высота_экрана)) pygame.display.set_caption("Baet_Prototype") tile_size = 100 bg = pygame.image.load("imgs/bg.png") bg_img = pygame.transform.scale(bg, (screen_width, screen_height)) класс Player1(): def __init__(self, x, y): self.player1_walk_images_r = [] self.player1_walk_images_l = [] self.player1_idle_images_r = [] self.player1_idle_images_l = [] self.player1_jump_images_r = [] self.player1_jump_images_l = [] self.index = 0 self.walk_ani_counter = 0 self.idle_ani_counter = 0 self.jump_ani_counter = 0 self.jump_counter = 0 для числа в диапазоне (1, 4): player1_jump_image_right = pygame.image.load(f"imgs/Player_1/Jump_Ani{num}.png") player1_jump_image_right = pygame.transform.scale(player1_jump_image_right, (86, 128)) player1_jump_image_left = pygame.transform.flip(player1_jump_image_right, True, False) self.player1_jump_images_r.append(player1_jump_image_right) self.player1_jump_images_l.append(player1_jump_image_left) для числа в диапазоне (1, 5): player1_idle_image_right = pygame.image.load(f"imgs/Player_1/Idle_Ani{num}.png") player1_idle_image_right = pygame.transform.scale(player1_idle_image_right, (86, 128)) player1_idle_image_left = pygame.transform.flip(player1_idle_image_right, True, False) self.player1_idle_images_r.append(player1_idle_image_right) self.player1_idle_images_l.append(player1_idle_image_left) для числа в диапазоне (1, 9): player1_walk_image_right = pygame.image.load(f"imgs/Player_1/Walk_Ani{num}.png") player1_walk_image_right = pygame.transform.scale(player1_walk_image_right, (86, 128)) player1_walk_image_left = pygame.transform.flip(player1_walk_image_right, True, False) self.player1_walk_images_r.append(player1_walk_image_right) self.player1_walk_images_l.append(player1_walk_image_left) self.image = self.player1_idle_images_r[self.index] self.rect = self.image.get_rect() self.rect.x = x self.rect.y = y self.width = self.image.get_width() self.height = self.image.get_height() self.vel_y = 0 self.jumped = Ложь само.направление = 0 обновление защиты (сам): дх = 0 ды = 0 время восстановления = 5 ключ = pygame.key.get_pressed() if key[pygame.K_w] == True и self.jumped == False и self.jump_counter < 1: self.vel_y = -15 self.jumped = Истина self.jump_counter += 1 self.jump_ani_counter += 1 если self.jump_ani_counter > время восстановления: self.jump_ani_counter = 0 self.index += 1 если self.index >= len(self.player1_jump_images_r): self.index = 0 если self.direction == 1: self.image = self.player1_jump_images_r[self.index] если само.направление == -1: self.image = self.player1_jump_images_l[self.index] если ключ[pygame.K_w] == Ложь: self.jumped = Ложь if key[pygame.K_w] == True и self.jumped == False и self.jump_counter > 1: self.vel_y = 0 if key[pygame.K_a] == True и key[pygame.K_d] == False: дх -= 5 self.walk_ani_counter += 1 само.направление = -1 if key[pygame.K_a] == False и key[pygame.K_d] == True: дх += 5 self.walk_ani_counter += 1 само.направление = 1 if key[pygame.K_a] == False и key[pygame.K_d] == False: self.idle_ani_counter += 1 если self.idle_ani_counter > время восстановления: self.idle_ani_counter = 0 self.index += 1 если self.index >= len(self.player1_idle_images_r): self.index = 0 если self.direction == 1: self.image = self.player1_idle_images_r[self.index] если само.направление == -1: self.image = self.player1_idle_images_l[self.index] if key[pygame.K_a] == True и key[pygame.K_d] == True: self.idle_ani_counter += 1 если self.idle_ani_counter > остывать: self.idle_ani_counter = 0 self.index += 1 если self.index >= len(self.player1_idle_images_r): self.index = 0 если self.direction == 1: self.image = self.player1_idle_images_r[self.index] если само.направление == -1: self.image = self.player1_idle_images_l[self.index] если self.walk_ani_counter > время восстановления: self.walk_ani_counter = 0 self.index += 1 если self.index >= len(self.player1_walk_images_r): self.index = 0 если self.direction == 1: self.image = self.player1_walk_images_r[self.index] если само.направление == -1: self.image = self.player1_walk_images_l[self.index] self.vel_y += 1 если self.vel_y > 10: self.vel_y = 10 dy += self.vel_y для плитки в world.tile_list: if tile[1].colliderect(self.rect.x, self.rect.y + dy, self.width, self.height): self.jump_counter = 0 если self.vel_y < 0: dy = tile[1].bottom - self.rect.top если self.vel_y >= 0: dy = tile[1].top - self.rect.bottom self.rect.x += dx self.rect.y += dy если self.rect.bottom > screen_height: self.rect.bottom = высота_экрана ды = 0 screen.blit(self.image, self.rect) класс Мир(): def __init__(сам, данные): self.tile_list = [] wall_img = pygame.image.load("imgs/wall.png") Floor_img = pygame.image.load("imgs/floor.png") количество строк = 0 для строки в данных: количество_столбцов = 0 для плитки в ряду: если плитка == 1: img = pygame.transform.scale(wall_img, (tile_size, tile_size)) img_rect = img.get_rect() img_rect.x = количество_столбцов * размер_тайла img_rect.y = количество строк * размер_плитки плитка = (img, img_rect) self.tile_list.append(плитка) если плитка == 2: img = pygame.transform.scale(floor_img, (tile_size, tile_size)) img_rect = img.get_rect() img_rect.x = количество_столбцов * размер_тайла img_rect.y = количество строк * размер_плитки плитка = (img, img_rect) self.tile_list.append(плитка) количество_столбцов += 1 число_строек += 1 защита ничья (сам): для плитки в self.tile_list: screen.blit(плитка[0], плитка[1]) мировые_данные = [ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [2, 2, 2, 2, 2, 2, 2, 2, 2, 2], [1, 1, 1, 1, 1, 1, 1, 1, 1, 1] ] player1 = Player1(100, screen_height - 428) мир = Мир (world_data) запустить = Истина во время запуска == Истина: часы.тик(кадров в секунду) screen.blit(bg_img, (0, 0)) мир.draw() игрок1.обновление() для события в pygame.event.get(): если event.type == pygame.QUIT: запустить = Ложь pygame.display.update() pygame.quit() 70 if key[pygame.K_w] == True и self.jumped == False и self.jump_counter < 1: 71 self.vel_y = -15 72 самостоятельный прыжок = Верно 73 self.jump_counter += 1 74 self.jump_ani_counter += 1 75, если self.jump_ani_counter > время восстановления: 76 self.jump_ani_counter = 0 77 self.index += 1 78, если self.index >= len(self.player1_jump_images_r): 79 само.индекс = 0 80, если само.направление == 1: 81 self.image = self.player1_jump_images_r[self.index] 82, если само.направление == -1: 83 self.image = self.player1_jump_images_l[self.index] '''
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»