์ด ํฌ์คํ ์ ์ฟ ํก ํํธ๋์ค ํ๋์ ์ผํ์ผ๋ก, ์ด์ ๋ฐ๋ฅธ ์ผ์ ์ก์ ์์๋ฃ๋ฅผ ์ ๊ณต๋ฐ์ ์ ์์ต๋๋ค.
๋ฐ์ํ
์๋ฌธ : madchick.egloos.com
jruby๋ ๋ธ๋ก๊ทธ์ ๋๋ฌ๊ฐ๋ค๊ฐ ๋ฐ๊ฒฌํ ๋ฉ์ง Java 3D ๊ฒ์์์ง์ ์๊ฒ๋์๋ค.. ์์ ๋ค์ ์์ง์ ์ฐ์์ฑ์ ํ๋ณดํ๊ธฐ ์ํด Quake 2 ์์ค๋ฅผ ์๋ฐ๋ก ํฌํ ํด๋ ผ ์์ค๋ฅผ ๊ณต๊ฐํ๋๋ฐ, ์ด์ผ ์ด๊ฑฐ ์ ๋ง ๋ฉ์ง๋ค.. ๊ฐ๋ง์ ์ดํด๋ฆฝ์ค ๋์์ ๋น๋ํด ์คํ์์ผ๋ณด๋ ๋ฉ์ง๊ฒ ์ ๋์๊ฐ๋ค.. ์ง์ ๊ฒฝํํด๋ณด๊ณ ์ถ์ ์ฌ๋์ ์ด ๋ฉ์ง ๊ฒ์ ๋ง๋ ์ฌ๋๋ค์ ํํ์ด์ง๋ก ๋๋ฌ๊ฐ์ ์์ค๋ฅผ ๋ค์ด๋ก๋ ๋ฐ๊ณ , ์์ค์ ๊ฐ์ด ๋ค์ด์๋ ํ ์คํธ ํ์ผ ๋ด์ฉ๋๋ก ๋ฐ๋ผํ๋ฉด ๋๋ค.. (ํํ์ด์ง ๊ตฌ๊ฒฝํ๊ธฐ)
ํ ํ์ด์ง์ ๋๋ฌ๊ฐ๋ณด๋ฉด "Jake 2 Play Now" ๋ผ๋ ๋ฒํผ์ด ์ข์ธก ๋ฉ๋ด ํ๋จ์ ์๋๋ฐ, ์ด๊ฒ๋ง ํด๋ฆญํ๋ฉด ์คํ๋๋ ๋ชจ์ต์ ๊ตฌ๊ฒฝํ ์ ์๋ค.. ๋ณต์ก์ค๋ฝ๊ฒ ๊ฐ๋ฐํด ์ค์นํ๊ณ , ์์ค์ฝ๋ ๋ค์ด๋ก๋ ๋ฐ๊ณ , ๋น๋ํด์ ์คํ์ํฌ ํ์๊ฐ ์๋ค.. Java Web Start ๋ผ๋ ๊ฒ์ด ๋ญํ๋ ๋์ธ๊ฐ ํ๋๋ ์ด๋ด๋ ์ฌ์ฉํ๋ ๊ฒ์ธ๊ฐ ๋ณด๋ค.. ์น์ ํตํด ๊น๋ํ๊ฒ ์ค์น๋๊ณ ์คํ๋๋ ๋ชจ์ต์ด ๋ฉ์ง๋ค..
์์ค์ฝ๋ ๊ฐ์์ ์ํด ํ์ํ ํ๋ก๊ทธ๋จ์
- Eclipse : ๋ด๊ฐ ์ฌ์ฉํ ๋ฒ์ ผ์ 3.1.2์ธ๋ฐ, ์ต์ ๋ฒ์ ผ์ ์๋๊ฑฐ๋ค.. ์ค์นํ์ง 1๋ ์ ๋์ ๊ฒ ๊ฐ์ผ๋.. 3.x ๋ฒ์ ผ๋ง ์ฌ์ฉํ๋ฉด ๋ฌธ์ ์์ด ๋น๋๊ฐ ๊ฐ๋ฅํ ๊ฒ ๊ฐ๋ค..
- JDK
: ๊ฐ์ฅ ์ต์ ๋ฒ์ ผ์ธ 1.5๋ฅผ ์ค์นํ๋ผ๊ณ ํ๋ค.. ํ์ง๋ง, 1.4 ๋ฒ์ ผ์์๋ ์คํ๋๋๋ฐ ๋ฌธ์ ๋ ์๋ ๊ฒ ๊ฐ์์ (Jake 2
Play Now๋ก ์คํ๋๋ ๋ชจ์ต์ ๊ตฌ๊ฒฝํ๋๋ฐ JDK ์ต์ ๋ฒ์ ผ์ ์ค์นํ๋ผ๋ ๋ฉ์์ง๋ ๋์ค์ง ์์์๋ค.. ๋ด ๋
ธํธ๋ถ์ JDK
1.4๊ฐ ์ค์น๋์ด ์์๋๋ฐ..) ์์ค์ฝ๋ ๋น๋๋ 1.5 ์ค์น์์ด ํด๋ดค๋ค..
์ง๊ธ ์ฐธ์ฌ์ค์ธ ํ๋ก์ ํธ ํ๊ฒฝ์ด JDK 1.4๋ก ์ธํ ์ด ๋์ด ์๋๋ฐ, ๊ดํ JDK 1.5๋ฅผ ์ค์นํ๋ค๊ฐ ์๋๋ฉด ๊ณจ์น ์ํ ๊ฒ ๊ฐ์์๋ฆฌ.. ๋ฌผ๋ก JDK๋ฅผ 1.4์ 1.5๋ฅผ ๋ชจ๋ ์ค์นํ๊ณ ์ฌ์ฉํ๋๋ก ์ธํ ํ๋ ๋ฐฉ๋ฒ์ด ์์ ๊ฒ ๊ฐ์ง๋ง, ํ์คํ์ง ์์์ ๋ชจํ์ ํด๋ณด๊ธด ์ซ์๋ค.. ์์ฆ์ ์ด๋ฐ ์ ๋ฐ ์คํํด๋ณผ ์๊ฐ์ด ๋๋์น ๋ชปํ๊ฑฐ๋ฉ.. - Quake 2 : ๊ฒ์์ด ์คํ๋๋๋ฐ ํ์ํ ๋ฐ์ดํฐ ํ์ผ๋ค ๋๋ฌธ์ ํ์ํ๋ค.. ์ ํ์ด ์์ผ๋ฉด ์ข๊ฒ ์ง๋ง, ๊ทธ๋ฅ ๋๋ ค๋ณด๋ ์ ๋๋ผ๋ฉด ๋ฐ๋ชจ๋ฒ์ ผ์ ๋ค์ด๋ก๋ ๋ฐ์ ์ค์นํด๋ ๋๋ค.. ๋ฐ๋ชจ๋ฒ์ ผ์ ๊ฒฝ์ฐ ์ ์ผ ์ฒ์ ์์ ๋ถ๋ถ์ ๋งต ๋ช๊ฐ๋ง ์ฆ๊ธธ ์ ์๋ค..
๊ณต๊ฐ๋ C ์์ค์ฝ๋์ ์๋๋ฅผ ๋น๊ตํด๋ณด๋ฉด, ์ฐจ์ด๋ฅผ ๊ฑฐ์ ๋๋ ์ ์์ ์ ๋๋ก ์ ๋์๊ฐ๋ค.. ํํ์ด์ง์์ ๋ฒค์น๋งํฌ ๋ถ๋ถ์ ๋ณด๋ฉด C ์ฝ๋์์ ์๋๋น๊ต๋ฅผ ํด๋จ๋๋ฐ, ์ผ์ ์ ๋์ ํ๋์จ์ด๋ง ๊ฐ์ถฐ์ง๋ฉด ์คํ๋ ค C ์ฝ๋๋ณด๋ค๋ ๋ ๋น ๋ฅธ ์ํฉ์ด ๋๋ค.. ์ด์ ์๋ฐ๋ก๋ 3D ๊ฒ์์ ๋ง๋๋๋ฐ ์๋ฌด๋ฐ ๋ฌธ์ ๊ฐ ์๋ค๊ณ ํ๋๋ฐ, ๊ธ์ ๋ด๊ฐ ๋ณด๊ธฐ์ ๊ทธ ๋ฐ๋์ด๋ค.. ์๋ฐ๊ฐ ์ฒ์ ๋ฑ์ฅํ๊ฒ ๋ด๊ฐ ๋ํ 4ํ๋ ๋์ธ 96๋ ๋ ์ธ๋ฐ, ์ด์ ์ ๋ง ๋ฑ 10๋ ์ด ์ง๋ฌ๋ค.. ํ์ง๋ง, 10๋ ์ด ์ง๋๋๋ก ํ์ฌ๊น์ง๋ VM์ ์๋ ๋ฌธ์ ๊ฐ ํด๊ฒฐ๋์ง ๋ชปํ ์ํ๊ณ , ๊ทธ ๋๋ฌธ์ 3D ๊ฒ์๋ถ์ผ๋ ์๋ฐ๊ฐ ๋๋ค ์๋๋ค ๋ ผ๋์ด ์๋ ๊ฒ์ด๋ค.. Quake 2์ Jake 2๋ฅผ ๋น๊ตํ์ฌ ์ด์ ๊ฐ๋ฅํ๋ค๋ผ๋ ์ฃผ์ฅ์ ์ข ์ค๋๋ ฅ์ด ์๋ ๊ฒ์ด Quake 2๊ฐ 10๋ ์ ๊ฒ์์ด๋ผ๋ ๊ฒ์ด๋ค.. ์์ฆ์์ 3D ๊ฒ์๋ค์ Quake 2์ ๋น๊ตํ๋ฉด ํจ์ฌ ๋ ํ๋ คํ 3D ํ๋ฉด์ ์๊ตฌํ๋ค.. ์ด์ ์์ผ 10๋ ์ ๊ฒ์์ ๋ฐ๋ผ ์ก๊ณ ์ ์๋ฐ๋ 3D ๊ฒ์ ๊ฐ๋ฐ์ด ๊ฐ๋ฅํ๋ค๊ณ ํ๋๊ฑด ์ข.. ๋ฌผ๋ก , 2D ๊ฒ์๋ง ์๋ ์๋ฒ ๋๋ ํ๊ฒฝ์์ ์ด์ Quake 2 ์ ๋์ ๊ทธ๋ํฝ์ด (Quake 2 ๊ทธ๋ํฝ์ด ์ง๊ธ ๋ด๋ ํ์ ์ฐ๋ ๊ธฐ ์ ๋๋ ์๋๋..) ๊ฐ๋ฅํ ๊ฒ์๋ค์ด ๋์๊ฐ ์ ์๊ฒ ๋์๋ค๋ ๊ฒ์ ์ ๋ง ๊ธฐ์ ์ผ์ด๊ธด ํ๋ค.. ๊ทธ๋ฆฌ๊ณ Quake 3, Quake 4 ๋ฑ์ ์์ค๊ฐ ์๋ฐ๋ก ํฌํ ๋์ด C์ ๋๋ฑํ ์๋๋ก ์คํ๋๋ ๋ ์ด ๋ค๊ฐ์ค๋ ์๋๊ฐ ์ ์ ๋นจ๋ผ์ง ๊ฒ์ด๋ค.. ํ์ง๋ง, ์์ฆ์ ๊ฒ์๋ค์ ๊ฐ์ฅ ์ต์ ํ, ์ต๋ํ์ H/W ์ฑ๋ฅ์ ์ฌ์ฉํ์ฌ ๋ณด๋ค ๋ ํ๋ คํ ๊ทธ๋ํฝ๊ณผ ์์ง์์ ๋ง๋ค์ด ๋ด๋๋ฐ ์ง์คํ๊ณ ์๊ธฐ ๋๋ฌธ์ ์์ง์ ์๋ฐ์์์ 3D ๊ฒ์์ ๊ฐ๊ธธ์ด ๋จผ ๊ฒ ๊ฐ๋ค.. ์๋ฐ๋ก ๋ง๋ค์ด์ง ์คํผ์ค ํ๋ก๊ทธ๋จ๋ ๋์์ผ๋ ์ด์ ๊ณง 3D ๊ฒ์ ๋ถ์ผ์๋ ๊ธฐ๋๋ฅผ..
๊ทธ๋ด ์ฌ๋์ ๊ฑฐ์ ์๊ฒ ์ง๋ง, Jake 2 ์์ค๋ฅผ JDK 1.4์์ ๋๋ ค๋ณด๋ ค๋ ์ฌ๋์..
- ์ดํด๋ฆฝ์ค๋ฅผ ์คํ์ํจ ํ CVS ํผ์คํํฐ๋ธ๋ก ์ ํํด์ CVS ์ ์์ ํ๋ค..
(์ CVS repository๋ฅผ ์๋์ ๋ด์ฉ์ ์ ๋ ฅํด ๋ง๋ ๋ค.)
host : jake2.cvs.sourceforge.net
repository path : /cvsroot/jake2
user : anonymous
password : ์์
connection type : pserver - ์ ์์ด ๋๋ฉด ํธ๋ฆฌ์ HEAD ๋ผ๊ณ ๋ณด์ผ ๊ฒ์ด๊ณ ๊ทธ ๋ฐ์ jake2๋ผ๊ณ ์๋ค.. ๋ง์ฐ์ค ์ฐ์ธก ํด๋ฆญ์ ํด์ Checkout As.. ๋ฅผ ์ ํํ๊ณ ์ํ๋ ์์คํ์ด์ค ๋ช , ํ์ผ ๊ฒฝ๋ก ๋ฑ์ ์ ๋ ฅํ๋ฉด ์ดํด๋ฆฝ์ค์ฉ ์์คํ์ด์ค๋ฅผ ๋ง๋ค๊ณ ์ ํํ ๊ฒฝ๋ก์ ์์คํ์ผ๋ค์ ๋ค์ด๋ก๋ ๋ฐ์์ค๋ค
- Java ํผ์คํํฐ๋ธ์์ src/jake2/Jake2.java ๋ฅผ ๋ง์ฐ์ค ์ฐ์ธก ๋ฒํผ ํด๋ฆญํ์ฌ Run
As -> Run์ ์ ํํ๋ฉด ๋ค์ด์ผ๋ก๊ทธ ์ฐฝ์ด ํ๋ ๋ฌ๋ค.. Java Application์ ์ ํํ๊ณ "New" ๋ฒํผ์
ํด๋ฆญํ๋ฉด ์ต์
๋ค์ ์ง์ ํ ์ ์๋ ํ๋ฉด์ด ๋ํ๋๋๋ฐ Arguments ํญ์ ์ ํํ ํ์ VM arguments ๋ถ๋ถ์
-Xmx80M -Dsun.java2d.noddraw=true
-Djava.library.path=lib/jogl/windows;lib/joal/windows;lib/lwjgl/windows
๋ผ๊ณ ์ ๋ ฅ์ ํ๋ค.. - ๋น ๋๋ฅผ ํด๋ณด๋ฉด ์๋ฌ๊ฐ ์ฐ์์ ๋จ์ด์ง ๊ฒ์ธ๋ฐ assert (f >= 0) : "negative time and cursor bug"; ์ด๋ฐ ๊ตฌ๋ฌธ ๋๋ฌธ์ด๋ค.. Java 5 ๋ถํฐ ์๋ก ์ถ๊ฐ๋ ๋ฌธ๋ฒ์ธ๊ฐ๋ณธ๋ฐ, ์ ๋ชจ๋ฅด๊ฒ ๊ณ .. ์ด๋ฐ ์ ๊ฒ๋ฌธ์ ์์ด๋ ์คํ๋๋๋ฐ ๋ฌธ์ ๊ฐ ์์ผ๋ ๋ชจ๋ ์ฃผ์์ฒ๋ฆฌ.. ๊ทธ์ธ์ ๋ง์ ๊ฒฝ๊ณ ๋ค์ด ๋จ์ด์ง๋๋ฐ ๊ฑด JDK 1.5๋ฅผ ์ฌ์ฉํ๋ค๊ณ ํด๋ ๋ ๋งํ ๊ฒ๋ค์ด๋ ๋ฌด์..
- ๋ ํ๋์ ์๋ฌ๋ JDK 1.4์๋ ์๋ System.nanoTime() ์ ์ฌ์ฉํ๋ค๋ ๊ฒ์ธ๋ฐ..
base = (long)(System.currentTimeMillis() * 1000000); ์ด๋ฐ ์์ผ๋ก nanoTime์ ์ฌ์ฉํ๋ ๊ณณ์์๋ ๋ฐ๋ฆฌํ์์ ๋๋ ธํ์์ฒ๋ผ ๋ง๋ค์ด์ฃผ๋ ์ฝ๋๋ก ๋ฐ๊ฟ์คฌ๋ค.. 2๊ตฐ๋ฐ๋ง ์ฃผ์์ฒ๋ฆฌํด์ฃผ๊ณ ์์ ํ๋ฉด ๋๋ค.. - Q2DataDialog.java ํ์ผ์ ์ปจ์คํธ๋ญํฐ ๋ถ๋ถ์ ๋ณด๋ฉด Quake 2 ๋ฐ์ดํฐ ํ์ผ๋ค์ด ์๋ ๊ฒฝ๋ก์ ์ด๊ธฐ๊ฐ์ ์ค์ ํ๋ ๋ถ๋ถ์ด ์๋๋ฐ, ๋งค๋ฒ ์ง์ ํด์ฃผ๊ธฐ ๊ท์ฐฎ์ผ๋ฏ๋ก ๋ด ํ๋๋์คํฌ์ ๊ฒฝ๋ก๋ฅผ ์ด๊ณณ์ ํ๋์ฝ๋ฉ ํด๋ฒ๋ ธ๋ค..
// dir = home + sep + "Jake2" + sep + "baseq2";
dir = "C:\\Project\\madchick\\Game\\Quake II\\baseq2";
์ญ ์, ์๋ฐ์ฝ๋์ ๊ฐ์ฅ ํฐ ๋งค๋ ฅ์ Write Once, Run Everywhere.. ํญ์ ๋ชจ๋ ์ํฉ์์ ๊ทธ๋ฐ๊ฑด ์๋์ง๋ง, Jake 2์ ๊ฒฝ์ฐ๋ ์์ฃผ ๋ํ์ ์ธ ์ ์ฉ ์.. ํ๋ฒ ๋น๋ํ๋ฉด ์๋์ฐ์ฆ, ๋ฆฌ๋ ์ค, OS X ๋ฑ์ ํ๊ฒฝ์์ ๋ค ์ ๋์๊ฐ๋ ์คํ์ฝ๋๊ฐ ๋์จ๋ค.. ์ด๊ฑด ์ ๋ง ๋งค๋ ฅ์ ์ธ ๋ถ๋ถ์ด๋ค..
2008.08.28
๋ ธํธ๋ถ์ ํฌ๋ฉงํด ์๋ก ์ธํ ์ ํด๋ณด๋๋ฐ, ์ค๋ฅ๊ฐ ๋๋ ์์์ด ์ข ํ๋ฆฌ๋ค.. ์ ํ๋ฆฟ์์ ์ค๋ฅ๊ฐ ๋๋๋ฐ, ์ด๊ฑด ๋ฌด์ํ๊ณ ๋๋จธ์ง ์ค๋ฅ๋ค์ ๋ชจ๋ assert ๊ด๋ จ๋ ๋ถ๋ถ์ธ๋ฐ, ๋ชจ๋ ์ฃผ์์ฒ๋ฆฌ~
์~ ๊ทผ๋ฐ, ์๋ฌด๋ฆฌ ํด๋ ์ ์์ค๋ก๋ ๋น๋๊ฐ ์ ์๋๋ค.. ์ ์ฅ..
๋ฐ์ํ