首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法让Pygame对象改变方向

无法让Pygame对象改变方向
EN

Stack Overflow用户
提问于 2018-11-11 21:14:36
回答 1查看 491关注 0票数 1

我无法让我的对象在我的代码中改变方向。

代码语言:javascript
复制
import pygame

pygame.init()

width = 900
height = 700
background_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)

        if x_virus == 320:
            if y_virus != 400:
                y_virus += 1
                virus(x_virus,y_virus)

        if y_virus == 400:
            if x_virus != 500:
                x_virus += .5
                virus(x_virus,y_virus)

        if x_virus == 500:
            if y_virus != 10:
                y_virus -= 1
                virus(x_virus,y_virus)

下面是执行游戏运动的代码^

代码语言:javascript
复制
        pygame.display.update()
intro()

我不知道所有的if语句是否是最有效的方法。我尝试过不同的方法,但if语句在大多数情况下似乎有效。我很感谢你的帮助。谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-11-11 21:31:26

你没有正确地闪现图像。让我们来看看这个函数:

代码语言:javascript
复制
def virus(x_virus,y_virus):
    screen.blit(virus_pic, (x_virus, y_virus))

您接受x和y坐标,并尝试将virus_pic混合到screen。问题是,这里没有考虑不同的作用域,您需要将screenvirus_pic作为参数传递,否则您的函数不知道它们是什么,所以将您的函数改为如下所示

代码语言:javascript
复制
def virus(screen,virus_pic,x_virus,y_virus):
    screen.blit(virus_pic, (x_virus, y_virus))

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

代码语言:javascript
复制
    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)

告诉我是怎么回事!

编辑:

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

您需要找到一种方法,使这些更改是动态的。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53253299

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档