조회 수 245 추천 수 0 댓글 0
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄 첨부
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄 첨부


위 예제에서 한가지 문제점은 적의 공격 대기 시간이 상당히 길다는 것이죠


그 이유는 적이 주인공의 위치로 포를 발사 하려고 해도
컴퓨터는 사람처럼 어림짐작으로 그 파워나 각도를 쉽게 구할수 없기 때문에
발사 가능한 모든 파워와 각도로 포를 좌표상으로만 발사해
가장 가까운곳에 떨어지는 파워를 찾아내는 방법을 사용했기 때문입니다.

그러자면 대략 1회 발사시 마다 100회이상의 반복,
거기다 파워가 2단위로 150개, 각이 5 단위로 10개가 존재 하기 때문에

포한번 발사를 위해 합쳐서 약 15만번의 반복을 해야 하는
초 노가다가 필요했죠.. (이거 무슨 인공위성 발사 궤도 계산도 아니고..)

그 때문에 약 10초 나 그 이상의 대기시간이 필요 했는데요

그래서 그 해결책을 연구한 결과 드디어 알아냈습니다!

공격자의 좌표, 타겟의 좌표, 바람의 세기를 이용해
필요한 파워를 구하는 공식을..

하지만 미리 말하지만 완전히 한번의 계산으로 끝나는것은 아닙니다.
바로 장애물이라는 것이 존재 하기때문에 아무리 파워를 잘 계산해도
날아가는중 장애물에 걸리는 경우가 있기 떄문이죠

그렇기 때문에 발사가능한 10개 정도의 경우를 시험해 장애물에 걸리지 않는
파워를 찾아서 발사 하게 됩니다.

그럼 본격적으로 그 공식을 설명 하겠습니다

우선 이 계산을 하는게 사용한 기본 공식은
고2 이상이시라면 이해하실 거라고 생각합니다..

아닌분도 계시겠지만 킁.. ㅡㅡ;

바로 등차수열의 합과 그 성질을 이용해 조금 변형한 공식입니다.

등차수열, 그러니까 1,3,5,7,9,11,... 처럼 간격이 일정한 수열이죠

이런 수열의 1~N 항까지의 각 항의 총합은
공차를 D, 항수를 N, 첫째항을 A, 총합을 Sn 이라고 할때

1/2N{2A+(N-1)D} = Sn 이렇게 구할수 있죠.. (부가 설명은 안하겠습니다.. 귀차니즘! ㅡㅡ)

이걸 전개하고 분수를 없애면

N*N*D + 2AN - DN = 2Sn  이 됩니다.

여기서 A에 임의의 초기 Y파워를 대입하고( 0~10 사이 정도가 적당하겠죠..)
D에는 중력가속도를 (여기서는 -1/20 으로 하겠습니다. 반복시마다 아래방향으로 1/20 씩 가속 한다는 뜻)  
대입 합니다.

그리고 Sn 에는 (공격자Y좌표 - 타겟Y좌표) 를 대입하죠

그렇게 다시 전개 하면

-1/20N*N + 2AN + 1/20N = 2Sn

= │N*N - 40AN - N│ >= │-40(공격Y-타겟Y)│

= │N*N - (40A + 1)N│ >= │40(타겟Y-공격Y)│
그렇습니다.. 이게 제가 구한 첫번째 공식입니다. ( 왜 절대값이 붙었는지는 묻지 마시길.. 귀찮습니다 ㅡ0ㅡ)

이 공식은 연직 위로 포를 쏘았다고 할때,
타겟 의 Y좌표까지 포가 이동하려면 몇번(N)의 반복을 해야 하는가..

하는 가장 작은 자연수N값을 구하는 공식입니다.
저 양변의 관계가 = 이 아니고 >= 인 이유는 인수분해가 깔끔하게 맞아 떨어지는 경우가
별로 없기 때문이죠.. 그래서 같은값으로 했다간 낭패를 볼수가..
N값을 구하는데도 사실 노가다가 필요 하지만..(컴이라면)
15만번 연산을 10초만에 하는 컴이 저정도가 대수 입니까 ㅡ0ㅡ

