Я новичок в python и Pygame, и мне нужна помощь с чем-то, связанным с ускорением. Я следовал руководству на youtube о том, как сделать основу для платформерной игры, и я использовал его, чтобы создать игру, похожую на игру в Кирби. Одна из крошечных мелких деталей, которые я замечаю в игре с Кирби, заключается в том, как он скользит, когда вы двигаетесь в одном направлении, а затем быстро перемещаетесь в другом направлении, и в течение последних нескольких дней я выяснял, как заставить его работать. Решение, которое я придумал, состояло в том, чтобы сделать так, чтобы вместо того, чтобы персонаж двигался при каждом нажатии клавиши, персонаж ускоряется, а затем прекращает ускоряться, как только достигает максимальной скорости, а затем быстро замедляется и снова ускоряется, когда вы нажимаете другую кнопку. клавиша направления. Проблема в том, что я не знаю, как программировать ускорение. Кто-нибудь может мне помочь с этим?
Вот код, который я написал для игры (первый бит для столкновения, второй бит для фактического перемещения игрока):
def move(rect, movement, tiles):
collide_types = {'top': False, 'bottom': False, 'right': False, 'left': False}
rect.x += movement[0]
hit_list = collide_test(rect, tiles)
for tile in hit_list:
if movement[0] > 0:
rect.right = tile.left
collide_types['right'] = True
if movement[0] < 0:
rect.left = tile.right
collide_types['left'] = True
rect.y += movement[1]
hit_list = collide_test(rect, tiles)
for tile in hit_list:
if movement[1] > 0:
rect.bottom = tile.top
collide_types['bottom'] = True
if movement[1] < 0:
rect.top = tile.bottom
collide_types['top'] = True
return rect, collide_types
Второй бит :
player_move = [0, 0]
if move_right:
player_move[0] += 2.5
elif run:
player_move[0] += -3
if move_left:
player_move[0] -= 2
elif run:
player_move[0] -= -3
player_move[1] += verticle_momentum
verticle_momentum += 0.4
if verticle_momentum > 12:
verticle_momentum = 12
elif slow_fall == True:
verticle_momentum = 1
if fly:
verticle_momentum = -2
slow_fall = True
if verticle_momentum != 0:
if ground_snd_timer == 0:
ground_snd_timer = 20