안드로이드 개발 질문/답변
(글 수 45,052)
800*480(landscape)해상도에서 서페이스뷰를 통해 게임을 만들고 있습니다.
근데 안드로이드 시뮬레이션의 크기를 작게 줬더니
역시나 그림이 짤려버리네요.(300*200)
먄약 배경만 그리는거라면 getheight 로 해결되겠지만,
전체적인 게임 구도, 캐릭터 움직임, 미사일 움직임 등이
800*480에 맞춰있는 상황이라 어떻게 하는게 최선일지 모르겠습니다.
각각의 좌표를 다시 일일이 계산해서 처리하는것도 꽤나 복잡할것같습니다.
서페이스뷰에서 x,y 같은 좌표개념이 아니라 퍼센트개념의 좌표는 없을까요?
2011.01.24 12:18:57
보통 FrameLayout 안에 Surface를 집어 넣고 getWidth() 와 getHeight() 를 얻어와서 작업을 많이 합니다만..
FrameLayout 을 상대배치 하면 자연스럽게 getWidth() 와 getHeight() 값들이 상대값으로 들어오죠..
2011.01.24 12:28:32
저도 같은 문제로 질문을 올렸습니다만, 속시원한 답변이 아직 없네요.....그리고 아즈라엘님 좌표값이 상대값으로 들어오긴 하는데요.....문제는 320x480으로 이미지를 만들었다고 하면 이걸 480x800짜리에서 돌리면 가로 길이는 320->480으로 자동 변환되지만 세로 길이는 480->800이 아니라 720 만큼만 늘어난다는 겁니다.....80도트의 여백이 생겨버려요.....질문하신 분도 저랑 같은 고민을 하고 계실 겁니다...
2011.01.24 12:30:04
구글은 어쩌자고 해상도 관리를 이 따위로 하게 해둔건지 도무지 이해되질 않네요.....십수년전 VGA 카드 초창기에도 해상도는 선택할 수 있게끔 했는데 말이죠.....기계마다 해상도를 맞춰서 작업해야 하다니 너무 무식한 방법입니다.....아이폰으로 갈아타고 싶은 충동이 마구 일어나네요....
2011.01.24 13:11:53
처음 어플리케이션 실행할 때 해상도를 가져와서 저장해두고 상대좌표로 프로그램을 작성한 뒤에 출력시 사용하면 큰 문제는 없을걸로 보입니다.
그리고 게임을 만드는데 서페이스뷰를 쓰는것보다는 oGL을 쓰는게 범용성면에서는 더 좋지 않을까 싶네요..
해상도 관리가 이따위가 아니라 오픈된 시스템이기 때문에 그렇습니다.
자동차마다 트렁크 크기 다 다르고 출력다 다른데 이따위로 차 만드냐고 하시는것과 마찬가지입니다.
2011.01.24 13:20:55
레디필님....트렁크 크기와 비교는 좀 무리가 있지 싶습니다......윈도우의 버전마다 지원되는 해상도가 제각각인 것과 같은 상황인데요.....메모리 크기를 트렁크와 비교하면 말이 되지만 이건 자동차마다 운전 방법이 다른 것과 같습니다......
2011.01.24 13:59:43
아이폰처럼 타겟보드가 단일화 되면 모를까 안드로이드 경우는 제조사에 따라 각각 틀려지기 때문에 구글의 맹목적인 지원은 어렵다고 보시면 됩니다.
레디필님께서 말씀하신것과 제가 처음에 달아 놓은거처럼..대부분 surface 혹은 glsurface 의 경우 화면 size 를 getWidth() 와 getHeight()
가져와서 image를 리사이징 합니다.
그리고 원하는 크기 만큼 짤라 쓰는데 이때 상대적인 방법으로 getWidth() / 2 이렇게 weight 방식을 많이 사용합니다.
어쩔수 없이 다시 그려야 한다는거죠..--;;
2011.01.24 14:07:06
디바이스의 w, h 크기와 메인으로 잡았던 w, h간의 비가 몇배인지
계산해서 그걸 x, y, w, h에 적용 하면 되지 않던가요?
320x480 타겟으로 개발해서 위 방법으로 480x800, 600x1024에 구동해봤는데
정상적으로 잘 동작하였습니다.