대략 N값은 많아야 500을 넘기 어려운데
500번을 한번씩 다 계산한다해도 해도 눈깜짝할새죠

어쨋거나 저 N의 값 자체는 중요 하지 않습니다.
Y파워는 앞에서 임의의 값을 지정해 뒀기 때문에

이 N값을 이용해 필요한 X파워를 구하는것이 문제죠

그 공식은

X파워 = (타겟X-공격X)/N

그러니까 N번 반복해서 공격자 위치에서 타겟 위치까지 이동하는
파워를 구하는거죠..

그런데 이것만 이었으면 좋으련만..

바람이 있네요... 쿨럭  
이거 해결한다고 수업시간 한시간내내 끄적거리다 수첩 뺏겼습니다 ㅡㅡ;

그런데 하고 나니 은근히 간단하더라구요

응용한 건 등차수열의 성질.
첫째항과 끝항 의 평균은 중항과 같다..

사실 이건 아니지만 약간 변형하는 맞는 말입니다 ㅡ0ㅡ

그리고 포가 날아가는동안 지속적으로 같은 크기의 바람이 적용되기 때문에
파워의 변화는 등차수열로 나타낼수 있죠..

그렇다면 처음 파워와 마지막 파워의 평균이 (타겟X-공격X)/N 이 되게 하면 되는일..
그럼 바람이 존재할때 포가 날아가는 동안 지속적으로 W 만큼 가속 된다고 하면
N번 반복하는 동안 NW 만큼 가속이 되는거죠

그러면 처음파워는 p,
마지막 파워는 P + NW ... 라고 하면

그럼 P + P + NW / 2 = (타겟X-공격X)/N 가 되면 된다는 계산이 나오네요.

그럼   P + NW/2 = (타겟X-공격X)/N 가 중항이 되어서 최종적으로

P = (타겟X-공격X)/N - NW/2

가 원하는 위치에 떨어지는데 필요한 초기 X 값이라는것을 알수 있습니다

그리고 Y파워를 1 정도 단위로 바꿔가며 위의 연산을 해 발사 시험을 해 가장 합리적(?) 인
파워를 찾아 발사하게 됩니다.

이걸로 설명은 끝났구요..
적다보니 왠지 알만툴이 아니라 수학 강의를 하는듯한.. ㅡㅡ;; 이런..
(수학은 강의할만한 실력도 아니지만 ㅋ)

이 방법을 적용하면 대기 시간이 길어야 3~4초, 대충 1~2초 정도로 줄어들것으로 예상 되네요..
이정도는 애교로 봐주시겠죠? ^^;


P.S
여기서 반복 주기는 1/60초를 기준으로 한것입니다
그러면 N의 값이 180이 나왔다면 날아가서 터지기 까지 3초가 걸린다는 뜻이고
한번 반복시마다 x파워,y파워 만큼 포탄이 이동하게 됩니다.
그렇기에 x,y파워는 많아도 10을 넘는일이 거의 없구요
(파워가 10이면 1초에 600픽셀.. 가로로 거의 두 화면을 날아가는겁니다)


수치를 설정할때
       A = 0~10 정도,
       D = -0.03 ~ -0.1 정도, (꼭 음수여야 합니다 우주로 날아가는 포탄을 보려는게 아니시라면. ㅡㅡㅋ)
       W = -0.020 ~ 0.020 정도의 값을 넣어줘야 좀 정상적이다 싶은 궤도가 나옵니다..
       특히나 바람은 0.1 만 돼도 "매미"를 연상케 합니다..
       (반복시마다 x파워에 W가 가산되기에 작은 값이라도 엄청난 힘)
       혹시라도 시험삼아 계산해 보실때 W에 5정도 값을넣고 이상하다고 하지 마시길.. ㅡㅡㅋ  
      
       그리고 D 의 값을 변경 하실때는 첫번째 공식의 40이 들어간 부분만 2*(-1/D) 로 바꿔 주시면 됩니다..
       예를 들어 D = -1/10 이라면  2*10 , 40을 20으로 바꿔주시면 된다는 겁니다..


