python - pygame 意外显示的曲面

标签 python pygame

我正在制作一个蛇游戏,到目前为止大部分进展顺利,但它在左上角显示了一 block 我无法摆脱的蛇。 我检查了一下我没有在那里绘制表面(0,0)。我被困住了。请大家帮帮我,谢谢!!

<小时/>

顺便说一句,这是我第一次提出问题,所以对此的任何建议也表示赞赏。

<小时/>

编辑:我发现使用常规类而不是 Sprite 解决了问题,但我需要 Sprite 中的碰撞和其他功能。

import pygame

class snake(pygame.sprite.Sprite):
    speed=5
    init_length=10
    direction=0
    x=[]
    y=[]
    updateCountMax = 2
    updateCount = 0
    length=10
#    image=pygame.Surface((11,11)).convert().fill((0,128,255))
    def __init__(self,init_x,init_y,image,screen):
        pygame.sprite.Sprite.__init__(self)

        for i in range(0,self.init_length):
            self.x.append(init_x)
            self.y.append(init_y)
#        for i in range(0,self.length):
#            print(f"{self.x[i]},{self.y[i]}")
        for x in self.x:
            print(x)
        for y in self.y:
            print(y)
        self.image=image
        self.screen=screen
        self.rect=self.image.get_rect()
#        self.rect.center=(self.x,self.y)

    def move_R(self):
#        self.x+=self.speed
        self.direction=0
    def move_L(self):
#        self.x-=self.speed
        self.direction=1
    def move_U(self):
#        self.y-=self.speed
        self.direction=2
    def move_D(self):
#        self.y+=self.speed
        self.direction=3

    def update(self):
#        self.updateCount = self.updateCount + 1
#        if self.updateCount < self.updateCountMax:
        for i in range(self.length-1,0,-1):
#                print("self.x[" + str(i) + "] = self.x[" + str(i-1) + "]")
            self.x[i] = self.x[i-1]
            self.y[i] = self.y[i-1]

        if(self.direction==0):
            self.x[0]+=self.speed
        elif(self.direction==1):
            self.x[0]-=self.speed
        elif(self.direction==2):
            self.y[0]-=self.speed
        elif(self.direction==3):
            self.y[0]+=self.speed
#        self.rect.center=(self.x,self.y)
#        self.updateCount = 0
#        for i in range(0,self.length):
#            print(f"{self.x[i]},{self.y[i]}")
        self.draw()

    def draw(self):
        for i in range(0,self.length):
            self.screen.blit(self.image,(self.x[i],self.y[i]))
#            print(f"rendered at {self.x[i]},{self.y[i]}")
#            self.rect.center=(self.x[i],self.y[i])

class app:
    width=1200
    height=900
    title="Snake"
    done=False

    def __init__(self):
        pygame.init()
        self.image=pygame.Surface((11,11))
        self.image.fill((0,128,255))
        pygame.display.set_caption(self.title)
        self.screen = pygame.display.set_mode((self.width, self.height))
        self.screen.fill((0,0,0))
        self.clock=pygame.time.Clock()
        self.snakes=pygame.sprite.Group()
        self.player1=snake(500,10,self.image,self.screen)
        self.snakes.add(self.player1)
        self.background = pygame.Surface(self.screen.get_size())
        self.background = self.background.convert()
        self.background.fill((255,255,255))

    def loop(self):
        while(not self.done):
            for event in pygame.event.get():
                        if event.type == pygame.QUIT:
                                self.done = True
            pygame.event.pump()
            keys = pygame.key.get_pressed()

            if (keys[pygame.K_RIGHT]):
                self.player1.move_R()

            if (keys[pygame.K_LEFT]):
                self.player1.move_L()

            if (keys[pygame.K_UP]):
                self.player1.move_U()

            if (keys[pygame.K_DOWN]):
                self.player1.move_D()

            if (keys[pygame.K_ESCAPE]):
                self.done = True
            self.screen.blit(self.background,(0,0))
            self.screen.fill((0,0,0))
            self.player1.update()
            self.snakes.draw(self.screen)
            pygame.display.update()
            self.clock.tick(60)
        pygame.quit()

if __name__ == "__main__" :
    theApp = app()
    theApp.loop()

最佳答案

player1 添加到 snakes Sprite 组中,并使用 self.snakes.draw(self.screen) 绘制它。不过,您在最后一行的self.player1.update()中绘制玩家。

删除self.snakes.draw(self.screen)以摆脱幻影蛇。

顺便说一句:您创建并设置了一个 self.background 但您立即用 self.screen.fill((0,0,0)) 覆盖它,所以您根本不需要背景。

关于python - pygame 意外显示的曲面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53118342/

相关文章:

python - Flask 中的简单例份验证在 Apache 下不起作用

python - 如何在 unittest.TestCase 中访问 unittest.main(verbosity) 设置

python - 按列分组的分数

python - 在nvidia cuda docker中运行python脚本

python - 如何在pygame中显示图像?

python - 用户需要移动鼠标来发射子弹

python - 1_000 和 100_000 是什么意思?

python - Pygame - 在给定区域随机生成对象

python - 无法在 Android 上的 pygame 中打开图像

python - 权限错误 : [Errno 13] Permission denied: 'file.mp3'