본문 바로가기

개발/android43

게임에 꼭 필요한 난수, 간단하게 확률대로 발생시키기 게임을 만들때 수없이 사용되는 난수.. 이런 난수는 보통 오브젝트의 위치나 종류를 결정할때 사용된다. 예를 들어서 장애물이 임의의 위치에 나타나거나 보상아이템이 랜덤하게 나오는 경우이다. 하지만 이때에는 무작정 랜덤하게 나오는 것보다 장애물이 특정 위치에 더 자주 나온다던지, 보상아이템중 더 좋은 아이템은 적은 확률로 나온다던지 하고 싶을 경우가 있을것이다. 그래서 여기서는 난수를 확률대로 나오게 하는 간단한 나만의 방법을 소개하고자 한다. public class Rate { public int mTable[]; //확률 설정 public void set(int rate[]) { int table[] = new int[100]; //각각의 숫자들의 확률을 담을 테이블배열 int value = 0; //테.. 2014. 9. 14.
점의 선대칭 이동 공식을 코드로 짜보자 고1때 누구나 배우게 되는 직선의 대한 대칭이동! 이것이 내생에 정말로 활용될지는 몰랐다ㅎㅎ 앱을 만드는 개발자가 되면서 느끼는 것은 깊게는 아니더라도 이런 공식같은것이 있구나 하는정도만 알아나도 앱을 만드는데 무척이나 도움이 된다는 것이다..다시말해 깊게 공부할 필요가 없다ㅎㅎ 어차피 필요하게 되면 알아서 다시 공부한다ㅎㅎ 직선의 대한 대칭이동중 여기서는 점의 선대칭 이동을 코드로 변환해 보겠다.즉, 목적은 xy좌표점을 하나의 직선을 기준으로 선대칭이 되는 또하나의 xy좌표점을 찾는것이다. 먼저 선대칭 점을 찾는 공식은 이곳을 참고바란다. http://mathbang.net/465 http://www.mathfactory.net/node/367 여기서 이용할 내용은 대충 이렇다 1. 이동전 (x1,y1.. 2014. 8. 15.
[안드로이드] 간단하고 편리한 난수 발생 함수 만들기 게임을 만들다 보면 난수가 많이 필요하다특히 특정 범위의 난수가 그러하다 그래서 나름 안드로이드(자바), 아이폰(오브젝티브C)에서 사용할 수 있는 함수를 만들어 보았다 - 안드로이드(자바) public static final int randomNumber(int start, int end) {Random random = new Random();int result = 0;//범위의 시작이 끝보다 클경우 또는 같을 경우 if(start > end)return 0;else if(start == end)return start;//시스템에서 난수값을 받아 범위에 맞게 재조정한다result = (Math.abs(random.nextInt()) % (end - start + 1)) + start;return resu.. 2014. 6. 22.
가장 기본적이고 간단한 게임 충돌검사 게임을 만들때 가장 먼저 봉착하는 막막함이 충돌검사이다...적어도 나는 그랬다ㅎㅎ 물론 좌표이동 할때 곡선이동도 만만치 않지만ㅎㅎ충돌검사는 케릭터의 형태에 따라 여러가지로 검사를 해야 하기 때문에 그 숫자만큼이나 더골치가 더 아프다... 어쨋든 나는 사각, 마름모, 원, 선, 픽셀 충돌검사를 나름 내 식으로 만들어서 사용하고 있고 지금도 계속 개선중에 있다ㅎㅎ 물론 사각 대 마름모, 마름모 대 원... 이런식으로도 사용하고 있다 여기서는 이중 가장 간단하고 기본이 되는 사각 충돌검사를 보겠다 public boolean checkRect(Rect rect1, Rect rect2) { if(rect1.left = rect2.left) { if(rect1.top = rect2.top) return true;}.. 2014. 5. 20.
[엔진없이 게임만들자] 자유자재로 오브젝트 이동시키기 유니티나 코코스 엔진 없이 게임을 만드는 첫번째 시간! 물체 이동시키기~ 즉, 오브젝트 타켓팅 기법~ 참고로 혼자서 독학하여 터득한 내용이니 기존의 기법과 다소 차이가 있을 수 있다ㅎㅎ하지만 이론만 늘어놓는 내용이 아닌 내가 직접 만들어 출시한 앱에 사용되는 기법이다 일단 오브젝트를 이동시키 위해서는 방향 및 속도를 정하는 타켓팅 단계와타켓팅 정보에 따라서 오브젝트를 이동시키는 액션 단계.. 두단계가 필요하다.(타켓팅, 액션 구조는 내가 나름 만든 용어ㅎㅎ 또한 이구조는 이동뿐만 아니라 크기변화, 투명도변화 등에서도 같은 구조를 가진다) 먼저 타켓팅은 오브젝트를 이동시키는 명령어라 할 수 있다. 즉, 이동을 시작하는 시점에 넣으면 된다.그리고 액션은 좌표이동을 지속적으로 해야 하기 때문에 게임루프에 넣어.. 2014. 4. 14.
안드로이드에서의 가장 간단하고 확실한 칼만필터(Kalman Filter) 테스트 얼마 전 아는 지인을 통해 칼만필터(Kalman Filter)라는것을 알게 되었다. 오래전 기울기센서를 이용한 "운전좀하냐" 라는 게임을 만들때에 자동차가 엄청 흔들리고 불안정해서 온갖방법과 테스트를 해보았지만 결국 만족스러운 결과를 못내고 출시해야 했다ㅠㅠ 그런데 우연히 지인을 통해 알게된 칼만필터를 써보니!! 한방에 해결이 되는게 아닌가ㅎㅎ 물론 좀더 손을 봐야 할것 같지만 어쨋든 예전소스랑 칼만필터를 결합하니 제법 만족스런 결과를 얻어냈다 그래서 여기에 직접 칼만필터의 위력을 보여주고자 한다... 우선 칼만필터란 잡음같은것을 없에는 기법이다. 기울기센서에서는 민감한 센서에 의해 아주작은 손떨림에도 반응하여 값이 흔들리는 현상을 보정해 준다 기본원리는 간단하다. 기울기센서 값을 계속 저장해 두었다가 .. 2014. 3. 17.
안드로이드 앱 런칭후 데이터베이스 변경시 주의할점 단말기의 로컬 데이터베이스를 사용한 앱을 개발하다 보면 한번쯤은 겪게 되는것이 있다 바로 출시후 테이블 또는 필드추가, 내용추가변경이다 나도 처음에는 별생각없이 출시했다가 업데이트를 해야 하는데 디비를 바꾸어야 하는 상황이 있었다. 그래서 다 아시다시피 생성자에서의 버전을 전숫자보다 크게 넣고 onUpgrade() 에서 업데이트를 했다... 그런데 디비 버전이 한번이 아니라 여러번 바뀔경우 만약 사용자가 디비 1버전의 앱에서 사용하다가 오랬동안 사용을 안하고 곧바로 디비 3버전의 앱을 업데이트 받아 사용할경우 2버전의 디비변경사항도 적용해주어야 함을 늦게서야 깨달았다ㅎㅎ 당시에는 분명 디비 변경을 해줫는데 왜 그러나... 하고 엄청 심각했었는데 원인을 알고 나니 좀 허무했다ㅎㅎ 어잿든 아래와 같이 스위치.. 2014. 1. 20.
페이스북 안드로이드 sdk로 담벼락 글쓰기... 정리 2가지 페이스북 안드로이드 sdk로 어플을 개발하면서 제가 쓰던 글쓰기 코드를 정리해 보았습니다~ 페이스북 타임라인에 글을 올릴때 다음과 같이 크게 2가지로 분류된다 1. 이미지 및 동영상 올리기2. 링크글 올리기 페이스북 안드로이드 sdk를 이용할때도 이 두가지 분류에 따라서 사용법이 달라진다 1. 이미지 및 동영상 올리기 List permissions = session.getPermissions();if (permissions.containsAll(mPermissions)) { AsyncTask task = new AsyncTask() { @Overrideprotected Response doInBackground(Void... voids) { Bundle param = new Bundle(); //이미지 .. 2014. 1. 9.
스레드에서 View 변경시 Only the original thread…. 에러 대처법 게임을 만들다 보면 스레드를 자주 이용하게 된다. 그러다보면 Only the original thread that created a view hierarchy can touch its views 라는 에러를 맞다들이게 되는 경우가 반드시 찾아온다... 이 에러는 말그래로 오리지널 스레드... 즉, 앱 실행시 자동으로 생성되는 메인 스레드외에 직접 만든 스레드로 뷰위젯등을 컨트롤할려고 할때 발생한다... 예를 들어 TextView의 setText()같은 것이다... 나도 처음 게임을 만들 당시 이것 때문에 몇일을 고민했던 적이 있었다... 그러다 찾아낸것이 View의 Post()였는데 이방법은 특정사항에서는 작동이 안되는 문제가 있었다... 결국, 우연한 기회에 Handler 방식을 알게되었는데 역시 다른.. 2013. 11. 25.
배경 Layout을 손가락 터치로 따라 움직이게 하는 방법 화면을 손가락으로 터치하여 따라 움직이게 하고 싶을때는 아래와 같이 하면 된다. 이것은 내 작품중에 "지하철 어디있니" 라는 앱에서 배경을 스크롤 시킬때 사용하는 방식인데...해당부분만 따로 보기 좋게 정리한것이다. private LinearLayout mBgLayout;private int mTouchDownX, mTouchDownY; @Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.main); mBgLayout = (LinearLayout)findViewById(R.id.BgLayout);}@Overridepublic boolean onTou.. 2013. 10. 8.