Nano Hash - криптовалюты, майнинг, программирование

Pygame: неверная позиция назначения для blit

Во-первых, позвольте мне предварить это, сказав, что я новичок в Python, сделал всего несколько программ, поэтому этот код, вероятно, выглядит очень запутанным. Я пытаюсь познакомиться с pygame, сделав небольшую игру pacman в подарок члену семьи с моими собаками в качестве игрока и призраков. У меня возникли проблемы с переносом изображения на прямоугольник, вызываемый rocky.draw() в основном цикле (имя моей собаки - скалистый). Я пробовал несколько решений. Первым из них является удаление метода рисования в классе Rocky и использование вместо него get.rect() для создания прямоугольника. Однако это просто приводит к тому, что прямое отображение не отображается, а просто появляется гигантская увеличенная версия изображения, отображаемая на большей части экрана. Итак, я снова перешел к использованию rocky.draw() и попытался вставить изображение в прямоугольник. Но я продолжаю получать ошибку типа: неверная позиция назначения для blit. Я знаю, что, скорее всего, упускаю что-то глупое или что-то неправильно понимаю. Любой вклад приветствуется. Спасибо!

Вот код:

    import pygame

    pygame.init()

    x = 50
    y = 50
    width = 40
    height = 60
    vel = 5

    pygame.display.set_caption("Rock-Man")

    clock = pygame.time.Clock()

    surface = pygame.display.set_mode((500, 500))

    color = (255, 0, 0)

    rockimg = pygame.image.load('rocky1.png')

    rockimg.convert()


    class Entity:

       def __init__(self, x, y):
            self.x = x
            self.y = y


    class Rocky(Entity):
        def __init__(self):
            Entity.__init__(self, x, y)
            self.x = 0
            self.y = 0
            self.tile_size = 30

        def draw(self):
            pygame.draw.rect(surface, color, (x, y, width, height))


    rocky = Rocky()

    run = True
    while run:
        pygame.time.delay(100)

        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                run = False

        keys = pygame.key.get_pressed()
        if keys[pygame.K_LEFT]:
            x -= vel
        if keys[pygame.K_RIGHT]:
            x += vel
        if keys[pygame.K_UP]:
            y -= vel
        if keys[pygame.K_DOWN]:
            y += vel

        surface.fill((0, 0, 0))
        rocky.draw()
        surface.blit(rockimg, rocky)

        pygame.display.flip()
        pygame.display.update()

    pygame.quit()
10.02.2021

Ответы:


1

Вам нужно указать surface.blit пункт назначения на экране. Аргументы, передаваемые для функции blit:

blit(source, dest, area=None, special_flags=0)

Вы пытаетесь указать тип Rocky() в качестве аргумента dest (назначение кортежа).

Я не уверен в ваших намерениях, но чтобы нарисовать rockimg, вам нужно указать его координаты.

Вот пример для справки:

surface.blit(rockimg, (250, 250))
10.02.2021
Новые материалы

Кластеризация: более глубокий взгляд
Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

Как написать эффективное резюме
Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

Частный метод Python: улучшение инкапсуляции и безопасности
Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

Как я автоматизирую тестирование с помощью Jest
Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..