Python

Программирование на питон

Реализовать в графическом окне анимацию персонажа при движении влево-вправо. В состоянии покоя должен отображаться обычный спрайт, а при движении происходить смена спрайтов для анимации использовать библиотеку arcade.
 import arcade 
import os

# Установим константы для окна, и количества кадров анимации
SCREEN_WIDTH = 800
SCREEN_HEIGHT = 600
SPRITE_SCALING = 0.5
MOVEMENT_SPEED = 5
FRAMES_PER_TEXTURE = 5 # сколько кадров будет показан один спрайт

class MyGame(arcade.Window):
def __init__(self, width, height):
super().__init__(width, height)

# Установите работу в текущую директорию
file_path = os.path.dirname(os.path.abspath(__file__))
os.chdir(file_path)

# Переменная, которая будет держать вашего персонажа
self.player_sprite = None
self.player_list = None

def setup(self):
''' Загрузите здесь ваши спрайты'''
self.player_list = arcade.SpriteList()

# Загрузка текстур персонажа
self.player_stand_texture = arcade.load_texture("/path/to/idle_texture.png")
self.player_walk_textures = [
arcade.load_texture("/path/to/walk_texture_1.png"),
arcade.load_texture("/path/to/walk_texture_2.png"),
arcade.load_texture("/path/to/walk_texture_3.png"),
]

# Создадим спрайт игрока
self.player_sprite = arcade.Sprite()
self.player_sprite.center_x = 50
self.player_sprite.center_y = 50
self.player_sprite.texture = self.player_stand_texture
self.player_list.append(self.player_sprite)

self.texture_change_distance = 0 # переменная для отслеживания смены текстуры

def on_draw(self):
''' Рендерим спрайты здесь '''
arcade.start_render()
self.player_list.draw()

def update(self, delta_time):
''' Движение и игровая логика'''

# Проверяем, движется ли спрайт
if self.player_sprite.change_x == 0:
# Если нет, то спрайт в режиме покоя
self.player_sprite.texture = self.player_stand_texture
else:
# Считаем расстояние, которое "прошел" персонаж
self.texture_change_distance += self.player_sprite.change_x
# Смотрим, пора ли сменить анимацию (текстуру) персонажа
if abs(self.texture_change_distance) > FRAMES_PER_TEXTURE:
self.texture_change_distance = 0
self.cur_texture = (self.cur_texture + 1) % len(self.player_walk_textures)
self.player_sprite.texture = self.player_walk_textures[self.cur_texture]

self.player_list.update()

def on_key_press(self, key, modifiers):
'''Вызывается при нажатии клавиши'''
if key == arcade.key.LEFT:
self.player_sprite.change_x = -MOVEMENT_SPEED
elif key == arcade.key.RIGHT:
self.player_sprite.change_x = MOVEMENT_SPEED

def on_key_release(self, key, modifiers):
'''Вызывается при отпускании клавиши'''
if key == arcade.key.LEFT or key == arcade.key.RIGHT:
self.player_sprite.change_x = 0

if __name__ == "__main__":
game = MyGame(SCREEN_WIDTH, SCREEN_HEIGHT)
game.setup()
arcade.run()
Обратите внимание, что вам нужно заменить "/path/to/idle_texture.png" и "/path/to/walk_texture_n.png" на реальные пути к вашим файлам с изображениями. Файл idle_texture.png - это текстура вашего персонажа в состоянии покоя. Файлы walk_texture_n.png - это текстуры, которые будут чередоваться при движении для создания анимации.
Олег Денисов
Олег Денисов
25 860
Лучший ответ
Для реализации анимации персонажа при движении влево-вправо в графическом окне на языке Python с использованием библиотеки Arcade, можно использовать следующую строку кода:

import arcade

Данная строка импортирует библиотеку Arcade, которая предоставляет функции и классы для создания игр и графических приложений.
Viktor Sorokin
Viktor Sorokin
650