2012-04-06 4 views
0

Java로 2D 하향식 타일 기반 게임을 제작합니다. 자연스럽게 게임을 둘러보고 확대 할 수 있습니다. 현재 각 타일의 크기는 10x10 픽셀에서 100x100 픽셀까지 다양합니다. 현재 각 줌 레벨의 타일은 별도의 스프라이트 시트에 저장되어 프로그램 시작시 읽어 들여 버퍼링 된 이미지 배열에 저장됩니다. 나는 이것이 최선의 방법이 될 수 없다고 확신합니다.Java 타일 게임 확대/축소

나는 장기간 효율성을 높이기위한 팁을 찾고 있는데 100x100 타일 만 가지고 자바에서 동적으로 확장하는 것이 더 낫다. 어떻게 든 자바에서 벡터 그래픽을 사용하라 (나는 확실하다. 그러나 나는 구글이 나를 도울 수있을 것이라고 확신한다) 또는 무엇?

감사합니다.

+1

'svg's (벡터 그래픽)가 여기 좋을 것입니다. – Jon

+0

내가 머리를 주셔서 감사합니다 :) –

답변

1

나는 동적입니다. 일반적으로 컴퓨터 그래픽에서 그래픽 컨텍스트에 적용되는 행렬을 사용하여 그리는 모든 것을 수정합니다.

위치, 크기, 회전 등을 수정하는 데 사용됩니다. 카메라 위치를 모든 타일로 빼기보다는 그래픽 컨텍스트에 한 번만 적용한 다음 타일을 세계 위치에 그립니다. 그래픽 컨텍스트는 타일을 올바른 화면 공간에 배치합니다. 합니다 (

http://docs.oracle.com/javase/tutorial/2d/advanced/transforming.html http://www.javalobby.org/java/forums/t19387.html

+0

조언 주셔서 감사! –

+0

메인 그래픽 구성 요소에 affine transform을 사용하는 경우 컴퓨터가 렌더링되거나 가시 영역 밖에있는 것을 계산합니다. 당연히 게임이 모든 일반적인 것들을 계산해야하지만, 가시 영역뿐만 아니라 전체 맵에 대해서도 CPU 사용량이 훨씬 더 많습니다. 감사! –

+0

@DanielMessias 타일이 뷰 외부에 있으면 렌더링되지 않지만 낭비되는 리소스가 많이 남습니다. 컬링의 경우 코드에서 여전히 최적화가 필요합니다. 일반적으로 카메라 절두체가 포함 된 직사각형이 있습니다. 변환 및 확대/축소를 적용하여 수정해야합니다. 그런 다음이를 기반으로 컬링을 적용하고 보낼 내용 만 렌더링합니다. 보이지 않는 객체에 대한 행렬 계산을 원하지 않습니다! –

0

당신이 고정 확대하고있는 경우 (즉, 각 줌 레벨이가 camer에서 고정 된 거리), 유체 줌 반대 :

나는 다음 읽기를 제안한다 플레이어는 1 배, 2 배, 3 배 등 3.3x, 7.5x로 확대 할 수 있습니다.) 단순히 줌 변환을 적용하여이 문제를 해결하려고하면 많은 낭비가 있습니다. 이것은 가장 복잡한 접근법이 아니기 때문에 유혹을 불러 일으 킵니다. 구현 관점에서 보면 이해하기 쉽지만, 최대 축소시 X 방향으로 10 배, 10 배 더 큰 영역을 렌더링하게 될 것입니다. Y 방향이므로 영역을 렌더링해야하는 세계는 최대 확대시보다 100 배 더 큽니다. 또한 축소 할 때 텍스처가 하드웨어에서 부숴지는 방식을 좋아할 것입니다. 컴퓨터 그래픽은 광학 (서브 픽셀 렌더링)과 같지 않으며, 컴퓨터 그래픽에서 발생하는 다른 것들은 소프트웨어/하드웨어에서이 작업을 처리하면 텍스처가 매우 멋지게 보이지 않습니다.

유체 확대/축소를해도 여전히 렌더링되는 세계와 카메라 사이의 거리에 따라 디테일 레벨 텍스처를 동적으로 바꿉니다.

또한 10 단계로 확대 할 수 있습니까? 정말로 10 단계의 확대가 필요하십니까? 일반적으로 2D 게임에서 확대/축소 기능을 사용하면 특정 확대/축소 수준이 특정 활동 집합에 특히 적합하기 때문에 다양한 세부 수준에서 다양한 활동을 수행 할 수 있습니다. 이를 달성하기 위해 10 단계의 확대가 필요한 2D 게임을 기억하지 못합니다. 3-5는 내가 본 것 중에 가장 많이 본 것이고, 나는 그것이 충분하지 않다고 느끼지 못했다. 또한 10 단계의 확대/축소 수준마다 모든 확대/축소 수준에서 이미지를 생성하는 작업이 많은 것처럼 보입니다.

AffineTransform을 적용하면 좋은 생각처럼 들리 겠지만 상당히 비싸고 60fps의 성능이 필요하다면 이런 식으로 달성 할 가능성이 매우 낮습니다. 그래도 내 말을 듣지 마라. 시도해보고 얼마나 심하게 넘어 졌는지 보아라.

+0

당신의 요지를 봅니다. 너무 많은 줌 레벨 10 점에 동의합니다. 재미있는 프로젝트이므로 시간이 많이 걸리지 않습니다. 성능은 중요하지 않지만, 5가 넘지 않아도된다는 것에 완전히 동의합니다. 저는 단순한 게임에서 이미지 변환을 사용하는 것이 상대적으로 쉽습니다. 나,하지만 난 완전히 입력을 주셔서 감사합니다, 요점을 볼 :) –

+1

그 중 하나 또는 다른 중. 유체 확대/축소 (변환 포함)와 다른 세부 수준을 결합 할 수 있습니다. 예를 들어 중세 총 전쟁 II를 생각해보십시오. 축소하면 3D 모델이 텍스처 품질을 느슨하게합니다. 그리고 당신이 더 많이 축소하면, 그들은 2D SPRITES가됩니다 !! –

+0

또한 최대 확대는 "일반 줌"이 아닐 수도 있습니다. 따라서 10 배 큰 화면 영역을 표시하는 것은 그렇게 크지는 않지만 정상적이지 않을 수 있습니다. 그것은 모두 당신이 얼마나 많은 객체를 그리는 지와 텍스처 품질 (/ 픽셀 밀도)에 달려 있습니다. –

관련 문제