2011-11-27 4 views
0

이 질문을 완전히 이해하려면 Having Some Issues With Making Pacman을 참조하십시오. 수락 된 답변의 첫 부분 만 살펴보십시오. 그리고 이것은 자바에 있습니다!팩맨 어레이 - 부드러운 움직임

위의 링크와 같이 배열을 사용하고 있습니다. 나는 팩맨 캐릭터가 괜찮 았던 것 외에는 100 픽셀마다 21 픽셀 씩 이동한다는 사실을 알았으므로 전혀 매끄럽지 않습니다.

현재 x와 y를 현재 배열 위치의 21 배로 늘리고 있습니다. 어떻게 이렇게 부드럽게 만들지 궁금합니다. 나는 어떻게 움직이는 지 몇 가지 방법을 시도해 보았지만 일하지 않고 매우 숙련되지 않았고 나의 길은 효율적이지 못했습니다. 그래서 나는 여기를 돌아 다니면서 매끄럽게 움직이는 좋은 길을 찾고 있습니다. 당신이 알 필요가 있습니다

어떤 것들은 : 팩맨은 첫 번째 키 언론의 방향으로 자리를 확인한다. (예 :. 바로 아래 화살표 분명히인가?) 은 이동 처리하는 다른 클래스를 호출 진행 명확한 경우 벽이나 적이있을 때까지 팩맨.

답변

1

두 개의 루프를 만들어야합니다. 게임의 논리를 실행하고 매 100ms마다 실행되는 게임 루프와보다 자주 실행되는 애니메이션 루프 (매 20ms마다)가 모든 스프라이트가 있어야하는 위치를 계산합니다.

// in pseudo code 
sleep 20 ms 
if i++ % 5 == 0 
    do game loop 
do animation loop with i 
// passing i to animation loop will allow you to easily calculate how far sprite is along path to destination 
+0

좋아요. 나는 이것을 시도 할 것입니다. 하지만 팩맨의 움직임은 어떻게 할 수 있습니까? 왜냐하면 그것은 현재 배열을 곱하기 때문에 단지 움직임을 빠르게 할 것입니다. – ComputerLocus

+0

어쩌면 다음과 같을 것입니다 :'(array_from - array_to)/5 * i' –

+0

고등학생은 자바의 첫 학기에만 머물러 있습니다. – ComputerLocus

2

인간의 눈은 약 100ms마다 한 프레임을 볼 수 있으며 일부 사람들은 그보다 빨리 볼 수 있습니다. 프레임 속도를 최소 20FPS (50ms마다 한 프레임에 해당)로 늘릴 수 있습니다. Pac-Man을 같은 속도로 움직이기를 원한다면, 거리의 절반 만 속도를 두 배로 할 수 있습니다 (50ms마다 10 또는 11 픽셀 이동).

자세한 배경 정보 및 다른 사람들이 성공적으로 사용하고있는 것을 확인하려면 The Wikipedia article on framerate을 참조하십시오.

+0

네, 이렇게하는 것이 좋겠지 만, 어떻게 이런 식으로 배열을 사용하는지는 모르겠습니다. – ComputerLocus

+0

이것은 미로가 저장되는 방식이나 이동이 실행되는 방식과 완전히 관련이 없어야합니다. 오히려 이것은 사용자 인터페이스를 업데이트하는 코드와 관련이 있습니다. –

+0

"평균적인"인간조차도 10fps에서 큰 변화가 있음을 눈치 챌 것입니다. 나는 ~ 30fps를 목표로 할 것이고, Pacman과 같은 게임의 경우에는 그럴만한 이유가있다! 타이머 해상도 * 및 * CPU/JVM 실행 속도는 다양하므로 * 애니메이션을 수행 할 때 델타 *를 고려해야합니다. 그렇지 않은 경우에는 다른 속도에서 너무 느리거나 너무 빠를 수 있습니다. –