为了账号安全,请及时绑定邮箱和手机立即绑定

无法让 Python Pygame 对象改变方向

无法让 Python Pygame 对象改变方向

不负相思意 2021-08-14 12:53:53
我无法在 Pygame 中获取我的对象来改变我的代码方向。import pygamepygame.init()width = 900height = 700background_image = pygame.image.load("board.png")background_image = pygame.transform.scale(background_image, (900, 700))virus_pic = pygame.image.load("virus.png")trojanvirus_pic = pygame.image.load("trojan_virus.png")armouredvirus_pic = pygame.image.load("armoured_virus.png")antivirus_pic = pygame.image.load("antivirus.png")trojanantivirus_pic = pygame.image.load("trojan_antivirus.png")armouredantivirus_pic = pygame.image.load("armoured_antivirus.png")screen = pygame.display.set_mode((width, height))pygame.display.set_caption("Anti Virus")#def anitvirus():def virus(x_virus,y_virus):    screen.blit(virus_pic, (x_virus, y_virus))def intro():    background_image = pygame.image.load("intro_background.png")    background_image = pygame.transform.scale(background_image, (900, 700))    logo_image = pygame.image.load("logo.png")    logo_image = pygame.transform.scale(logo_image, (600, 200))    pygame.display.update()    running = True    while running:        for event in pygame.event.get():            if event.type == pygame.QUIT:                running = False                pygame.quit()            if event.type == pygame.KEYDOWN:                if event.key == pygame.K_SPACE:                    main()        screen.blit(background_image, (0, 0))        screen.blit(logo_image, (width/2-300,100))        pygame.display.update()def main():    x_virus = 0    y_virus = 70    pygame.display.update()    running = True    while running:        for event in pygame.event.get():            if event.type == pygame.QUIT:                running = False                pygame.quit()        screen.blit(background_image, (0, 0))        if x_virus != 320:            x_virus += 1            virus(x_virus,y_virus)这是进行游戏移动的代码^        pygame.display.update()intro()我不知道是否所有的 if 语句都是最有效的方法。我尝试了不同的东西,但 if 语句似乎在大多数情况下都有效。我将不胜感激任何帮助。谢谢。
查看完整描述

1 回答

?
侃侃无极

TA贡献2051条经验 获得超10个赞

您没有正确地对图像进行 blitting。我们来看看这个函数:


def virus(x_virus,y_virus):

    screen.blit(virus_pic, (x_virus, y_virus))

你接受 x 和 y 坐标并尝试 blitvirus_pic到screen. 问题是你没有考虑这里的不同范围,你需要传递screen和virus_pic作为参数,否则你的函数不知道它们是什么,所以改变你的函数看起来像这样


def virus(screen,virus_pic,x_virus,y_virus):

    screen.blit(virus_pic, (x_virus, y_virus))

然后在您的main()函数中更改相应的代码部分。我也冒昧地将其简化了一点


    if x_virus != 320:

        x_virus += 1


    if x_virus == 320:

        if y_virus != 400:

            y_virus += 1


    if y_virus == 400:

        if x_virus != 500:

            x_virus += .5


    if x_virus == 500:

        if y_virus != 10:

            y_virus -= 1


    virus(screen,virus_pic,x_virus,y_virus)

让我知道事情的后续!


编辑:


它不改变方向的原因是因为在每一帧,它的坐标每次都只被相同的精确值改变,因此,速度向量保持不变,你只能看到一个方向的运动。


您需要找到一种方法来使这些更改具有动态性。


查看完整回答
反对 回复 2021-08-14
  • 1 回答
  • 0 关注
  • 154 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信