----------------------------------------------------------------------------------------
이상 붙여넣기 신공
----------------------------------------------------------------------------------------





으음.. 겜동 살리기 프로젝트
제가 지금까지 실험했던거나 만들었던 시스템들을.. 하나하나 올려보려고 합니다
글이 많이 올라오면 어느정도 살아나리라고 믿으며.. 쿨럭

처음 소개할 시스템으로..

2X버전에서 가능한 포트리스를 만들어보는것입니다
자랑은 아니지만 구창도에서 이걸로 추천수 1위 먹었었...( 퍽!! 자랑이잖아!)

쿨럭 뭐 구창도가니 아직 있더군요
그래서 그 글을 그냥 베껴오기로 했으니 양해 바랍니다...


-P.S-
글로 써있는 공식들.. 작년 초에 썻던건데 몇달전에야 알아버렸습니다..

물리의 기본공식,
V=Vo + Vt**2   S= Vot +1/2 Vt**2 이었다는것! 쿨럭..  
으음.. 약간씩 변형이 되있어서 그 고생해가며 만들고도 뭔지 눈치를 못채고 있다가
XP버전으로 새로 만드는 중 물리수업을 듣다가 알아버린거죠.. ㅡ.ㅜ
내가.. 이거때문에.. 얼마나. 고생을.. 했는데 크어어헉~~~~~~~~~
뭐 그래도 바람적용 같은건직접만든거니.. 그걸로 위안을 해야죠 ;;;;

?

List of Articles
번호 분류 제목 글쓴이 날짜 조회 수
1004 언어/기타 게임마케팅 및 저작권(3) 카스-오로치 2006.08.08 232
1003 언어/기타 게임마케팅 및 저작권(4) 카스-오로치 2006.08.08 235
1002 언어/기타 zz [S's-S] 2006.08.08 237
1001 언어/기타 게임마케팅 및 저작권(2) 카스-오로치 2006.08.08 240
1000 언어/기타 ■ 코드의 활용 0편 - 강좌에 앞서.. 2005.10.08 245
» RPG Maker [겜살 프로젝트..?] 200X 포트리스 재탕...(스크롤압뷁) file [S's-S] 2006.04.13 245
998 언어/기타 장르별 게임 플랫폼(3) 카스-오로치 2006.08.08 249
997 언어/기타 [겜살 프로젝트..?] 200X 포트리스 재탕... 쿨럭 file [S's-S] 2006.03.10 259
996 언어/기타 나도 왕초보는 절대적 아니다! (下) 알피지2천 2006.07.09 260
995 언어/기타 마사님 예제 부탁드림니다. 석지명 2006.05.17 261
994 언어/기타 장르별 게임 플랫폼(2) 카스-오로치 2006.08.08 261
993 언어/기타 ■ 코드의 활용 0편 2005.10.08 263
992 RPG Maker 게임메이커 기본개념 걸인소년 2006.01.14 267
991 언어/기타 변수만으로 자동회복하기. 초보XPer 2006.01.14 270
990 언어/기타 코드의 활용 0편 2005.10.06 273
989 언어/기타 0.0 [S's-S] 2006.01.05 277
988 RPG Maker 뭐 중복일 가능성 도 있지만 변수의 정의 석지명 2006.05.18 277
987 언어/기타 아직 못본분들이 많은가..? [포트리스] 울궈먹기 ㅡㅡㅋ [S's-S] 2006.08.03 277
986 언어/기타 게임마케팅 및 저작권(1) 카스-오로치 2006.08.08 279
985 언어/기타 아직 못본분들이 많은가..? [포트리스] 울궈먹기 ㅡㅡㅋ file [S's-S] 2006.08.03 279
Board Pagination Prev 1 2 3 4 5 6 7 8 9 10 ... 51 Next
/ 51






[개인정보취급방침] | [이용약관] | [제휴문의] | [후원창구] | [인디사이드연혁]

Copyright © 1999 - 2016 INdiSide.com/(주)씨엘쓰리디 All Rights Reserved.
인디사이드 운영자 : 천무(이지선) | kernys(김원배) | 사신지(김병국)