달력

4

« 2024/4 »

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30

cocos2d-x의 Move액션은 크게 MoveTo와 MoveBy로 나뉘는데

 1. 해당 액션을 수행할 시간을 갖는다.

 2. 현재 위치에서부터 목표 지점까지 일정한 속도로 움직인다.

이와 같은 특징을 가진다.


하지만,

하나의 액션이 끝나기 전에 다음 동작에 대한 입력이 들어올 경우가 있다.

이때는 애가 동작이 끝나기 전에 다음 명령을 받고는, 움직이던 중간의 위치를 현재값으로 잡고 다시 목표지점까지의 거리를 계산하여 주어진 시간만큼 움직이게 된다.

이렇게 되면 프로그래머가 예상하지 못했던 기이한 속도로 움직이는건 물론이고, 생각지도 못했던 위치로 움직이기까지 한다.

(내 예상은 기본적으로 MoveTo는 MoveBy를 기반으로 계산하는게 아닌가 싶다.)


이 문제는 대개

 1. 한 동작이 끝나기 전에 다음 동작이 들어와서 이 두개를 중첩하여 수행한다.

 2. 고정된 시간값에 위치나 좌표값이 달라지기 때문에 속도가 달라진다.

이 두가지 요인에 의해서이다.



내가 만든 tiny Flight의 한부분을 보면

        //아래와 같이 시간값을 고정으로 주면, 거리가 멀수록 빠르고 가까울수록 느리게가는 현상 발생
        //spr->runAction(MoveTo::create(1.0f, touchPos));
 
        //그렇기 때문에, 피타고라스의 정리를 이용해 현위치-터치위치간 거리를 구해서
        //시간을 나눠줌으로써 거리에 관계없이 일정한 속도로 움직이도록 해준다.
        float distance = sqrtf((touchPos.x - pos.x)*(touchPos.x - pos.x) + (touchPos.y - pos.y)*(touchPos.y - pos.y));
 
        //단, 이렇게 구한 값은 픽셀값이므로 값이 크기때문에 적당히 줄여서 계산해준다.
        auto action = MoveTo::create(distance / 500, touchPos);
 
        //이미 이동중 반복 입력시 해당 동작을 중지하고 다음 위치로 옮기기위한 액션 태그 설정
        action->setTag(TAG_ACTION_PLAYER_MOVE);
        spr->runAction(action);

이런 부분이 있다.


즉, 위에서 언급한 문제를 해결하기 위해서는

 1. 액션에 태그를 준 뒤, 한 객체가 움직일 때는 runAction과 stopAction을 이용해서 한번에 하나의 액션만 수행하게 한다.

 2. 현재위치 - 목표 위치간의 거리와 시간값을 이용하여 일정한 속도로 움직이도록 해준다.

이 두가지의 테크닉이 필요하다.

:
Posted by 웽웽

동일한 프로젝트를 다른 버전의 VS에서 컴파일 할 때 


error LNK2038: '_MSC_VER'에 대해 불일치가 검색되었습니다. ......


이런 에러가 날 수 있다.




이 경우를 해결하기 위해서는


1) 프로젝트 속성 -> 구성속성 -> 일반

인터넷 상에서는 플랫폼 도구 집합을 아래 사진과 같이

 Visual Studio 2012(v110) 에서 Visual Studio 2010 (v100)으로 변경하라고 했는데 나는 v100이 없어서 <부모 또는 프로젝트 기본값에서 상속>을 선택했다.



2) 프로젝트 속성 -> 구성속성 -> 코드 생성


다중 스레드 디버그 DLL(/MDd) 다중 스레드 디버그 (/MTd) 로 변경




그랬더니...



잘 된다.


착하다.

'DATA_OLD > C/C++' 카테고리의 다른 글

[C++] const의 쓰임새  (0) 2014.11.11
[C++] 범위 기반 for문  (0) 2014.11.11
[C++] switch문 내에서 변수 선언에 대해  (0) 2014.11.11
[STL] List / Map  (0) 2014.10.21
[STL]Vector  (0) 2014.10.21
:
Posted by 웽웽

1) cmd에서 해당 프로젝트\proj.android 폴더로 이동 후 python build_native.py 실행

->C++ 컴파일 실행


2) eclipse에서 export 실행

 - Export Android Application


3) Keystore selection

 - 어플리케이션 사후 관리(업데이트, 패치 등)에 꼭 필요함

 - 까먹거나 날리지말고 잘 보관할 것

+ 버전업 할때, 프로젝트의 AndroidMenifest.xml 최상단에 있는

      android:versionCode="1"

      android:versionName="1.0"

여기 숫자들을 버전업과 함께 바꿔줘야 함. 같은 경우에는 같다고 등록이 안됨.




구글 플레이 개발자 가이드라인이 있으니 수시로 확인

:
Posted by 웽웽