gpt4 book ai didi

python - 为什么 PyGame 会拖拽图像?

转载 作者:行者123 更新时间:2023-12-01 05:49:08 24 4
gpt4 key购买 nike

我正在尝试使用 pygame 和 IDLE 在 python 中开发一个简单的游戏。从昨天开始,我浏览了各种资源以了解该语言(以及一般的编程),尽管如此,我还是遇到了一些问题和对其工作原理的误解。因此,如果有人可以建议我如何继续(或为我指出一些好的学习 Material 的方向),那么我将不胜感激。

到目前为止,我已经有了一小段代码,它们构成了我的游戏想法的基础,因此我将其发布在这里并列出我的一些问题。

import pygame

def main():


pygame.init()


logo = pygame.image.load("coolblack.jpg")
pygame.display.set_icon(logo)
pygame.display.set_caption("Battleship")


screenWidth = 800
screenHeight = 600
screen = pygame.display.set_mode((screenWidth, screenHeight))


bgd_image = pygame.image.load("grid.png")
#--------------------------------------------------------------------
#the image named 'image' should be above 'bgd_image' but below 'cv9'
#in fact, everything should be above bgd_image, especially 'cv9'
#--------------------------------------------------------------------
image = pygame.image.load("coolblack.jpg")
cv9 = pygame.image.load("ussessexcv9.gif").convert_alpha()


xposCv9 = 400
yposCv9 = 510


step_xCv9 = 1
step_yCv9 = 1


screen.blit(bgd_image, (0,0))
screen.blit(image, (400,300))
screen.blit(cv9, (xposCv9, yposCv9))


pygame.display.flip()
clock = pygame.time.Clock()
running = True

#---------------------------------------------
#I've got a pretty good idea (sort of) about
#what is happening in the section
#below this point, however it seems that
#the image 'cv9' creates a trail of itself
#every time it moves, so how could I make it
#so that it doesn't do so?
#---------------------------------------------
while running:

for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
if event.type == pygame.KEYDOWN and event.key == pygame.K_ESCAPE:
running = False
if xposCv9>screenWidth-64 or xposCv9<0:
step_xCv9 = -step_xCv9
if yposCv9>screenHeight-64 or yposCv9<0:
step_yCv9 = -step_yCv9
xposCv9 += step_xCv9
yposCv9 += step_yCv9
screen.blit(cv9, (xposCv9, yposCv9))
pygame.display.flip()
clock.tick(60)


if __name__=="__main__":
main()

最佳答案

pygame 的工作方式是它内部有您正在更新的屏幕的表示。所以,它开始时全黑,然后你进行第一次“blit”。这将更新内部表示。然后,当您调用“pygame.display.flip”时,它会在屏幕上显示该表示形式。但是,这不会自动“清除”表示,让​​您的下一帧恢复为全黑。因此,在下一帧中,您再次进行 blit(例如稍微向左),并且第一个 blit 保留下来,创建您的“轨迹”。

因此,对于您正在做的事情,最好的办法是在循环中,在开始绘制下一帧之前清除屏幕的内部表示。您可以通过用单一颜色填充屏幕来“清除”屏幕,就像这样......

BLACK = (0,0,0)
....
screen.blit(cv9, (xposCv9, yposCv9))
pygame.display.flip()
clock.tick(60)
screen.fill(BLACK) # Add this to "clear" the screen.

请注意,如果您选择走这条路线,这意味着您需要重新绘制每一帧的所有元素(而不仅仅是自上一帧以来更改的元素)。

顺便说一句,如果您想知道,有一个很好的理由可以解释为什么帧在最后不会自动清除。在某些情况下,仅更新屏幕上更新的部分可能会更快。这可能会导致某些应用程序的性能加速。但是,最好从清除屏幕开始,如上面的示例所示。

关于python - 为什么 PyGame 会拖拽图像?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15049561/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com