본문 바로가기

개발/android43

사각형 말고 원형 충돌검사 게임상에서 가장 기본적인 충돌검사는 사각, 원, 선 검사라고 생각한다 왜냐하면 이 세가지의 개념을 조합하면 좀더 정밀한 다각형, 픽셀 검사를 할수 있기 때문이다 여기서는 단순하게 원형끼리의 검사를 살펴보겠다 원은 한점에서 일정거리 만큼의 영역을 가지는 도형이다 그래서 두 원의 영역이 겹치는 조건은 중심점끼리의 거리로 판단한다. 위와 같이 중심점 사이의 거리가 두 반지름의 합보다 크면 서로 떨어져 있는 것이다. 두점 사이의 거리는 중3때 배우는 공식을 사용하면 된다 (http://mathbang.net/138) 반대의 경우로 중심점 거리가 반지름의 합보다 작아지면 겹치게 된다. 즉, 이때가 충돌한 것이다. 충돌이긴 한데.. 완전히 겹치는, 다시 말해 한 원에 완전히 포함되는 경우는 반지름의 차로 계산한다... 2016. 1. 25.
알기 쉬운 안드로이드의 방위각 게임에서 케릭터를 이동시킬때 방위각이 필요하다. 이때 각도를 라디안으로 계산하면 편리하다. 시작점에서 끝점 방향으로 이동할때의 방위각을 구해보자. public float getRadian(float startx, float starty, float endx, float endy) { float x = endx - startx; float y = endy - starty; return (float)Math.atan2(y, x); } 거꾸로 방위각에서 방향벡터를 구해보자. public float[] getNormal(float radian) { return new float[] {(float)Math.cos(radian), (float)Math.sin(radian)}; } 케릭터 이미지를 방향별로 회전해야 .. 2015. 12. 28.
Bitmap 이미지를 byte로 바로 보낸다고? 그것도 소켓으로? 군대를 막 전역했을때 다시 완벽한 민간인이 되기 위해 책한권을 샀었다 바로 "TCP/IP 소켓 프로그래밍" 이었다 이때 처음 접한 네크워크 코딩술로 간단한 원도우용 채팅프로그램을 만들었고 졸업후에는 PC와 스마트폰간의 연결앱인 "키보드에디터"를 출시하였다. 물론 쫄닥 망했다ㅎㅎ 어쨌든 그후에도 가끔씩 소켓기반의 앱을 만들면서 자연스럽게 이미지 전송도 하게되었다 여기서는 비트맵이미지를 파일형태가 아닌 Byte단위의 원본으로 바로 보내는 것을 다뤄보겠다. 파일도 결국은 Byte로 보내는것이지만... 외부파일이 아닌 내부이미지를 불러와 바로 전송할때 유용할것이다~ -서버 public class Server implements Runnable { @Override public void run() { try { .. 2015. 11. 30.
이미지를 싹뚝 자를때 꼭 알아야 할 비밀 이미지를 전체가 아닌 일부분만 출력하고 싶을때 사용하는 기법이 Image Clipping 이다. 게임을 만들때는 없어서는 안되는 아주 고마운 녀석이다. 보통 Clipper 객체를 만들어 사용하는데... 어렸을때는 왜 굳이 객체까지 만들어서 이미지를 자르나.. 그냥 자르면 되지.. 라며 쓸데 없는것이라고 생각했었다. 하지만 어른이 되고 개발을 업으로 살다보니 조상님들의 지혜에 감탄하듯 그 이유를 깨닫게 되었다ㅎㅎ 아주 단순하고 지극히 당연하지만... 그래서 간과하기 쉬운 클리핑의 원리! 비밀 아닌 비밀같은 클리핑을 알아보자~ 위 그림처럼 클리핑은 이미지 원본크기와 출력크기가 다르다는 것이 문제이다. 또 원본좌표는 (0, 0)에서 시작되지만 출력좌료는 스크린좌표가 더해진다. 이것을 같은 크기와 좌표로 작업할.. 2015. 10. 26.
DialogFragment에 DismissListener를 쉽게 사용하는 방법 DialogFragment를 종료한 후 결과를 받아서 처리해야 할때가 있다. 당연히 이때는 DismissListener를 사용하면 된다. 하지만 그냥 사용하는것보다 약간의 튜닝을 하면 더 편하다. public abstract class DialogDismissListener implements DialogInterface.OnDismissListener { private HashMap mStrMap; private HashMap mIntMap; private HashMap mBoolMap; public void setValue(String key, String value) { if(mStrMap == null) mStrMap = new HashMap(); mStrMap.put(key, value); } .. 2015. 9. 21.
함수의 옵션을 블럭처럼 조합해서 사용해보자~ 소스를 짜다 보면 함수에 옵션을 넣어야 할 경우가 종종 있다 function(value1, value2, OPTION); 이런식으로 말이다. 그런데 비트연산자로 조합해서 쓰면 더 유용하다 function(value1, value2, OPTION1|OPTION2); 그렇다면 이 비트연산자 조합은 어떤식으로 적용되는 것일까? 먼저 "|"는 or로 두개중 하나만 참이면 참이 된다 예를 들면, 0 | 0 = 0 1 | 0 = 1 1 | 1 = 1 이것을 이용하면 두개의 조합이 가능하다 OPTION1 OPTION2 000 000 | 000 000 = 000 000 001 000 | 000 010 = 001 010 010 000 | 000 111 = 010 111 위와 같이 각각 한쪽을 000으로 비워두고 or을 .. 2015. 8. 24.
Fragment에서 startActivityForResult() 호출시 onActivityResult() requestCode 문제 Fragment에서 startActivityForResult()를 호출했을때 onActivityResult()의 requestCode가 잘못 올 때가 있다. 즉, 분명 requestCode를 100으로 호출했는데 65640와 같은 이상한 값이 나오는 경우이다. 해결방법은 간단하다. startActivityForResult()를 getActivity().startActivityForResult()로 바꾸면 된다. 아마도 Fragment에서 직접 호출하면 부모액티비티로 값이 전달되지 않는듯 하다. 도움이 되셨다면~ 정성으로 빚은 저희 앱! 많은 이용 바래요:) https://meorimal.com/index.html?tab=spaceship 우주선 - 방치형 인공지능 투자 체험기 미리 맛보는 인공지능 투자!.. 2015. 6. 22.
버튼 누름 효과를 만드는 2가지 방법 버튼이면 당연히 있어야할 누름효과! 눌렸을때와 누르지않았을때가 같다면 과연 버튼일까? 당연하지만 그래서 잃혀지기 쉬운 기능 버튼의 누름효과!! 안드로이드에서 기본적인 버튼은 누름효과가 있다. 하지만 나만의 예쁜 버튼을 만들려고 이미지를 넣으면 이런 효과는 사라진다. 이때 누름효과가 생기도록 하는 2가지 방법이 있다. 첫번째는 xml의 selector를 이용하는 것이다. res의 drawable 폴더에 button_selector.xml 파일을 만든다. 여기서 버튼의 일반이미지, 누름이미지를 다음과 같이 설정한다. 그리고 layout의 버튼에 selector를 적용한다. 두번째는 자바코드로 넣는 것이다. Button button = (Button)findViewById(R.id.Button); button.. 2015. 4. 19.
오로지 기울기 센서로만 가로세로 모드 체크하기 단말기를 가로 또는 세로모드로 고정시키고도 현재 가로로 눞여있는지 세로로 서있는지 알아봐야 할때가 있다. 이럴 때는 기울기 센서라고도 불리는 가속도 센서(Accelerometer Sensor)를 이용하면 간단하다. 아래는 세로모드에서 카메라로 사진을 찍었을 경우 단말기 상황(각도)에 맞게 사진을 회전시키는 예의 일부이다. mDegrees 각도로 사진을 회전시키면 된다. private SensorManager mSensorManager; private Sensor mAccSensor; private float mDegrees; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); se.. 2015. 2. 23.
Surface View에서 간단한 이미지버튼 손수 만들기 앱을 제작할때에는 버튼 클래스가 기본적으로 제공된다.. 하지만 SurfaceView 기반의 게임을 만들때는 그렇지 않기 때문에 손수 만들어야 한다.. 빠른 이해를 위해 모든 군더더기는 다 빼고 이미지로만 이루어진 버튼 클래스를 만들어 보겠다.. 클래스 public class GraphicButton { public static final int IMAGE_UP = 0; public static final int IMAGE_DOWN = 1; private Bitmap[] mImage; private Rect mRect; public int mImageNum; public GraphicButton(Rect rect) { mRect = rect; mImage = new Bitmap[2]; mImageNum =.. 2014. 10. 19.