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

Я пытаюсь скопировать изображение и текст на спрайт, но ничего не появляется.

Если я попытаюсь перетащить его прямо на экран, оно будет работать, но не иначе.

class Button(pygame.sprite.Sprite):
def __init__(self, text, pos, screen, text_size):
    self.text = text
    self.text_size = text_size
    self.pos = pos
    self.width = len(text) * text_size
    self.height = 50
    self.screen = screen
    self.timer = 0
    self.underscore = Underscore((self.pos[0] - self.width / 4.5, self.pos[1] + self.text_size), 5)

    super().__init__()

    self.image = pygame.Surface([self.width, self.height])
    self.rect = self.image.get_rect()
    # self.rect = self.pos

    text_render.render_text(self.text, self.image, self.pos, self.text_size, len(self.text) * 10)


def is_clicked(self):
    mouse = pygame.mouse.get_pos()
    self.timer += 30

    if self.pos[0] - self.width / 4 < mouse[0] < self.pos[0] + self.width / 4 and self.pos[1] < mouse[1] < self.pos[1] + self.height:
        pygame.draw.rect(self.screen, white, [self.pos[0] - self.width / 4.5, self.pos[1] + self.text_size, self.width / 2, 5])
        if pygame.mouse.get_pressed()[0] and self.timer > 100:
            self.timer = -300
            return True
    else:
        pygame.draw.rect(self.screen, black, [self.pos[0] - self.width / 4.5, self.pos[1] + self.text_size, self.width / 2, 5])
        return False
    if self.timer < 0:
        pygame.draw.rect(self.screen, gray, [self.pos[0] - self.width / 4.5, self.pos[1] + self.text_size, self.width / 2, 5])


def update(self):
    self.is_clicked()

Рендеринг текста

def render_text(text, surface, pos, size, box_width):
    font = pygame.font.SysFont('Freshandbold.ttf', size)

    y_val = pos[1]
    for line in string_split(text, size, box_width):
        screen_text = font.render(line, True, white)
        surface.blit(screen_text, (pos[0] - box_width, y_val))
        y_val += font.get_linesize() / 1.5

Он должен вспыхнуть на поверхности спрайта, когда я изменю self.screen на self.image, но это не так, по крайней мере, насколько я вижу.

1 Ответ

0 голосов
/ 23 мая 2019

На самом деле, похоже, что вы рисуете вещи неправильно.

Итак, я предполагаю, что вы используете sprite.Group.draw(), но с этой функцией я обнаружил, что она чрезвычайно привередлива. Поэтому я обычно пишу свое.

В вашем классе (ах) добавьте эту функцию:

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

Затем добавьте этот цикл в свой основной игровой цикл в коде розыгрыша

for sprite in public.all_sprites: # Put your main sprite group here
    sprite.draw() # Call the sprites draw function which will draw them onto the screen directly.

Это должно работать, так как вы технически напрямую бьете каждый спрайт, перебирая всю группу спрайтов.

Что вам нужно сделать в render_text, это вернуть созданную вами поверхность, поэтому в коде:

def render_text(text, surface, pos, size, box_width):
    font = pygame.font.SysFont('Freshandbold.ttf', size)

    y_val = pos[1]
    for line in string_split(text, size, box_width):
        screen_text = font.render(line, True, white)
        surface.blit(screen_text, (pos[0] - box_width, y_val))
        y_val += font.get_linesize() / 1.5

    return surface # Return the surface that was created to the draw function.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...