Как я могу прикрепить изображение к этим прямоугольникам в Pygame? - PullRequest
0 голосов
/ 21 апреля 2019

У меня есть игра, похожая на лягушку, но в настоящее время это только прямоугольники и квадраты.Мне было интересно, есть ли способ просто «закрасить» прямоугольники изображением вместо цвета RGB.

import random
import pygame
from pygame.locals import *

class Rectangle:

    def __init__(self, x, y, w, h):
        self.x = x
        self.y = y
        self.w = w
        self.h = h
class Frog(Rectangle):

    def __init__(self, x, y, w):
        super(Frog, self).__init__(x, y, w, w)
        self.x0 = x
        self.y0 = y
        self.color = (34, 177, 76)
        self.attached = None

    def reset(self):
        self.x = self.x0
        self.y = self.y0
        self.attach(None)

    def move(self, xdir, ydir):
        self.x += xdir * g_vars['grid']
        self.y += ydir * g_vars['grid']

    def attach(self, obstacle): 
        self.attached = obstacle

    def update(self):
        if self.attached is not None:
            self.x += self.attached.speed

        if self.x + self.w > g_vars['width']:
            self.x = g_vars['width'] - self.w

        if self.x < 0:
            self.x = 0
        if self.y + self.h > g_vars['width']:
            self.y = g_vars['width'] - self.w
        if self.y < 0:
            self.y = 0

    def draw(self):
        rect = Rect( [self.x, self.y], [self.w, self.h] )
        pygame.draw.rect( g_vars['window'], self.color, rect )

1 Ответ

0 голосов
/ 21 апреля 2019

Забудьте прямоугольник.Вы не "кожа" прямоугольник.Вы загружаете изображение и рисуете его на экране.

class Frog:

    def __init__(self, x, y, filename):
        self.image = pygame.image.load(filename)
        self.rect = self.sprite.get_rect()
        self.rect.x = x
        self.rect.y = y
        #self.rect.w = w # no need it - rect will use image's width
        #self.rect.h = h # no need it - rect will use image's height

    def draw(self, screen):
        screen.blit(self.image, self.rect)

, если вы используете pygame.sprite.Sprite , тогда вы можете даже пропустить def draw(), потому что оно уже есть

class Frog(pygame.sprite.Sprite):

    def __init__(self, x, y, filename):
        self.image = pygame.image.load(filename)
        self.rect = self.sprite.get_rect()
        self.rect.x = x
        self.rect.y = y
        #self.rect.w = w # no need it - rect will use image's width
        #self.rect.h = h # no need it - rect will use image's height

    #def draw(self, screen):
    #    screen.blit(self.image, self.rect)
    # Sprite already has this method

Теперь вы используете self.rect.x и self.rect.y вместо self.x, self.y, потому что некоторые другие функции используют self.rect для проверки столкновения ( pygame.sprite.collide_rect ()) или нарисуйте все спрайты в группе ( pygame.sprite.Group ).

С помощью self.rect вы также можете назначить x, y центру изображения

    self.rect.centerx = x
    self.rect.centery = y

и он вычислит self.rect.x, self.rect.y

Док: pygame.image.load () , pygame.sprite.Sprite , pygame.sprite.collide_rect () , pygame.sprite.Group

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...