피그 게임 : 스프라이트 애니메이션 이론 - 피드백이 필요합니다

StackOverflow https://stackoverflow.com/questions/737303

  •  09-09-2019
  •  | 
  •  

문제

일부 코드를 조정 한 후 누군가에게서 캐릭터 이미지가 방향과 왼쪽 아래로 이동하게하여 왼쪽 아래로 이동하게했습니다. (코드가 너무 지저분하지 않기를 바랍니다)

캐릭터 이동 코드 + IMG

스프라이트 시트는 길이로 만 실행되므로 기본적으로 각 스프라이트 섹션은 다른 동작입니다. 이제 애니메이션을 만들기 위해 현재 '액션'에서 순환하기 위해 현재와 함께 기능하는 코드를 만들 수있는 방법이 있습니까?

예를 들면 : '왼쪽 실행'은 스프라이트 3입니다. 그러면 그 열을 지정 한 후에 애니메이션을 만들기 위해 런 애니메이션의 프레임 (4)의 프레임이 얼마나 많은지 루프 할 수 있습니까?

그림 예 :alt text http://animania1.ca/showfriends/dev/example.jpg

도움이 되었습니까?

해결책

쉬워야합니다.

프레임 번호를 변수로 녹화하면 애니메이션 프레임 번호를 가져와야하는 프레임 수로이를 모듈화 할 수 있습니다.

frame_count = 0
animation_frames = 4
while quit == False:
    # ...
    # snip
    # ...
    area = pygame.Rect(
        image_number * 100,
        (frame_count % animation_frames) * 150,
        100,
        150
    )
    display.blit(sprite, sprite_pos, area)
    pygame.display.flip()
    frame_count += 1

다른 동작마다 다른 수의 프레임이 있으면 image_number를 업데이트 할 때 Animation_frames를 업데이트해야합니다.

또한 이것은 애니메이션을 연주해도 괜찮다고 가정합니다. 어느 액자. 그렇지 않은 경우, 액션이 시작될 때 프레임 카운트가 무엇인지 기록하고 모듈로 전에 프레임 카운트에서 가져와야합니다.

    area = pygame.Rect(
        image_number * 100,
        ((frame_count - action_start_frame) % animation_frames) * 150,
        100,
        150
    )

이벤트 처리에 대한 메모. 당신이 말하고, 왼쪽하고, 오른쪽을 누르지 만 왼쪽을 계속 누르면, 스프라이트는 마지막으로 처리 한 이벤트가 키 업 이벤트 였기 때문에 움직이지 않습니다.

이것이 당신이 원하는 것이 아닌 경우, 관심있는 키의 위/아래 상태를 유지하거나 사용하여 주변을 둘러 볼 수 있습니다. pygame.key.get_pressed 상호 작용.

또 다른 메모에서, 당신은 고정 프레임 속도를 목표로하고 동시에 마지막 프레임에서 찍은 시간에 따라 스프라이트를 얼마나 멀리 움직일지 결정하는 것으로 보입니다. 제 생각에는 이것은 아마도 이상적이지 않을 것입니다.

2D 액션 게임은 일반적으로 예측 가능한 방식으로 작동해야합니다. 일부 CPU 무거운 프로세스가 컴퓨터에서 백그라운드에서 시작되어 게임이 더 이상 60 프레임을 초에 휘젓 지 않으면 속도가 느려지는 것이 바람직 할 것입니다. 오히려 물체가 프레임 사이에서 거대한 거리를 건너 뛰기 시작합니다. 총알을 피하는 금속 슬러그와 같은 2D 액션 게임 에서이 일이 발생했다고 상상해보십시오.

이것은 또한 모든 물리 계산을 훨씬 간단하게 만듭니다. 어떤 유형의 게임인지에 따라 판단 전화를해야합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top