질문과 답변

Extra Form

제가 일반공격 계산식을 만들었는데 다음과 같습니다.


a.atk * (1 - b.def / (b.def + 100))


그런데 이 계산식을 적용하면, 몬스터 방어력으로 인한 데미지 감소가 안되고, 플레이어 공격력 액면그대로 들어갑니다.



이해를 돕기위해 예제를 하나 들겠습니다.



a.atk = 300 (플레이어의 공격력)


b.def = 80 (몬스터의 방어력)


이라고 가정하겠습니다.



그럼 플레이어의 공격력은 액면 그대로, 300의 피해량 을 갖고있습니다.


다음으로,


몬스터의 방어력은, 위 계산식대로 b.def / (b.def + 100) 를 통하여 0.4444..... 이라는 결과가 도출됩니다.

이는 피해감소(%) 로 나타내자면, 소수점 자르고 0.44 * 100 을 통하여, 44% 감소 라는 결론이 나옵니다.

+ 참고로 이 방어력 계산은 방어력이 아무리 높아도 점감식으로 적용되어, 절대로 숫자 1 이 될수 없습니다.


그리고.. 실질적인 데미지 감소를 위한 추가적인 식을 적용하여,


(1 - b.def / (b.def + 100)) 빨간부분 즉, 1 - 0.44 = 0.56 이라는 식을 만들어,


0.56 을, 플레이어의 공격력.. 즉, 300 에 곱해주면,


최종 피해량은 167 이 됩니다.


44% 감소된 56% 의 데미지 식 이 만들어집니다.








는 이론대로라면 이렇게 되야하는데, 왜 데미지 감소가 안될까요?


제가 뭔가 실수한걸까요?



Comment '7'
  • ?
    Vincent 2013.10.01 19:33
    이거 적어놓고 이것저것 해보다가, 알아냈습니다.

    이미 아시는분들도 있겠지만, 모르는 분들을 위해 적어놓겠습니다.

    vxa 에서의 계산식에서 주의할점은, 계산도중 0 이하의 값이 나오면 안된다는 겁니다.

    본문에도 적혀있는 식을 보면,

    b.def / (b.def + 100) 이 부분의 값이 소수점으로 나오게끔 되어있습니다.

    저는 처음에 계산식에서 그런것쯤은 다 인식하는줄 알았는데, 아니더군요.

    저 부분에서 계속 1 미만, 즉 소수점자리 값이 도출되니까,

    결과값은 계속 0 으로 나오는거였습니다.


    그래서 식을 변경했습니다.

    (a.atk * (100 - (b.def * 100 / (b.def + 100)))) / 100

    이렇게 계산될 값을 대폭 키워버렸더니, 바로 문제없이 데미지감소 식이 적용되는군요.

    조금 더 복잡해지긴 했지만, 문제는 전혀 없습니다.


    이상입니다.
  • ?
    Vincent 2013.10.01 19:37
    아, 하지만 계산식에 직접적으로 소수점 값을 입력해서 사용하는건 전혀 문제가 없었습니다.

    그러니까, '계산된 결과가 소수점' 이면 안되는거 같습니다.
  • profile
    Omegaroid 2013.10.01 19:46

    보통 우리가 계산을 할때는 10/3은 3.33333.... 이렇게 되지만, 스크립트에서 10/3을 계산하면 소수점 자리는 안나오고 그냥 3이 도출됩니다. 왜냐면 '정수'끼리 계산을 하면 '정수'만 도출되기 때문이고요. 따라서 10.0/3.0 이런 식으로 부동 소수점 수(3.145423412 나 0.1231 나 이런거)로 만들어주고 계산을 해야 소수점 자리까지 다 나오게 되는 거고요.

    a.atk *(1 - b.def / (b.def + 100))
    이 계산식을 보면 1도 정수이고, a.atk도 b.def도 전부 정수겠지요. a.atk가 300이고 b.def가 80이면, 일단 b.def / (b.def + 100) = 80/180 = 0 이 되는 거고요. 따라서 a.atk*(1-0)이 되는 셈이라 플레이어 공격력이 액면 그대로 들어가는 상황입니다.

    해결책은...a.atk* 부분은 고치실 필요 없고, to_f 메소드를 써줘서 부동 소수점 수가 나오게 만들어주면 됩니다. 괄호 안에 있는 부분은 전부 부동 소수점수로 고쳐줘야 하니까 1.0 - b.def.to_f / (b.def.to_f + 100.0) 이렇게 고쳐주면 되겠더라고요.

  • ?
    Vincent 2013.10.01 19:53
    그런 방법도 있군요.

    제가 스크립트는 잘 몰라서 저 나름대로의 방법으로 해결책을 냈긴 했습니다만,

    답변해주신게 더 심플한거같습니다.

    바꿔봐야겠군요 ㅎ

    감사드립니다.
  • profile
    Omegaroid 2013.10.01 19:54

    그런데 제 해결책과 제시하신 예시를 결합해서 계산하면 166.6666666.....로 나올 수 있기 때문에, 이 소수점 아래자리 때문에 문제가 되면 아예 추가로

    real_damage = a.atk * (1 - b.def / (b.def + 100))

    이런 식으로 따로 계산식을 별도의 변수에 집어넣고 real_damage.to_i 이런 식으로 to_i 메소드 붙여줘서 도로 정수로 만드는 방법도 있습니다.

  • ?
    Vincent 2013.10.01 19:57
    역시 아는게 힘이군요.. ㅎㅎ

    좋은답변 감사드립니다.
  • ?
    허걱 2013.10.02 01:06
    Omegaroid 님께서 답변을 자세히 달아주셔서 따로 답변달것은 없네요. 감사합니다.

    다만... 질문자께서 사용하는 계산식은 데이터베이스의 스킬계산식을 말하는듯 하네요.
    VXA에는 스크립트가 아닌 데이터베이스에 이처럼 스킬계산식을 따로 작성해 줄 수 있는 부분이 있습니다. 다만 그 부분이 한줄에 글자수도 제한적이라 변수까지 쓰긴 힘들듯 하네요.

    (a.atk * (1 - b.def.to_f / (b.def + 100)))).to_i

    이와같이 식 전체를 괄호로 묶어서 to_i 메소드를 사용하는게 좋을듯 합니다.
    또한... 나눗셈의 경우 정수형과 소수형의 계산은 한쪽만 소수형이라도 결과는 소수형식으로 나온다는걸 알면 식은 더 짧아질 수 있게 되죠.

