【问题标题】:added "collision boundaries" code to my pygame program, now the sprites on-screen wont change when they need to在我的 pygame 程序中添加了“碰撞边界”代码,现在屏幕上的精灵在需要时不会改变
【发布时间】:2018-05-20 18:50:56
【问题描述】:

我正在 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)

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

【问题讨论】:

标签: python pygame


【解决方案1】:

您的边界测试错误(检查xywidth 并忽略height),应该是:

if (x > display_width - plane_width) \
        or (x < 0) \
        or (y > display_height - plane_height) \
        or (y < 0):

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-09-14
    • 2023-03-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-19
    • 1970-01-01
    相关资源
    最近更新 更多