python如何反转“窗口.blit“在pygame中,或者删除一个对象(精灵)我疯了

2024-09-30 10:32:14 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图删除一个精灵每当我点击它,然而,我不能得到原来的项目从屏幕上。似乎一旦我渲染,或者“画”到那里,它就永远留在那里。我如何更改下面的代码,以消除在类中单击后产生的“blit”?在

import pygame

pygame.init()

window = pygame.display.set_mode((1152,720))

background = pygame.image.load("images/emptyroom.jpg")
image=pygame.image.load("images/smallkey.png")
b = window.blit(pygame.image.load("images/emptyroom.jpg"), (0,0))
spritestay = True

# d = window.blit(pygame.image.load("images/leglamp.png"), (15,500))

class HiddenObject(pygame.sprite.Sprite):
    def __init__(self):
        pygame.sprite.Sprite.__init__(self)

        self.i1 = pygame.image.load("images/smallkey.png")
        self.i2 = pygame.image.load("images/Clear.png")
        self.rect=self.i1.get_rect()

    def draw(self, x, y):
        while spritestay == True:
            d = window.blit(self.i1, (x,y))
#d.collidepoint(pygame.mouse.get_pos())
        while spritestay == False:
            d = window.blit(self.i1, (x,y))

pygame.display.set_caption("Eye Spy Game Test")

gameLoop = True

while gameLoop:
    for event in pygame.event.get():
        if event.type == pygame.MOUSEBUTTONDOWN:
            spritestay = False

        if event.type == pygame.MOUSEBUTTONUP:
            spritestay = True

        if (event.type==pygame.QUIT):
            gameLoop=False

    yotestvar = HiddenObject()
    d = yotestvar.draw(100,100)


    pygame.display.flip()

pygame.quit()

Tags: imageselfeventtruegetpnginitdisplay
2条回答

在pygame中,一旦你快速进入屏幕,你就不能简单地删除选中的对象。取而代之的是,每次绘图后必须清除屏幕,然后绘制新的更新对象。例如,如果你要做更多的东西,你必须先画出来,然后删除它,轻轻地移动它,再画出来,然后再擦除它,依此类推。在

因此,建议您在每次循环while循环时在结束时清除屏幕。对于您的案例,它看起来如下所示:

yotestvar = HiddenObject()

while gameLoop:
    window.fill((255, 255, 255)) # (255, 255, 255) RGB value for WHITE
    for event in pygame.event.get():
        if event.type == pygame.MOUSEBUTTONDOWN:
            spritestay = False

        if event.type == pygame.MOUSEBUTTONUP:
            spritestay = True

        if (event.type==pygame.QUIT):
            gameLoop=False

    yotestvar.draw(100,100)
    pygame.display.update()

pygame.quit()

你的代码有很多问题。在

Blitting不应该在主循环之前完成。在

如果隐藏的对象改变它的位置会更好。通过在构造函数中添加一个位置来更改它,并在draw方法中使用它。在

def __init__(self,pos):
    ...
    self.pos = pos

def draw(self):
    window.blit(self.i1, self.pos)

你的画法永远不会结束。您需要用if语句替换while语句。当spritestay为False时,也不会绘制第二个图像。我猜你是想闪电清除.png. 在

^{pr2}$

如果清除.png只是一个空的图像,根本没有任何意义。所以这就变成了:

^{3}$

您不从draw函数返回任何内容,因此

d = yotestvar.draw(100,100)

d是无。你在任何地方都不用d,所以你可以删除它。在

在每一帧上创建HiddenObject。我认为在循环之前移动它会更好。在

最后一个问题是你没有用任何颜色填充屏幕。这可能是你一直在纠结的真正问题。下面是blitting的工作原理。在

你是个画家,你面前是一幅画布。如果你拿着你的画笔画东西,你怎么能摆脱它?唯一的办法就是在上面画些东西。 在pygame中,我们使用fill方法来填充一个具有特定颜色的整个曲面。在

screen.fill((0,0,0)) # fills screen with black color

因此,为了在屏幕上显示某些内容,您需要调用screen.fill,然后绘制任何其他您希望看到的对象。在

相关问题 更多 >

    热门问题