Пигаме:Изменение спрайта в зависимости от направления движения

StackOverflow https://stackoverflow.com/questions/733916

  •  06-09-2019
  •  | 
  •  

Вопрос

Я только вчера начал учиться использовать 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 Аргумент для выбора части поверхности для рисования.Таким образом, если вы поместите все изображения, являющиеся частью анимации, в один файл, вы сможете выбрать, какое изображение будет отрисовано.Это называется "обрезка".

Я предполагаю, что у вас будет игровой цикл, который будет обновлять состояние игры (при необходимости меняя текущее изображение спрайта), а затем рисовать спрайты, используя их состояние.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top