QnA
사용언어
(칠해주세요) => (C#,VB) |
사용툴 (VS) : Visual Studio C# 2010 Express |
운영체제 (OS) : Windows 7 |
안녕하세요 ^^ 대학교 교과과정을 2학년 마치고 군대에 입대해서
근무지에 깔려있는 VS C#을 통해 처음 C#을 접한 군인입니다.
인터넷도, 인트라넷도 안 되는 PC에서 작업중이라서 그냥 간단한 타일맵RPG(ex:바람의나라)를 만들고 있는데요 ㅎㅎ
맵이미지를 출력하는 과정에서 고민이 생겨서 질문드립니다!
한 맵의 최대크기는 100*100이며, 유저에게 한번에 보이는 크기는 15*15입니다.
저는 원래 유저가 움직이거나, 스킬을 쓰면
그때마다 맵전체의 이미지를 지정한 데이터를 바탕으로
Graphics.drawImage()를 이용해서
타일 먼저 쭉 출력하고, 그 위에 지형 출력하고, 장식물 출력하고, ...
이런식으로 출력하려고했는데요,
이러니까 일단 비효율적이기도하고,
(만약 유저가 오른쪽으로 한칸 이동했다면, 맵 이미지에서 맨 왼쪽 열 1줄만 지워지고 오른쪽 열이 1줄 추가되는 것 뿐인데,
맵 전체를 다시 그려야하니..)
0.25초마다 15*15칸에 (타일, 지형, 장식물, 몬스터, NPC, 스킬이펙트, 아이템)등을 그려야하니 컴퓨터가 많이 힘들어하고
속도도 느려서.. 해결방안을 찾고자 질문드렸습니다.
제가 생각해낸 아이디어는 이것입니다.
panel을 여러개 생성합니다. 이 panel들의 background color는 모두 투명합니다.
각각 (타일 + 지형 + NPC + 장식물)panel, (몬스터)panel, (스킬이펙트)panel, (아이템)panel입니다.
이중 가장 중요한 것이 (타일+지형+...)panel인데,
(타일+지형+NPC+장식물)은 게임진행중에 위치가 바뀔 일이 없기 때문에,
100*100 tile size로 panel을 생성한뒤에, 맵에 진입하는 순간 다 그려놓고 맨 아래에 깔아놓습니다.
그 후에 panel의 위치를 조정해서 User Charactor의 시점에 맞춰 15*15만 보여주고 싶습니다.
그런데 이게 가능한 방법인지도 모르겠고, 가능하다해도 구현을 어떻게 해야할지.. 잘 모르겠어서 질문드려봅니닷
혹시라도 다른 좋은 방법이 있다면.. 추천해주신다면 감사하겠습니다.. ㅎㅎ ^^