尝试在 pygame 中绘制一个 sprite 对象的多个实例,第一个绘制正确但下一个仅显示背景
Trying to draw multiple instances of a sprite object in pygame, and the first one draws correctly but the next show the background only
我正在尝试制作对角线的六边形行,但是当我尝试绘制它们时,只有第一个有效。 Here's a screenshot of the pygame window.每个黑盒子里都应该有六边形。
代码如下:
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()
我认为这个问题一定与我的 Hex class 构造函数中的 self.image 创建有关,但不知道如何解决它。
您是在图像上而非屏幕上绘制多边形。 self.image
的左上角是(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)]
完整示例:
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()
我正在尝试制作对角线的六边形行,但是当我尝试绘制它们时,只有第一个有效。 Here's a screenshot of the pygame window.每个黑盒子里都应该有六边形。
代码如下:
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()
我认为这个问题一定与我的 Hex class 构造函数中的 self.image 创建有关,但不知道如何解决它。
您是在图像上而非屏幕上绘制多边形。 self.image
的左上角是(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)]
完整示例:
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()