基本思路很简单:我有一个盒子,它每隔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秒通过其宽度改变其位置(由“刻度”值控制),并且当它碰到屏幕的一侧时,它也会改变...
您可以在ct = tick
与墙壁碰撞时使其移动,但这会使它移动得非常快,这可能不是您的后继。