질문과 답변

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 12456
RM2k 이벤트 중 제한시간 설정 - 1 2 카오스 울프 2012.09.21 993
RMXP RPG XP 게임 시작하기 전에 안내문 만드는데 스크립트 사용에 대해 4 허곰탱 2014.03.04 993
RMVX RPGVX 테스트플레이 로딩시간 1 아마추어게임즈 2013.11.29 994
RMVXA 사이드뷰 스크립트에서 몬스터 출현에 대해 질문드립니다. K레이터 2013.10.20 994
RMVXA VX ACE 툴에 내장된 캐릭터 생성기 머리색, 눈동자색, 피부색 추가 어떻게 하나요? 수수미 2013.11.23 994
RMVX 배틀 중 공격을 주고받았다 <<< 이거 뭐가 낮아서(높아서) 그러는 건가요? 2 정말귀인★ 2013.09.21 994
RMVX 기본 능력치는 어떤거와 연관이있나요? 1 디프링 2014.01.11 994
RMVXA ACE 한글 자판 적용방법 1 알피지공부하러 2014.04.11 994
RMXP rpgxp 연타스킬 만드는 법좀... 2 왕초메이커 2010.10.30 995
RMXP 배경음악 지속가능하게하는방법 있나요? 1 룰랄루루 2010.12.06 995
라이선스 기타 mnet 유료곡 배경음악하면 저작권침해? 2 펜슬 2011.02.12 995
RMVXA 업그레이드 배틀 시스템에 대해 질문이 있습니다. 1 빙룡군 2012.07.08 995
RMVXA 다른버전은 스크립트에서 타이틀화면 게임시작 이런거 수정할수있던데 ㄷㄷ.. 1 아름다음 2013.03.23 995
RMMV mv가 실행이 안됩니다. 제발 도와주세요 4 asasfwqfsafq 2016.07.07 995
RMVX 직업 전직 할때 렙제 거는법 2 dksrlxo46 2010.10.25 996
RM2k 2k 시야제한 픽쳐 질문입니다.. 2 file 커스터마이징게임 2014.05.09 996
RMVX 타일셋이 없어요.. 14 file 카즈마나 2013.06.06 996
RMVXA 강제종료후 파일열기 실패 1 file 돈돈치 2013.09.07 996
RMXP Skill Shop 스크립트 선행스킬 판정 추가 방법 4 모모아이 2012.06.26 997
RM2k 랄라라~ 오랜만에 질문좀 하나 할께요~ (Nameless) 2010.10.09 997
Board Pagination Prev 1 ... 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 ... 516 Next
/ 516