• 카테고리

    질문 & 답변
  • 세부 분야

    게임 프로그래밍

  • 해결 여부

    미해결

화살 삭제에 관련된 질문입니다.

21.06.06 10:49 작성 조회수 210

0

선생님처럼 저도 처음에는 캐릭터가 화살로 나가서 당황을 했엇는데, 캐릭터가 벽이나 화면 끝에 도달하지 않았는데 삭제가 될때 뻑이 나고 서버가 종료가 되서 원인을 찾아보니

화살의 CellX Y와 CellX Y를 토대로 얻어낸 배열 인덱스값을 화살이 움직일때마다 출력해 줬더니 위와같이 나왓습니다.

클라에선 벽이나 맵끝에 도착하지 않았지만 서버에서는 이미 도착한것으로 인식되었다는걸 확인했습니다.

제가 파악하기론 foreach문에 진입하고 나서 화살의 Update문을 실행햇는데 화살이 벽에 도착하거나 맵 끝에 도착해서 

이 부분에서 삭제가 된 후

빠져나오면서 위처럼 조건을 다시 검사할때 여기서 에러가 납니다.

정리해보면 

첫번째로는 서버에서는 화살의 움직임의 연산이 끝낫지만 클라에서는 물체의 속력이 빠르지 않아서 벽이나 맵끝에 닿기도 전에 삭제되는데, 서버의 프레임과 클라의 프레임을 맞추지 않아서 발생하는 문제인가요?

두번째로는 뻑이나는 부분인 foreach를 이용해서 ProjectTiles를 순회하는도중에 순회대상인 ProjectTile이 안쪽에서 삭제가 되어서 바깥쪽으로 나올때 에러가 나는것 같은데 이부분은 어떻게 해야 할까요..

답변 2

·

답변을 작성해보세요.

0

감사합니다

0

1)
우선 강의에서는 화살을 따로 특별히 대우해줄만큼 중요하지 않아
있는 기능으로만 조립해서 간단하게 만들었지만,
사실 대부분의 경우 화살의 좌표를 실시간으로 받아볼 필요는 없고
생성만 받아오고 그 다음부터는 그냥 클라/서버 각자 연산을 하는 것이 맞습니다.
따라서 속력을 맞춰주는 부분은 크게 고민할 부분은 아니지만
현재 발생한다면 서버와 클라의 연산 속도/주기를 살펴보시기 바랍니다.

2)
일단 까다로운 버그인데 잘 찾아주셨네요.
해결 방법은 다양하게 있을 수 있는데요.
동일한 컬렉션을 순회하면서, 동일한 컬렉션에 접근해 삭제하는게 문제가 된 것이기 떄문에

이 부분에서 _Projectiles을 임시 List에다 복사한 후
그 임시 리스트를 순회하면 됩니다.

혹은 나중에 Job 방식으로 수정하게 되면, 
소멸하는 Job을 예약하는 식으로
소멸 시점을 미뤄주면 됩니다.