精灵没有闪电到表面pygame

发布于 2025-01-18 05:19:08 字数 1338 浏览 2 评论 0原文

我正在 pygame 中下棋,但棋子不会为他们而转移到表面上。我该如何解决这个问题?

import pygame
pygame.init()
size = (600,600)
screen = pygame.display.set_mode(size)
pygame.display.set_caption("chess")
clock = pygame.time.Clock()

chessboard = pygame.image.load("chess_board.png")
whitepawn = pygame.image.load("whitepawn.png")
blackpawn = pygame.image.load("blackpawn.png")
class pawn(pygame.sprite.Sprite):
    def __init__(self,colour,x,y):
        self.x = x
        self.y = y
        moved = False
        self.colour = colour
        pygame.sprite.Sprite.__init__(self)
        self.im = pygame.surface.Surface((75,75))

    def showpiece(self):
        if self.colour == "white":
            pygame.Surface.blit(self.im,whitepawn,(self.x,self.y))
        elif self.colour == "black":
            pygame.Surface.blit(self.im,blackpawn,(self.x,self.y))

num1 = 0
pawns = []
for i in range (8):    
    pawns.append(pawn("black",0+num1,75))
    pawns.append(pawn("white",0+num1,450))
    num1 += 75
                
while True:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            pygame.quit()

    screen.blit(chessboard,[0,0])
    for n in range (len(pawns)):
        pawns[n].showpiece()
    
    pygame.display.flip()

    clock.tick(60)

另外,clock.tick 的意义何在?我知道它可以控制 fps,但为什么需要限制呢?

I'm making chess in pygame, but the pieces don't blit onto the surface for them. How could I fix this?

import pygame
pygame.init()
size = (600,600)
screen = pygame.display.set_mode(size)
pygame.display.set_caption("chess")
clock = pygame.time.Clock()

chessboard = pygame.image.load("chess_board.png")
whitepawn = pygame.image.load("whitepawn.png")
blackpawn = pygame.image.load("blackpawn.png")
class pawn(pygame.sprite.Sprite):
    def __init__(self,colour,x,y):
        self.x = x
        self.y = y
        moved = False
        self.colour = colour
        pygame.sprite.Sprite.__init__(self)
        self.im = pygame.surface.Surface((75,75))

    def showpiece(self):
        if self.colour == "white":
            pygame.Surface.blit(self.im,whitepawn,(self.x,self.y))
        elif self.colour == "black":
            pygame.Surface.blit(self.im,blackpawn,(self.x,self.y))

num1 = 0
pawns = []
for i in range (8):    
    pawns.append(pawn("black",0+num1,75))
    pawns.append(pawn("white",0+num1,450))
    num1 += 75
                
while True:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            pygame.quit()

    screen.blit(chessboard,[0,0])
    for n in range (len(pawns)):
        pawns[n].showpiece()
    
    pygame.display.flip()

    clock.tick(60)

Also what is the point in clock.tick? I know it controls fps, but why does that need limiting?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

过期以后 2025-01-25 05:19:08

您必须将精灵blit显示在Surface屏幕)上:

class pawn(pygame.sprite.Sprite):
    # [...]

    def showpiece(self):
        if self.colour == "white":
            screen.blit(whitepawn, (self.x,self.y))
        elif self.colour == "black":
            ecreen.blit(blackpawn, (self.x,self.y))

我建议使用pygame.Rect 存储棋子的位置:

import pygame
pygame.init()
size = (600,600)
screen = pygame.display.set_mode(size)
pygame.display.set_caption("chess")
clock = pygame.time.Clock()

chessboard = pygame.image.load("chess_board.png")
whitepawn = pygame.image.load("whitepawn.png")
blackpawn = pygame.image.load("blackpawn.png")

class pawn(pygame.sprite.Sprite):
    def __init__(self, colour, image, x, y):
        pygame.sprite.Sprite.__init__(self)
        self.colour = colour
        self.image = image
        self.rect = self.image.get_rect(topleft = (x, y))

    def showpiece(self, surf):
        surf.blit(self.image, self.rect)

pawns = []
for i in range(8):    
    pawns.append(pawn("black", blackpawn, i*75, 75))
    pawns.append(pawn("white", whitepawn, i*75, 450))
           
run = True     
while run :
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            run = False  

    screen.blit(chessboard, (0, 0))
    for p in pawns:
        p.showpiece(screen)
    pygame.display.flip()
    clock.tick(60)

pygame.quit()

You have to blit the Sprites on the display Surface (screen):

class pawn(pygame.sprite.Sprite):
    # [...]

    def showpiece(self):
        if self.colour == "white":
            screen.blit(whitepawn, (self.x,self.y))
        elif self.colour == "black":
            ecreen.blit(blackpawn, (self.x,self.y))

I suggest to use pygame.Rect to store the positions of the pieces:

import pygame
pygame.init()
size = (600,600)
screen = pygame.display.set_mode(size)
pygame.display.set_caption("chess")
clock = pygame.time.Clock()

chessboard = pygame.image.load("chess_board.png")
whitepawn = pygame.image.load("whitepawn.png")
blackpawn = pygame.image.load("blackpawn.png")

class pawn(pygame.sprite.Sprite):
    def __init__(self, colour, image, x, y):
        pygame.sprite.Sprite.__init__(self)
        self.colour = colour
        self.image = image
        self.rect = self.image.get_rect(topleft = (x, y))

    def showpiece(self, surf):
        surf.blit(self.image, self.rect)

pawns = []
for i in range(8):    
    pawns.append(pawn("black", blackpawn, i*75, 75))
    pawns.append(pawn("white", whitepawn, i*75, 450))
           
run = True     
while run :
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            run = False  

    screen.blit(chessboard, (0, 0))
    for p in pawns:
        p.showpiece(screen)
    pygame.display.flip()
    clock.tick(60)

pygame.quit()
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文