내가 하려던게 1번 짤방인데
그러니까 횃불 주위에만 배경이 그려지는 거임
평소에는 2번 짤방처럼 뒷 배경이 모두 그려지는데
동굴에 들어가면 횃불 근처만 배경이 밝혀지는걸 구현하고 싶었거든
이게 예전에 만든 안드로이드 게임 소스인데
그때는 기기 해상도가 480*800 이라서 그냥 여기에 맞게 배경 그림파일을 사이즈를 딱 맞게 오려서 작업했더니 그땐 겁나 잘 구동됬거든
그런데 그 기기에서만 잘 돌아가고 다른 해상도 기기에서도 잘 돌아가게 해상도 작업을 전체적으로 하고 있었어.
안드로이드가 좀 유별난게.. 내가 멍청하고 잘 몰라서 그러는지 모르겠지만
480* 800 짜리 그림파일을 넣고
그림파일변수.getHeight()
이런식으로 찍어보면 480이 아니라 전혀 엉뚱한 값이 나와..
기종별로 다르고 도대체 무슨 기준으로 원본 그림 크기를 지 꼴리는대로 바꾸는지는 모르겠지만
480* 800 그림 폭, 높이가 기기 내에서 인식하는건 640*1067 이런식으로 엉뚱하게 인식하고 거기에 맞게 그림을 그림
예를들어 UI 작업을 하는데 최대 해상도 600 * 800 기준으로 버튼 위치가 300,300,350,350 이라고 치면
이걸 다 비례식을 세워서 다시 값을 내서 그려줘야해
예를 들면
D_WIDTH랑 D_HEIGHT가 기기의 폭,높이 값이라고하자
ui.left = (ui.left * D_WIDTH) / 800;
ui.top = (ui.top * D_HEIGHT) / 480;
ui.right = (ui.right * D_WIDTH) / 800;
ui.bottom = (ui.bottom * D_HEIGHT) / 480;
이런식으로 하나하나 노가다를 해줘야 한단말야 내 수준에선 ㅎㅎ 뭐 함수 하나 만들어 놓고 돌려쓰면되긴하던데..
그런데 그런데 말이지 1번 짤방처럼 내가 해보려니까 도저히 안되는거
틀린곳에 없는거같은데 전부 배경이 이상하게 그려지는거임
일단 원리는 다음과 같아
2번 짤은 그냥 그림을 기기 최대해상도에 맞춰서 늘려서 그려버리면
1번 짤은
1.배경을 검은색으로 그림
2.그 위에 횃불의 Rect 중앙좌표 +80 씩 해서 left, top, right, bottom 으로 늘린 공간에 그 공간만큼 배경을 그림
와 그런데 골때리지? 횃불은 기기 해상도에 맞춰서 움직여야 하는데 기기가 지멋대로 그림 해상도를 바꿔버리니까 앞서 말한 방식대로 전부 변환을 해줘야해
아 그런데 아무리 내가 저 위의 코드대로 해봐도 안되는거 절대안돼
진짜 이유가 뭔가 로그켓으로 좌표란 좌표를 다 찍어봤는데
결정적인게 배경그림이랑 기기 해상도랑 불일치 하니까 비례식 기준을 기기 기준으로 세우면 안됨 ㅋㅋㅋㅋ
배경 그림파일 기준으로 세워야했던거여씀ㅋㅋㅋㅋㅋㅋㅋㅋ아 신난다
addRect.obj_fire[0].left = addRect.obj_Man.centerX();
addRect.obj_fire[0].top = addRect.obj_Man.centerY()- (44*D_HEIGHT)/480;
addRect.obj_fire[0].right = addRect.obj_Man.centerX()+(40*D_WIDTH)/800;
addRect.obj_fire[0].bottom = addRect.obj_Man.centerY();
//횃불 위치는 주인공 위치 귀속인데
if(intStage == 13 || intStage == 14 || intStage == 15){
addRect.obj_firebg.left = addRect.obj_fire[0].left * 800 / D_WIDTH * addImage.bGameBack.getWidth() / 800;
addRect.obj_firebg.top = addRect.obj_fire[0].top * 480 / D_HEIGHT * addImage.bGameBack.getHeight() / 480;
addRect.obj_firebg.right = addRect.obj_fire[0].right * 800 / D_WIDTH * addImage.bGameBack.getWidth() / 800;
addRect.obj_firebg.bottom = addRect.obj_fire[0].bottom * 480 / D_HEIGHT * addImage.bGameBack.getHeight() / 480;
//그 횃불은 기기 해상도 기준으로 떠있는거고 이걸 ㅋㅋㅋㅋㅋㅋㅋㅋㅋ또 원본 사이즈로 바꾼다음에 ㅋㅋㅋㅋㅋ다시 배경그림 사이즈로 바꿔야함ㅋㅋㅋㅋㅋㅋㅋ
cvs.drawBitmap(addImage.bGameBack, new Rect(fireX - (80 * addImage.bGameBack.getWidth() / 800), fireY - (80 * addImage.bGameBack.getHeight() / 480), fireX + (80 * addImage.bGameBack.getWidth() / 800), fireY + (80 * addImage.bGameBack.getHeight() / 480)), addRect.bg_fire, null);
//그리고 그렇게 변환한 Rect 중앙좌표를 그림중심으로 상하좌우 80씩 펼친 공간에 있는 배경그림을ㅋㅋㅋㅋㅋ 기기 기준으로 80씩 펼친 rect에 그려줌 ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ이게뭐야
아오 진짜 머리가 멍청하면 코드가 길어지는듯ㅜㅠ
근데 해결해서 기쁘다 이거땜에 다섯시간걸렸네 아무리 생각해도 이런 방식으로 할거같진 않는데 어쩔수없다..
엔진쓰면졸라쉬운데
진지글에 댓글 퀄좀 보소 - _-)
http://heartbrea.kr/bgmstorage/3301887
근대내기억에 캔버스쓸때 이미지해상도제대로나왓던걸로기억하는데
남자가여자 납치하는게임같은대 나오면 재밌게해보겠습니다
일단해결하고 담에 또보면 새로운 좋은 답이나옴. 그리고 친구가 그렇게말하면 친구보고 해보라고하세요 ㅋ