메뉴 건너뛰기

창조도시 기록보관소

RPG2K [고난도 시스템] 당구를 만들어 보자

2007.03.10 16:10

SSS 조회 수:637 추천:3

이번에 다뤄볼 시스템은 바로


 


당구,  빌뤼아~드    입니다  ㅡㅡ;


 


 


 


 


구상한건 벌써 1~2년전 이지만... 그때 잠시 시도하다가 엉뚱한데서 자꾸 막혀서


접어버린 시스템이죠 OTL


 


사실 2k 로 당구를 만들기란 참 어려웠습니다


힘의 배분이라거나 두 공이 부딧힐 경우 그 공들의 이동경로... 등등을 계산하는것이 2k의 사칙연산으로는 부족해서


좀 꽁수를 사용해서 억지로 끼워맞춘거라 1픽셀 단위지만 꽤나 큰 오차가 생기는 단점이 있기도 합니다만..


꽤나 재미있는(사람 피말리는) 연구였었죠    


 


이 글도 아마 2k비법이라기보다는... 거의 수학이 될거 같습니다 ㅡㅡ;


 


 


 


 


 


 


우선 당구를 만드는데 있어서 기본 설정(가정)은 한공이 멈춰있고 한공이 와서 부딧힐 경우 두 공이 튕겨나가는 각도는 90도,


그 속도는 두 공이 부딧히는 순간의 접선의 sin,cos 값에 비례하고 마찰 등으로 조금의 손실이 있다....   이지만


이제 실제로 맞는지도 모르겠고 나중에 나올 계산 등이 설정이랑 다를수도 있습니다 ㅡㅡ;    적당히 이해해 주시길.. ㅎㅎ


 


 


 


 


 


우선 공을 치는 것은 간단합니다    피타고라스를 이용해 원형으로 이동하는 조준점을 만들어서


조준점의 x,y*파워  의 속도로  이동을 시켜주면 되죠


 


그리고 나서 이제 공이 충돌하는 과정이 이 시스템의 대부분이라 할수 있는데요


 


 


우선 충돌 했는지를 판단하는것은 두 공의 거리를 이용합니다


두 공의 원점 사이의 거리가 구의 지름과 같을때, 충돌했다라고 판단 할수 있습니다


 


식으로 나타내자면 (구1x-구2x)^2 + (구1y-구2y)^2 <= 구지름^2     이 되겠죠


어느정도 오차가 생기기 때문에 = 가 아닌 <= 로 한것이구요


 


 


그리고 충돌을 했을 경우 공의 진로를 어떻게 변경 하느냐.. 하는것이 문제인데요


제 마음대로이지만 충돌시 힘의 이동을 계산하는 방법으로는


구1 -> 구2  로 가하는 충격과   구2 -> 구1 으로 가하는 충격을 동시에 적용시키면 될거 같았습니다


 


여기서 충격은 두 공의 접선에 수직인 방향으로 가해진다고 가정했고 구하는 방법은 다음처럼 했습니다..


 


구1,2의 접선과 구1의 속도벡터가 이루는 각 A 에 대한 sin 값 에 구1의 속도를 곱한 값이 충격량이 되고


구2의 중점의 x,y좌표에서 구1,2의 원점이 이루는 직선의 중점의 x,y좌표를 뺀 X,Y값을 이용해


(X,Y / r) * 충격량 만큼을 구2에 가산하고 구1에 감산한다.


 


여기서 이 각A가 제일 골치 아픕니다 ;;  접선만으로는 구할수가 없으니까요


어찌어찌 복잡하게 해서 구하긴 했었는데......   솔직히 기억이 안납니다 ㅜㅜ


 


그때는 미적분 삼각함수를 배우기 전이라 어려웠지만


지금생각해보니 삼각함수의 차(맞나?)  를 이용하면 구할수 있을거 같습니다만...


죄송합니다 그 공식도 기억이 안납니다 ㅡㅡ;    수능칠때도 안외웠던거라


 


하여간 구1과 구2를 바꾸어 역시 같은 계산을 반복합니다


 


 


 


 


접선를 구하는 방법은 두 구의 원점을 이은 선분을 90도 회전시키는것인데


원점의 좌표차를 이용해서 구한 선분이 (X,Y) 라면  법선은 (-Y,X),(Y,-X) 로 구하면 됩니다


 


