• 카테고리

    질문 & 답변
  • 세부 분야

    게임 프로그래밍

  • 해결 여부

    미해결

_showPopup 부분 질문

21.10.04 01:09 작성 조회수 135

0

어떻게 검색해야 할 지 몰라서 밤늦게 질문드립니다 ㅠㅠ

혹시라도 주무시는데 알람이 갈까 미리 사과드립니다.

@if(_showPopup)을 이용해서 다이얼로그를 띄우는 부분에 관해서 질문입니다.

버튼을 이용해서 _showPopup을 true로 바꿔주면 다이얼로그가 뜨는 부분이 잘 이해가 되지 않습니다.

true로 바꾸어주었다고 해도 @if 부분을 다시 가야 다이얼로그 부분이 뜰텐데,

while로 백그라운드로 체크하는건지

true가 되면 Callback으로 if를 체크해서 다이얼로그를 띄워주는건지

어떤 방법으로 true로 바뀐 것을 확인하고 다이얼로그를 띄우는건가요?

+) 이번엔 출시된 디아블로2 레저렉션을 짬짬이 하고 있는데 햄딘이라는 캐릭을 키우고 있습니다. 캐릭터를 기준으로 반지름을 가지고 원 궤도로 회전하는 해머를 소환해서 닿는 몬스터를 때리는 기술을 쓰는데, 어떻게 구현을 한건지 해머를 돌리면서 자주 생각이 들더라구요.

디자인 패턴이 익숙치 않아 떠오르는 대로 다음처럼 생각 해보았는데요, 구현 자체의 문제점이라거나 해머를 많이 생성하면 서버와 통신할 때 문제가 생길까요?

 

해머라는 Class를 다음과 같이 설계해서

Class Hammer

{

    public int _playerId { get; set; }

    public Vec3d _pos {get; set; }

    public _damage {get; set; }

}

해머의 위치 _pos를 일정 프레임 단위로 체크해서 닿는 몬스터의 체력을 _damage만큼 업데이트 해주고, 해당 몬스터의 체력이 0 이라면 _playerId를 찾아서 경험치를 주거나 아이템 권한을 설정해주는 식으로 구현해주면 되지 않을까 생각해봤습니다.

 

 

답변 1

답변을 작성해보세요.

0

웹 '프레임워크'라는 말이 괜히 나오는 것이 아닙니다.
Blazor 또한 실제로 구동하는 코드는 방대해서 이를 이해하고 작업하기 힘들고
원리가 이해가지 않더라도 그냥 어느 정도 감안하고 작업해야 합니다.
(웹이 대부분 그렇죠)

두번째로 해머의 구현은 대충 말씀하신 방식으로 이루어지게 됩니다.
단 투사체의 경우 위치를 일일히 서버에서 맞춰주는게 아니라
스폰 위치만 맞춰주면 나머지 이동 경로는 고정이니 클라/서버에서 알아서 연산하게 됩니다.
그리고 피격 판정 부분(데미지 적용)만 서버에서 따로 연산하는 것이죠.
디아같은 게임은 보통 고정 프레임으로 서버에서 연산을 돌리고,
MMO와는 다르게 몬스터 개수가 너무 많기 때문에
모든 이동/피격 정보를 클라에 다 알려주지는 않습니다.
디아하다 렉이 걸리면 뭔가 가위 눌린 현상처럼 아무리 몹을 때려도 안 맞다가,
한 5초 후에 롤백 되면서 다른 위치로 이동하는 것을 목격할 수 있는데
클라/서버가 각각 따로 위치를 연산하다 보니 위치 틀어짐이 발생해서 그런겁니다.