Читатели като вас помагат в подкрепа на MUO. Когато правите покупка чрез връзки на нашия сайт, ние може да спечелим комисионна за партньор. Прочетете още.

Ако сте разработчик на игри, използвайки библиотеката на Pygame, вероятно сте попадали на класа Sprite. Класът Sprite е мощен инструмент за създаване на игрови герои, които можете лесно да местите, завъртате и мащабирате на екрана.

С проста програма на Python можете да научите за процеса на създаване на игрови герои, базирани на спрайтове в Pygame. Разберете как да създадете основен клас Sprite, след което добавете атрибути и методи за контрол на поведението.

Въведение в класа Sprite на Pygame

Класът Sprite в Pygame е контейнерен клас, който съдържа всички атрибути и поведение на герой в играта. Произлиза от класа Surface на Pygame, който представлява изображение с фиксирана ширина и височина.

За да работите с него, ще трябва да създадете нов клас, който наследява класа Sprite, и да дефинирате всички атрибути и методи, които искате да има вашият герой в играта.

instagram viewer

Създаване на основен клас спрайт за игрови персонаж

първо, инсталирайте модула pygame с помощта на pip. Направете го с тази команда:

пип Инсталирай pygame

За да създадете основен спрайт, ще трябва да импортирате класа Sprite от Pygame и да създадете нов клас, който го наследява. След това можете да дефинирате всички атрибути и методи, които искате да притежава вашият герой в играта.

Например, може да искате да създадете клас Sprite за персонаж на играч, който може да се движи наляво и надясно по екрана. За да направите това, можете да дефинирате следните атрибути:

  • позиция: Кортеж, който съдържа координатите x и y на спрайта на екрана.
  • скорост: Кортеж, който съдържа скоростта, с която спрайтът се движи хоризонтално и вертикално.

И следните методи:

  • актуализация(): Метод, който актуализира позицията на спрайта въз основа на неговата скорост.
  • рисувам(): Метод, който рисува спрайта на екрана.

Ето пример за основен клас Sprite, който прилага тези атрибути и методи:

импортиране pygame

класИграч(pygame.sprite. спрайт):
деф__в него__(self, x, y, velocity_x, velocity_y):
супер().__в него__()
себе си.позиция = (x, y)
себе си.velocity = (скорост_x, скорост_y)

дефактуализация(себе си):
себе си.позиция = (себе си.позиция[0] + себе си.velocity[0], себе си.позиция[1] + себе си.velocity[1])

дефрисувам(самостоятелно, повърхност):
pygame.рисувам.кръг(повърхност, (255, 0, 0), себе си.позиция, 10)

Методът __init__ е специален метод в класовете на Python който се изпълнява, когато създадете екземпляр на класа. Можете да го използвате за инициализиране на атрибутите на екземпляра.

В този код методът __init__ на класа Player приема четири аргумента: x, y, velocity_x и velocity_y. Тези аргументи задават началната позиция и скорост на спрайта на играча.

Методът __init__ също извиква метода super().__init__(), който е методът __init__ на родителския клас Sprite. Това е необходимо, защото класът Player е подклас на класа Sprite и методът __init__ на класа Sprite настройва някои атрибути, от които се нуждаят всички спрайтове.

Добавяне на атрибути и методи за контрол на поведението

Сега, след като имате основен клас Sprite, можете да добавяте атрибути и методи за контрол на поведението на вашия герой в играта. Това може да включва неща като движение, атака, скачане и др.

За да добавите тези атрибути и методи, ще трябва да помислите какви действия искате вашата игра характер, който да можете да изпълнявате, и дефинирайте съответните атрибути и методи във вашия Sprite клас.

Например, може да искате да добавите метод за контрол на движението на спрайта, като например метод move_left(), който намалява скоростта на спрайта по оста x.

Ето пример за модифициран клас Sprite, който включва тези допълнителни атрибути и методи:

класИграч(pygame.sprite. спрайт):
деф__в него__(self, x, y, velocity_x, velocity_y):
супер().__в него__()
себе си.позиция = (x, y)
себе си.velocity = (скорост_x, скорост_y)

