Tratando de dibujar varias instancias de un objeto sprite en pygame, y el primero se dibuja correctamente pero el próximo show el fondo solo

0

Pregunta

Estoy tratando de hacer una diagonal fila de hexágonos, pero cuando intento dibujar sólo el primero funciona. Aquí está una captura de pantalla de la pygame ventana. No debe ser hexágonos en cada caja negra.

Aquí está el código:

import pygame
from pygame.locals import *
from sys import exit

pygame.init()

screen_width = 800
screen_height = 600
screen = pygame.display.set_mode((screen_width, screen_height), 0, 32)

class Hex(pygame.sprite.Sprite):
    def __init__(self, s_len, op):
        super().__init__()
        x, y = op
        root3 = 1.73205080
        self.color = (125,200,24)
        self.op = op
        self.s_len = s_len
        self.points = [(x + (.5 * s_len), y),
                       (x + (1.5 * s_len), y),
                       (x + (2 * s_len), y + ((root3 / 2) * s_len)),
                       (x + (1.5 * s_len), y + (root3 * s_len)),
                       (x + (.5 * s_len), y + (root3 * s_len)),
                       (x, y + (root3 / 2) * s_len)]

        self.image = pygame.Surface([2 * s_len, root3 * s_len])
        self.image.fill((0,0,0))
        pygame.draw.polygon(self.image, self.color, self.points)

        self.rect = self.image.get_rect()
        self.rect.topleft = (x, y)


hex_group = pygame.sprite.Group()

for i in range(7):
    hex_group.add(Hex(50, (i * 75, i * 86)))


while True:

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

    screen.fill((255,255,255))

    hex_group.draw(screen)

    pygame.display.update()

Creo que el problema debe tener algo que ver con el auto.creación de la imagen en mi Hexagonal constructor de la clase, pero no tienen ni idea de cómo solucionarlo.

pygame python
2021-11-22 05:11:32
1

Mejor respuesta

1

Se dibuja el polígono en la imagen no en la pantalla. La parte superior izquierda de self.image es (0, 0):

self.points = [(.5 * s_len, 0),
               (1.5 * s_len, 0),
               (2 * s_len, (root3 / 2) * s_len),
               (1.5 * s_len, root3 * s_len),
               (.5 * s_len, root3 * s_len),
               (0, (root3 / 2) * s_len)]

Completa ejemplo:

import pygame
from pygame.locals import *
from sys import exit

pygame.init()

screen_width = 800
screen_height = 600
screen = pygame.display.set_mode((screen_width, screen_height), 0, 32)

class Hex(pygame.sprite.Sprite):
    def __init__(self, s_len, op):
        super().__init__()
        x, y = op
        root3 = 1.73205080
        self.color = (125,200,24)
        self.op = op
        self.s_len = s_len
        self.points = [(.5 * s_len, 0),
               (1.5 * s_len, 0),
               (2 * s_len, (root3 / 2) * s_len),
               (1.5 * s_len, root3 * s_len),
               (.5 * s_len, root3 * s_len),
               (0, (root3 / 2) * s_len)]

        self.image = pygame.Surface([2 * s_len, root3 * s_len])
        self.image.fill((0,0,0))
        pygame.draw.polygon(self.image, self.color, self.points)

        self.rect = self.image.get_rect()
        self.rect.topleft = (x, y)


hex_group = pygame.sprite.Group()

for i in range(7):
    hex_group.add(Hex(50, (i * 75, i * 86)))


while True:

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

    screen.fill((255,255,255))

    hex_group.draw(screen)

    pygame.display.update()
2021-11-22 05:33:28

En otros idiomas

Esta página está en otros idiomas

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Slovenský
..................................................................................................................