当前位置: 首页 > 知识库问答 >
问题:

在我的pygame程序中添加了“碰撞边界”代码,现在屏幕上的精灵在需要时不会改变

申屠泉
2023-03-14

我正在pygame上做一个小的测试游戏,你需要在不接触窗口边界的情况下驾驶飞机绕着屏幕飞行,否则游戏将关闭。在我添加边界代码之前,我能够使飞机的精灵在向左或向右飞行时发生变化,在各自的方向上倾斜。现在,虽然“碰撞边界”代码与精灵代码无关,但平面只保留在它的一个初始精灵中,不会改变(它仍然移动,边界代码工作正常,但精灵本身不会改变)。

这是我的代码:

def game_loop():
        x = display_width * 0.45
        y = display_height * 0.8
        x_change = 0
        accel_x = 0
        y_change = 0
        accel_y = 0
        max_speed_x = 2.5
        max_speed_y = 2.5

    gameExit = False

    while not gameExit:

            for event in pygame.event.get():
                    if event.type == pygame.QUIT:
                            gameExit = True
                    elif event.type == pygame.KEYDOWN:
                            if event.key in (pygame.K_LEFT, pygame.K_a):
                               accel_x = -.2
                               img = pygame.image.load('PocketFlyer3.png')
                               img = pygame.transform.scale(img, (32, 32))
                            elif event.key in (pygame.K_RIGHT, pygame.K_d):
                               accel_x = .2
                               img = pygame.image.load('PocketFlyer2.png')
                               img = pygame.transform.scale(img, (32, 32))
                            if event.key in (pygame.K_UP, pygame.K_w):
                               accel_y = -.2
                            elif event.key in (pygame.K_DOWN, pygame.K_s):
                               accel_y = .2
                    elif event.type == pygame.KEYUP:
                            if event.key in (pygame.K_LEFT, pygame.K_RIGHT, pygame.K_a, pygame.K_d):
                                    accel_x = 0
                                    img = pygame.image.load('PocketFlyer1.png')
                                    img = pygame.transform.scale(img, (32, 32))
                            if event.key in (pygame.K_UP, pygame.K_DOWN, pygame.K_w, pygame.K_s):
                                    accel_y = 0

    #accel script for X
            x_change += accel_x
            if abs(x_change) >= max_speed_x:
                    x_change = x_change/abs(x_change) * max_speed_x

            if accel_x == 0:
                    x_change *= 0.92

            x += x_change

    #accel script for Y

            y_change += accel_y
            if abs(y_change) >= max_speed_y:
                    y_change = y_change/abs(y_change) * max_speed_y

            if accel_y == 0:
                    y_change *= 0.92

            y += y_change

            display.fill(skyblue)
            plane(x,y)

            if x > display_width - plane_width or x < 0 or y > display_width - plane_width or y < 0:
                    gameExit = True

            pygame.display.update()
            clock.tick(60)

平面和游戏窗口的宽度在此提取之前定义;这个小摘录也没有遗漏什么太重要的东西。(代码缩进的细微差别不是问题所在,只是在发布此问题时发生的事情)

共有1个答案

雍河
2023-03-14

您的边界测试错误(根据width检查xy,忽略height),应为:

if (x > display_width - plane_width) \
        or (x < 0) \
        or (y > display_height - plane_height) \
        or (y < 0):
 类似资料:
  • 我在PyGame中创建了两个简单的精灵,其中一个是雨伞,另一个是雨滴。雨滴被添加到一个名为< code>all_sprites的sprite组中。伞精灵有自己的组,名为< code>Umbrella_sprite 雨滴从屏幕顶部“落下”,如果其中一个碰到雨伞/与雨伞碰撞..雨滴应该被删除了。但是除了特定雨滴之外,所有其他雨滴都受此影响。

  • 我有一个长方形的小组,里面有一群精灵。精灵在移动(说向上)。当它们到达顶部时,会与边界发生碰撞。我已经建立了一套逻辑,在精灵离开团队时杀死他们。然而,现在的样子,我可以看到精灵离开了团队。我想让它在精灵穿越边界时逐渐消失,直到它消失(并死亡)。 这是一个我想要实现的粗略模型。 我在玩相机,以为我必须修改视口,但它不起作用。达到这种效果的正确方法是什么? 谢谢 编辑:我的相机是这样设置的: 现在它是

  • 我正在与Pygame一起练习,试图学习类,对象等的一些基本用法。 现在,在http://programarcadegames.com/的帮助下,我正在制作一个基本的平台 我有一个精灵播放器和精灵平台。这些平台也可以是移动平台,它应该在碰撞时移动玩家,但是当玩家移动到其他平台时,会发生一些奇怪的传送,我现在没有看到问题。 基本上,当被推时,玩家在逻辑上没有被移动(至少对我来说是这样)。 非常感谢任何

  • 问题内容: 在pygame中,有没有一种方法来寻找某一方之间的碰撞 一个精灵和另一个精灵的特殊一面?例如,如果 精灵A的顶部与精灵B的底部碰撞,返回True。 我肯定有办法做到这一点,但我找不到任何特别的方法 在文档中。 谢谢! 问题答案: 在PyGame中没有函数来获取侧面碰撞。 但你可以试着用 pygame.Rect.CollipePoint公司 测试是否,,, ,,,, 在里面 (pygam

  • 我一直在学习一些pygame教程,并且基于这些教程开发了自己的代码。具体如下: 所以我想出了如何让我的家伙跳跃,但是我已经在天空中放置了一个块并试图这样做: 试图让角色停止跳跃。有没有一个内置的函数来测试这一点,或者有没有一个适合我的方法。顺便说一下,这是行不通的,我似乎也不知道该怎么做。非常感谢任何帮助:)

  • 在开始学习相关知识点之前,我们有必要先学习精灵和碰撞检测的含义。 精灵(英文译为 Sprite),其实在一个游戏程序中,精灵本质指的是一张张小尺寸的图片,比如游戏中的各种道具、人物、场景装饰等,它们都可以看做成一张张小的“精灵”图。除此之外,人物的移动也可以看做是一系列小精灵图构成的序列(按帧组成的序列),如下图所示: 图1:动作逐帧分解图 如果将逐帧分解后的动作,按照一定的频率播放,那么就形成了