그리고 여기서는 삼각함수가 필요하지만.. 2k에는 삼각함수가?  당연히 없죠


하지만 여기서 각도는 위의 A를 제외하고는 두 공의 접선 정도이니 그 접선의 기울기를 이용해서 삼각함수를 대신한것입니다..


우선 당구공은 구라서 두 공이 충돌 하는 순간 구의 원점사이의 거리는 구의 반지름의 두배, 즉 지름으로 항상 같기때문에


두 구의 원점x,y 좌표의 차 를 구의 지름으로 나누면 그것이 곧 sin,cos 값이 된다는 것...


귀찮고 오차가 생기는 제곱근 계산 등도 할필요가 없죠


 


 


 


그리고 실험은 안해봤지만 이대로 적용했을경우


 


두 구 중에서 한공만이 움직여서 부딧힐 경우에는 공이 충돌후 튕겨나가는 방향은 각각 


가해(?)구 는 접선의 방향으로,  피해(?)구 는 접선에 수직인 방향으로 튕겨나가고


그 속도는 가해구 는 구의 속도벡터와 두 구의 접선이 이루는 각의 cos 값,


피해구 는 그 각의 sin 값에 비례할것으로 예상됩니다... 


 


두 공이 모두 속도를 가지고 있다면 이래저래 해서 달라지겠지만요 ^^;


 


 


 


 


그리고 공이 벽에 부딧혓을 경우는 세로축에 부딧히면 X속도, 가로축에 부딧히면 Y속도의  부호를 바꿔주어


튕겨나오는 효과를 만듭니다


 


 


 


 


 


 


이것을 적용시키는 자세한 방법이라거나 사분면에 따른 법선,충격의 부호 설정 등등


다른 자잘한 부분은 생략 하도록 하겠습니다 ㅡ0ㅡ   그거까지 쓰려면 시간이 얼마나 걸릴지...


 


그리고 좀 건방지게 보일수도 있지만 우선 가장 큰문제는 이런 계산 들이니 이걸 이해하고 만들 분이라면


그런 부분은 쉽게 해결하실거라고 믿습니다 ^^;


 


 


사실 제가 쓰고도 이게 뭔가 싶어서 자세한 설명을 쓰려니 막막하기도 하구요 ㅋ

번호 제목 글쓴이 날짜 조회 수
531 변수의 수치를 픽쳐표기하기 간단 설명 [1] 린쌍 2007.05.29 148
530 경험치 게이지 간단 설명 [3] 린쌍 2007.05.26 227
529 2000용 케릭의 모션 도트 "몸통만" [5] ◈ÐÆЯΚ◈찰드 2007.05.12 472
528 명암칠할때 삐져나온것 없애기 [2] file 바람날개™ 2007.05.04 230
527 [도트강좌]스프레이질...[만드는방식] [7] file 바람날개™ 2007.05.02 318
526 [턴알]데미지2배로 늘려서공격하기!/한턴에여러번공격하기. [1] Dship 2007.04.28 224
525 코드진행 기초테크닉 [2] 나그네M 2007.04.14 196
524 그림 메뉴 2 [제 2의 타이틀 메뉴 (기본 메뉴편)] [거히 치트비법..] [3] file 우드록맨 2007.04.08 235
523 [초 노가다 시스템]그림 메뉴 [6] file 우드록맨 2007.04.07 426
522 화성학 기초 [2] file C코드선생 2007.03.12 158
» [고난도 시스템] 당구를 만들어 보자 [14] SSS 2007.03.10 637
520 이론강의 4. 시나리오 작성 - 내용 Vermond 2007.03.06 126
519 " 비트맵 이미지/색수 가 부정합니다 " [Solution Matter] [2] file 연지 2007.03.01 197
518 도트 어렵다고 생각마시오 [5] mk_brand_ 2007.02.27 551
517 RPG2003기본전투에서 몬스터움직이기+ 몬스터잔여체력확인 [9] Prick 2007.02.24 401
516 게임 만들기 프로젝트 -1- [5] 다크세이버™ 2007.02.22 336
515 메세지 플러스 3.1 수정버전 암호화 시 나타나는 문제 제거 [8] psh4989 2007.02.19 243
514 b-tool 배경음 예제! 연지 2007.02.17 53
513 선행처리기예제 연지 2007.02.17 53
512 [연구] 신개념 액알, 노가다를 최소한으로? [22] SSS 2007.01.29 792