ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 스파르타 최종프로젝트 7일차
    스파르타 게임 개발 2024. 7. 3. 23:37

    1.빅인티저

    앞으로 골드나 공격력 등을 100K, 이런 식으로 표현을 하기 위해 빅인티저를 써야 했다. 

    그런데 시간을 조금 버린 게 개념을 잘 못 알고 있었다. 

     

    나는 이 빅인티저를 사용 하는 게 100K, 100M 이런 식으로 바꾸는 것을 빅인티저로 알고 있었다. 그래서 공부 시작을 이상하게 했다. 

     

    int가 21억까지 표현이 가능 하기에 이걸 100K나 100M 이런 식으로 바꾼 다음에 표시를 하고, 나중에 계산을 할 때 다시 숫자로 바꿔서 계산을 하는 것인 줄 알았다. 

    그러니까 메모리 절약을 위해 int x int를 하는 것인 줄 알았다.

    이런 느낌인 줄 알았다.

     

    그래서 계산을 한 후에 다시 100K 이런 식으로 변경 하면서 사용 하는 것인 줄 알았고, 이것을 어떻게 해야 하는거지라고 생각을 해서 시간을 좀 낭비 한 것 같다. 

     

    이게 아니라 원래의 방식은 이러했다. 

     

    BigIntager라는 C#에서 만들어둔 자료형이 있다. 이 자료형은 엄청 큰 숫자를 표한 할 수 있게(거의 무한대라고 한다) 알아서 다 계산을 해주는 것이다, 이 자료형을 변수로 만들어 두고 여기에 숫자를 계속 더하거나 빼주면 되고, 이 변수를 100K 이런 식으로 표현 하면 되는 것이었다. 

     

    매우 간단한 방법이었다.. 그러니까 100K, 100M 이런 식으로 변하게 하는 것만 알면 됐다. 

     

    BigInteger의 사용방법인데 우선 위 사진과 같이 System.Numerics를 선언을 해주고 BigInteger 자료형을 만들어 주면 된다.

     

    그 다음에 BigInt로 선언 한 자료형을 Text로 표현을 할 때 100K 이런 식으로 변경 해서 표시 하게 해주면 되는 것이다. 

    BigInteger 자료형에 값을 추가 하는 모습

     

    소수를 더하거나 뺄 경우에는 BigInt를 소수로 바꾸거나, float을 정수로 바꿔서 계산을 하면 된다. 

    큰 숫자가 표현 되는 모습

     

    BigInteger가 이러한 성능을 가져서 난 메모리가 클 줄 알았는데 Int보다 4Byte를 더 쓴다고 한다. 생각보다 너무 많이 안 써서 많이 애용을 해야겠다. **튜터님: 4Byte만 추가 되어도 계산 할 수 있는 양 자체가 달라진다.

     

    그래서 이 BigInt로 만들어둔 변수를 저렇게 숫자만 나오게 하면 읽기 어려우니 1000K, 1000만 이런 식으로 표현 되게 해주면 된다. 

    이거는 매우 쉽다고 볼 수 있다. 

     

    3자리나 4자리마다 끊어서 거기 사이에 K나 만, 이런 걸 넣어주면 된다.

     

    나는 방치형게임 국룰답게 K,M 이런 식으로 변경을 해보겠다.

     

    https://learn.microsoft.com/ko-kr/dotnet/api/system.numerics.biginteger?view=net-8.0&redirectedfrom=MSDN

    BigInteger 공식문서

     

     

     

    2.BigInt 문자열 변환

    방식은 이렇다. 일단 나눠야 한다. 예를 들어 4글자로 나누면 10000으로 나누는 거니까

    120,000 / 10,000 은 12가 된다. 

     

    여기에 '만'을 더하면 12만이 문자열로 나온다.  12+만 = 12만

     

    이런 식으로 함수를 만들어 주는 것이다. 그런데 만드는 것보단 소스코드를 활용 하자.

    사용한 코드

     

    제일 간단한 방법인 것 같아서 사용 중이고, 나중에 업그레이드를 좀 해야 할 것 같다. 

    일단 내가 알아야 관리를 할 수 있으니까..^^

     

     retStr = numList[i] + goldUnitArr[i] + retStr; 

     

    이 코드가 리턴 시킬 코드인데 나눈 숫자 뒤에 K, M, B라고 만들어둔 배열을 붙여주고 retStr를 한 번 더 붙여서 기존에 있던 문자열이 뒤로 가게끔 해서 10억 7500만 4000 이런 식으로 나오게 했다. 

    나는 마지막 단위 2개만 나오게 해놓았다.

     

    지금은 일단 이 방법을 사용해서 하고 나중에 더 좋은 방법을 알아보자.

    이제 플레이어 컨트롤을 구현 해본다. 

     

     

     

    3.플레이어 조작 구현

    스크롤 기능과 터치시 블록 공격 기능을 추가 할 것이다. 스크롤은 땅이 뚫린 데까지만 내려가야 하고, 터치시 공격은 제일 나와있는 블록을 공격 해야 한다.

     

    지금 현재 사용한 방법은 마우스 버튼이 클릭 됐을 때 현재 마우스 위치를 저장하고, 누른 상태에서 드래그를 하게 되면 현재 위치에서 마우스 Position이 변경 된 만큼 카메라 Position이 움직이게 했다. 

     

    그리고 여기서 최대값을 입력 해줘서 특정 범위 밖으로는 카메라가 이동 되지 않게 했고, 이 범위는 맵이 생성 될 때마다 늘어나게 해줬다. 

     

    이 때 늘어나는 범위는 임의로 설정을 해주면 안 되고 맵의 길이만큼 늘려줘야 했다. 

     

    적을 땐 상관 없지만 맵이 엄청 많이 늘어났을 경우에 맵 늘어나는 길이만큼 같이 늘어나지 않고 늘어나는 길이가 다를 경우 한 쪽이 못 따라간다. 

     

    맵 끝까지 카메라가 비춰야 하는데 안 비춰지는 땅이 있다. 

    그래서 맵이 생성 될 때마다 땅의 길이만큼 카메라의 범위가 증가 하게 해줬다. 

     

    그런데 지금 일단 문제가 있다. 마우스가 UI 위에 있을 때는 적용이 되면 안 되는데 UI위에 있어도 적용이 된다. 

    일단 이 화면 드래그 방법도 좀 알아보고 해보고 싶었는데 많이 안 알아봐서 문제가 좀 있는 것 같다. 

     

     

    내일목표 : 화면 드래그 기능 마무리, 화면 클릭시 플레이어 캐릭터 생성, 플레이어 Data 만들기, 기본기능들 더 만들기

     

Designed by Tistory.