是否有解决方案,我的框Y值在“击中”墙壁后会增加或减小其高度值?

问题描述 投票:0回答:1

基本思路很简单:我有一个盒子,它每隔x秒通过其WIDTH改变其位置(由“ tick”值控制),并且当它碰到屏幕的一侧时,它也会改变方向。如果击中屏幕的右侧,则Y值将增加HEIGHT值框;如果击中左侧,则Y值将减小。

我的问题是,我的盒子碰到墙后,它会多次改变其Y值,然后再改变方向。我希望它更改1次然后再转到另一个方向。

我试图通过从中提取或添加1来更改框X的值,以使墙和框之间存在间隙;因此,IF语句在下一帧之前将为false,并且不会递增Y值,并且该框有时间更改方向并移至另一个方向。该解决方案虽然奏效,但箱子跳高或跳高的次数仍然是原来的两倍,而不是1英尺。我也尝试了很多方法,但这是我能想到的最好的方法://>

这是示例代码,我添加了一个网格,因此您可以确切地看到我的问题。HERE IS A PICTURE OF IT

import pygame
pygame.init()

WIN_W, WIN_H = 200, 500
FPS = 60

screen = pygame.display.set_mode((WIN_W, WIN_H))
clock = pygame.time.Clock()

# rect pos, dimensions
rct_x, rct_y = 100, 80
rct_w, rct_h = 20, 10

ct = 0
tick = .5
direction = True

run = True
while run:
    dt = clock.tick(FPS) / 1000
    screen.fill((0, 0, 0))

    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            run = False

    rct = pygame.Rect((rct_x, rct_y), (rct_w, rct_h))
    pygame.draw.rect(screen, (255, 50, 50), rct)

    # grid for better viualisation
    for row in range(50):
        pygame.draw.rect(screen, (50, 100, 50), pygame.Rect((0, row * 10), (WIN_W-1, 1)), 1)
        for col in range(35):
            pygame.draw.rect(screen, (50, 100, 50), pygame.Rect((col * 20, 0), (1, WIN_H)), 1)

    # if rect Xpos + WIDTH greater than SCREEN WIDTH
    if rct_x + rct_w >= WIN_W:
        # increase rect Ypos by its HEIGHT
        rct_y += rct_h
        direction = False
    # if rect Xpos less than 0
    elif rct_x <= 0:
        # decease rect Ypos by its HEIGHT
        rct_y -= rct_h
        direction = True

    ct += dt
    if ct >= tick:
        ct = 0

        if direction:
            # move rect right if direction true
            rct_x += rct_w
        else:
            # move rect left if direction false
            rct_x -= rct_w

    pygame.display.update()

基本思想很简单:我有一个盒子,它每隔x秒通过其宽度改变其位置(由“刻度”值控制),并且当它碰到屏幕的一侧时,它也会改变...

python python-3.x pygame
1个回答
0
投票

您可以在ct = tick与墙壁碰撞时使其移动,但这会使它移动得非常快,这可能不是您的后继。

© www.soinside.com 2019 - 2024. All rights reserved.