질문과 답변

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
툴선택 프로그래밍 초보입니다. RPG 쯔꾸르 시리즈 중 VX ace와 VX 중 무엇을 선택해야 할까요? 3 시우레 2016.07.17 296
기타 rpg vx 를 설치 하고 하얀방을 실행시키려 하는데 1 hiddenplayer 2016.07.17 454
RMVX BGM(알만툴 VX) 1 이겸 2016.07.17 242
RMVXA 최고 레벨 설정과 관련된 질문입니다. 1 Nejicross 2016.07.17 147
RMVXA 챕터설정 이 가능할까요? 7 파랑빛 2016.07.18 215
RMVXA 특수한 물약이 있는데 확률에 따라 50%는 즉사 50%는 풀회복이라는 효과인데요 AccelHacker 2016.07.18 136
RMMV 정품을 구매하기에 앞서 전투방식을 변경할 수 있는지 궁금합니다. 6 원더테인먼트 2016.07.18 1083
RMVX RPG VX 온라인 문의 입니다! 4 게임을만들자! 2016.07.19 188
RMVXA 전투 이벤트를 만들었는데 오류가 있어요. 1 RPG란무엇인가? 2016.07.19 69
RMMV 도와주세요ㅠㅠ 4 zhqnfdl20 2016.07.20 142
RMVX 주인공이 나무 윗부분을 걸어다녀요(?) 6 file Thyella 2016.07.20 249
RMVX 대화가 나올 때마다 언더테일처럼 띠디디디 소리가 나오게 하고 싶어요 3 아몰랑니가찾아보세여 2016.07.20 986
RMMV 전투 중 캐릭터칩을 임의로 이동시킬 방법이 있나요? 1 잠행인 2016.07.20 120
RMMV 왜 가로세로 순환설정이 씹히죠 file 게임잘날아가는닝겐 2016.07.21 56
RMVXA 대화가 나올때 언더테일 처럼 소리나오는 스크립트를 적용시키니 3 file AccelHacker 2016.07.21 747
RMVX 타이머 0초일때 게임오버가되는법 혹시아시는분 계신가요?? 6 BJ멜로 2016.07.21 221
RMVXA RPG 게임을 플레이하는 중에 다른 게임을 실행시켜서 그것이 게임오버되거나 특정루트로 가면 RPG도 게임오버 되는 방법 있나요? 4 AccelHacker 2016.07.21 366
RMXP 적이 피격시 흔들리게 하는방법 세레네키 2016.07.21 95
RMXP XP는 은/는, 이/가 같은 조사를 자동으로 출력해주는 스크립트 없을까요? file 케이나인 2016.07.22 125
툴선택 무료 게임제작툴 6 이겸 2016.07.22 1586
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