#python #animation #pygame #blit
Вопрос:
У меня есть программа pygame, в которой я анимирую движение персонажа, каждый раз, когда я нажимаю A или D, меняется координата x, и персонаж создает изображение самого себя, движущегося.
Анимация правого движения, прыжка и стояния работает, но не левого движения.
Я проверил изображения для изображений, обращенных влево, и они обращены влево. Так что я почти уверен, что проблема не в переменной
ссылка на видео для более легкой визуализации -> >https://www.youtube.com/watch?v=kHnyJqwPUqE вот переменные ->
c_scale_width=80
c_scale_height= 90
c_scale_stand_width=90
c_scale_stand_height= 105
c_s_y= 290
cx = 250
cy = 300
move_left = False
move_right = False
standing_1 = pygame.image.load(os.path.join('','P1(stand).png'))
standing=pygame.transform.scale(standing_1,(c_scale_stand_width,c_scale_stand_height))
P2_right_11=pygame.image.load(os.path.join('','P1(1).png'))
P2_right_1=pygame.transform.scale(P2_right_11,(c_scale_width,c_scale_height))
P2_right_12=pygame.image.load(os.path.join('','P1(2).png'))
P2_right_2=pygame.transform.scale(P2_right_12,(c_scale_width,c_scale_height))
P2_right_13=pygame.image.load(os.path.join('','P1(3).png'))
P2_right_3=pygame.transform.scale(P2_right_13,(c_scale_width,c_scale_height))
P2_right_14=pygame.image.load(os.path.join('','P1(4).png'))
P2_right_4=pygame.transform.scale(P2_right_14,(c_scale_width,c_scale_height))
P2_right= [P2_right_1,
P2_right_2,
P2_right_3,
P2_right_4]
P2_left_1= pygame.transform.flip(P2_right_1,True,False)
P2_left_2= pygame.transform.flip(P2_right_2,True,False)
P2_left_3= pygame.transform.flip(P2_right_3,True,False)
P2_left_4= pygame.transform.flip(P2_right_4,True,False)
P2_left= [P2_left_1,
P2_left_2,
P2_left_3,
P2_left_4]
step_index=0
теперь вот программа —>
def c_move(keys_pressed):
global move_left
global move_right
global jump
global cx
global cy
global jump_vel_y
global step_index
if keys_pressed[pygame.K_a]: # left
cx -= Velocity
move_left = True
move_right = False
if keys_pressed[pygame.K_d]: # right
cx = Velocity
move_left = False
move_right = True
else:
move_left = False
move_right = False
step_index = 0
if jump is False and keys_pressed[pygame.K_SPACE]:
jump = True
def draw():
global jump
global jump_vel_y
global cx
global cy
WIN.blit(bg,(0,0))
global step_index
if step_index >= 4:
step_index=0
elif move_left:
WIN.blit(P2_left[step_index//2], (cx,cy))
step_index =1
if jump:
cy -= jump_vel_y
WIN.blit(standing, (cx, cy))
jump_vel_y -= 1
if jump_vel_y < -15:
jump = False
jump_vel_y = 15
elif move_right:
WIN.blit(P2_right[step_index//2], (cx, cy))
step_index =1
else:
WIN.blit(standing,(cx,c_s_y))
pygame.display.update()
def main():
clock = pygame.time.Clock()
run = True
while run:
clock.tick_busy_loop(FPS)
for event in pygame.event.get():
if event.type == pygame.QUIT:
run = False
pygame.quit()
sys.exit()
keys_pressed = pygame.key.get_pressed()
c_move(keys_pressed)
draw()
main()
Заранее спасибо всем, кто это прочтет!
Комментарии:
1. Нет, я пытался переписать код, но он все тот же
Ответ №1:
Вам нужно использовать один if
elif
elif
оператор — вместо 2 if
— elif
оператора:
def draw():
global jump, jump_vel_y
global cx, cy
global step_index
if step_index >= 4:
step_index=0
current_image = standing
if jump:
cy -= jump_vel_y
jump_vel_y -= 1
if jump_vel_y < -15:
jump = False
jump_vel_y = 15
elif move_right:
current_image = P2_right[step_index//2]
step_index = 1
elif move_left:
current_image = P2_left[step_index//2]
step_index = 1
WIN.blit(bg,(0,0))
WIN.blit(current_image, (cx, cy))
Комментарии:
1. Левое движение по-прежнему не работает, все остальное по-прежнему то же самое
2. @captainchungus, Значит, ты сделал это неправильно. Код в ответе правильный и решает проблему.
3. о, хорошо, я попытаюсь переписать весь код, в любом случае, спасибо за помощь