дефактуализация(себе си):
себе си.позиция = (себе си.позиция[0] + себе си.velocity[0], себе си.позиция[1] + себе си.velocity[1])

дефрисувам(самостоятелно, повърхност):
pygame.рисувам.кръг(повърхност, (255, 0, 0), себе си.позиция, 10)

дефмръдни на ляво(себе си):
себе си.velocity = (-1, себе си.velocity[1])

дефпремести се надясно(себе си):
себе си.velocity = (1, себе си.velocity[1])

За да използвате класа Player във вашата игра на Pygame, ще трябва да създадете екземпляр на класа и да извикате неговите методи, ако е необходимо.

Започнете, като създадете прозорец и екземпляр на спрайта на Player:

# Инициализирайте Pygame
pygame.init()

# Задайте размера на прозореца
размер на прозореца = (640, 480)

# Създаване на прозорец
прозорец = pygame.display.set_mode (размер на прозореца)

# Създайте спрайт на играч
играч = играч(320, 240, 0, 0)

След това дефинирайте основен цикъл на играта, който обработва събития и актуализации на клавиатурата и рисува спрайта. Когато натиснете клавишите със стрелки наляво или надясно, спрайтът ще се движи в съответната посока.

# Основен цикъл на играта
докатоВярно:
# Обработвайте събития
за събитие в pygame.event.get():
ако event.type == pygame. ИЗХОД:
pygame.quit()
sys.exit()

ако event.type == pygame. KEYDOWN:
ако event.key == pygame. K_НАЛЯВО:
player.move_left()
елиф event.key == pygame. K_RIGHT:
player.move_right()

# Актуализирайте спрайта на играча
player.update()

# Изчистете прозореца
window.fill((255, 255, 255))

# Начертайте спрайта на играча
player.draw (прозорец)

# Актуализирайте дисплея
pygame.display.update()

С получената програма ще можете да контролирате спрайта на играча и да го наблюдавате как се рисува на екрана на различни позиции:

Зареждане и показване на спрайт графики с помощта на модула за изображения

Сега, когато имате основен клас Sprite с атрибути и методи за контрол на поведението, вероятно ще искате да добавите някои графики към вашия спрайт. Модулът за изображения на Pygame улеснява зареждането и показването на изображения на екрана.

За да заредите изображение, ще трябва да използвате функцията pygame.image.load(), която приема път към файла като аргумент и връща Surface обект. След това можете да присвоите този повърхностен обект на атрибут на спрайт, като self.image, който можете да използвате, за да нарисувате спрайта на екрана.

Например, ето как можете да заредите изображение и да го присвоите на спрайт:

импортиране pygame

класИграч(pygame.sprite. спрайт):
деф__в него__(self, x, y, velocity_x, velocity_y, image_path):
супер().__в него__()
себе си.позиция = (x, y)
себе си.velocity = (скорост_x, скорост_y)
себе си.image = pygame.image.load (image_path)

дефактуализация(себе си):
себе си.позиция = (себе си.позиция[0] + себе си.velocity[0], себе си.позиция[1] + себе си.velocity[1])

дефрисувам(самостоятелно, повърхност):
повърхност.блит(себе си.изображение, себе си.позиция)

дефмръдни на ляво(себе си):
себе си.velocity = (-1, себе си.velocity[1])

дефпремести се надясно(себе си):
себе си.velocity = (1, себе си.velocity[1])

Този код дефинира клас Player, който разширява класа Sprite на Pygame и включва атрибути за позиция, скорост и изображение, както и методи за актуализиране на позицията на спрайта, изчертаване на спрайта на екрана и контролиране движение.

Можете да проверите това GitHub repo за пълния код!

Подобрете управлението на Sprite с класа Sprite

Класът Sprite предоставя удобен контейнер за всички атрибути и поведение на герой в играта, което улеснява актуализирането, рисуването и контрола на спрайта на екрана.

Като внедрите клас Sprite във вашата игра на Pygame, можете да подобрите цялостното изживяване за вашите играчи и да рационализирате процеса на разработка за себе си.