List of Articles
종류 분류 제목 글쓴이 날짜 조회 수
공지 묻고 답하기 가이드 습작 2014.06.14 12441
RMVXA 계산식 문제 (해결) 7 Vincent 2013.10.01 901
RMVXA 스크립트 에러 질문입니다 3 file 오늘은훈이좋군 2013.10.01 1190
RMVXA 장비 장착 관련 질문입니다. (해결) 1 Vincent 2013.10.02 1093
RMVXA 스크립트 관련 오류입니다. 3 file 스리아씨 2013.10.03 1107
RMVXA Rpg vxa 밤 스크립트 5 도스팡고3000M짜리 2013.10.03 1101
RMVXA [VXA] 아이템창 스크립트 수정하는 방법이 궁금합니다 1 file 서로게이트 2013.10.03 1709
RMVXA [VXA] 세이브를 4개로 한정하는 방법 1 file 서로게이트 2013.10.03 1180
RMVXA [VXA] 메뉴창에서 MP바만 지우는 방법 1 서로게이트 2013.10.03 1123
RMVXA [VXA] 메뉴창 크기/위치 조절방법 4 file 서로게이트 2013.10.03 1857
RMVXA 버튼 눌러서 이미지 삭제하기 2 따싯 2013.10.03 1049
RMVXA 기본 달리기(shift) 지우는 법 알려주세요!! 4 CHERRY 2013.10.04 1533
RMVXA 일본어로 된 타이틀을 한글로 바꾸니 게임이 실행 안 됩니다 3 file 2013.10.05 1331
RMVXA 치명타(크리티컬) 배율관련 (해결) 6 Vincent 2013.10.05 1443
RMVXA 전투형식 자체를 바꾸는건 무리겟죠? 2 아러리 2013.10.08 1066
RMVXA 반격, 마법반사 관련 (해결) 7 Vincent 2013.10.08 1018
RMVXA 허걱님이 만드신 마우스스크립트 아러리 2013.10.09 1058
RMVXA 캐릭터사전 대사창 위치 조절.. 2 file 은호 2013.10.09 1552
RMVXA 서로 피해를 입는 스킬, 양날의검같은.. 2 반내림 2013.10.10 1372
RMVXA 습작님의 TP와 MP의 동시표시에 관하여 4 반내림 2013.10.11 1258
RMVXA 맵을 작성할때.... 4 file 아아아ㅏ앙ㅇㅇㅇㅇ 2013.10.12 987
Board Pagination Prev 1 ... 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 ... 149 Next
/ 149