Пигаме:Изменение спрайта в зависимости от направления движения
Вопрос
Я только вчера начал учиться использовать pygame.Я прочитал эту книгу, которая оказалась очень полезной, и следовал всем ее руководствам, примерам и тому подобному.Я хотел попробовать создать действительно простую игру с боковой прокруткой/платформером, но книга довольно быстро перешла к 3D-моделированию, не объясняя, как создавать изменяющиеся спрайты для движения вверх-вниз влево и вправо и как циклически перемещаться по анимационным изображениям.
Я потратил весь день, пытаясь отобразить спрайт и иметь возможность перемещаться вверх-вниз влево и вправо.Но из-за простого скрипта он использует статичное изображение и отказывается меняться.
Может ли кто-нибудь дать мне некоторые знания о том, как изменить спрайты.Или отправить меня на учебник, который это делает?
Все референсы и люди, экспериментировавшие с ними, всегда использовали сгенерированные формы, поэтому я никогда не мог с ними работать.
Любая помощь очень ценится.
Добавлен:Прежде чем выяснить, как разместить сложную анимацию в моей сцене, я хотел бы знать, как я могу заставить моего «плеера» измениться на неподвижные изображения в отношении моего нажатия вверх вниз влево или вправо.может быть, диагональ, если люди знают, что это что-то действительно сложное.
Добавлять:Это то, что я собрал на данный момент. http://animania1.ca/ShowFriends/dev/dirmove.rar будет ли возможность сделать так, чтобы направление/действие устанавливало столбец действия, и чтобы небольшой код настройки столбца также заставлял его циклически опускаться для выполнения анимации?(или это будет грубым упущением в использовании эффективности?)
Решение
Вот глупый пример, который переключается между двумя первыми изображениями таблицы спрайтов при нажатии влево/вправо:
import pygame
quit = False
pygame.init()
display = pygame.display.set_mode((640,480))
sprite_sheet = pygame.image.load('sprite.bmp').convert()
# by default, display the first sprite
image_number = 0
while quit == False:
event = pygame.event.poll()
no_more_events = True if event == pygame.NOEVENT else False
# handle events (update game state)
while no_more_events == False:
if event.type == pygame.QUIT:
quit = True
break
elif event.type == pygame.NOEVENT:
no_more_events = True
elif event.type == pygame.KEYDOWN:
if event.key == pygame.K_LEFT:
image_number = 0
elif event.key == pygame.K_RIGHT:
image_number = 1
event = pygame.event.poll()
if quit == False:
# redraw the screen
display.fill(pygame.Color('white'))
area = pygame.Rect(image_number * 100, 0, 100, 150)
display.blit(sprite_sheet, (0,0), area)
pygame.display.flip()
Я никогда раньше не использовал Pygame, так что, возможно, этот код не стоит брать в качестве примера.Я надеюсь, что это показывает основы, хотя.
Чтобы быть более полным, мне следует подождать некоторое время перед обновлением, например.контролирую, что я обновляюсь только 60 раз в секунду.
Также было бы полезно написать класс спрайтов, который упростил бы вашу работу.Вы должны передать размер кадра спрайта в конструктор, и у вас будут такие методы, как update()
и draw()
который автоматически выполнит работу по выбору следующего кадра, дублированию спрайта и так далее.
Pygame, похоже, предоставляет для этой цели базовый класс: текст ссылки.
Другие советы
чувак, единственное, что тебе нужно сделать, это отклониться от курса
импорт pygame и все другие необходимые вещи Meme it введите код и прочее..........тогда когда дело доходит до вас, делая spri
class .your class nam here. (pygame.sprite.Sprite):
def __init__(self):
pygame.sprite.Sprite.init(self)
self.image=pygame.image.load(your image and path)
self.rect=self.image.get_rect()
x=0
y=0
# any thing else is what you want like posistion and other variables
def update(self):
self.rect.move_ip((x,y))
вот и все!!!!но это еще не конец.если вы сделаете это, вы будете ony сделали спрайт Meme it чтобы переместить его вам нужно
Я мало что знаю о Pygame, но я использовал SDL (на котором основан Pygame).
Если вы используете Surface.blit()
: текст ссылки
Вы можете использовать дополнительный area
Аргумент для выбора части поверхности для рисования.Таким образом, если вы поместите все изображения, являющиеся частью анимации, в один файл, вы сможете выбрать, какое изображение будет отрисовано.Это называется "обрезка".
Я предполагаю, что у вас будет игровой цикл, который будет обновлять состояние игры (при необходимости меняя текущее изображение спрайта), а затем рисовать спрайты, используя их состояние.