cocos2d-x 장면의 층(CCLayer) 및 터치 메시지

3132 단어 테스트UIView
단일 터치: Targeted Touch Delegate 형식
레이어 관리 터치 메시지는 다음 단계를 수행해야 합니다.
1, 초기화 단계에서 이 층의 속성을 터치 메시지로 설정합니다.예를 들어, init() 함수에 다음을 추가합니다.
m_bIsTouchEnabled = true;또는 setIsTouchEnabled(true),
2, 함수 virtual void register WithTouchDispatcher(void)를 다시 로드합니다.
기본 형식은 Standard Touch Delegate이기 때문에 처음부터 등록해야 하며 함수에 다음 문장을 추가합니다
CCTouchDispatcher::sharedDispatcher()->addTargetedDelegate(this, INT_MIN+1, true);

이 두 번째 매개 변수는 우선 순위입니다. 우선 순위 수치가 낮을수록 먼저 응답합니다. (테스트되지 않았습니다.)
3, 터치 응답 함수 다시 불러오기
터치 메시지를 인수하려면 다음 함수를 다시 불러와야 합니다
virtual bool ccTouchBegan(CCTouch *pTouch, CCEvent *pEvent);//     virtual void ccTouchMoved(CCTouch *pTouch, CCEvent *pEvent);virtual void ccTouchEnded(CCTouch *pTouch, CCEvent *pEvent);virtual void ccTouchCancelled(CCTouch *pTouch, CCEvent *pEvent);

여기서 중시해야 할 일은 첫 번째 함수는 반드시 실현해야 한다. 그렇지 않으면 클릭하면 이상을 던질 수 있다
 
멀티 터치: Standard Touch Delegate 형식
이 체형을 지탱하는 데도 마찬가지로 세 걸음이 필요하다.
1, Targeted Touch Delegate 형식 1단계
2. 이 노드를 Standard Delegate(CCLayer의 경우 이 단계를 생략할 수 있음)에 추가하여 클릭할 수 있는 CCSprite의 예를 들면 다음과 같습니다.
onEnter 함수에 추가
cocos2d::CCTouchDispatcher::sharedDispatcher()->addStandardDelegate(this,0);

 
3, 응답 함수 다시 로드
virtual void ccTouchesBegan(cocos2d::CCSet *pTouches, cocos2d::CCEvent *pEvent);virtual void ccTouchesMoved(cocos2d::CCSet *pTouches, cocos2d::CCEvent *pEvent);virtual void ccTouchesEnded(cocos2d::CCSet *pTouches, cocos2d::CCEvent *pEvent);virtual void ccTouchesCancelled(cocos2d::CCSet*pTouches,cocos2d::CCEvent *pEvent);

이 중 pTouches는 하나의 CCTouch를 모으기 위해 다음과 같은 과정을 거쳐 단일 터치점을 얻을 수 있다
if(!pTouches||!pTouches->count()){	return;}cocos2d::CCTouch* pTouch = (cocos2d::CCTouch*)(*(pTouches->anyObject()));

모든 터치 포인트를 얻으려면 이 모음집을 옮겨다녀야 합니다
for(CCSetIterator iterTouch = pTouches->begin(); iterTouch != pTouches->end(); iterTouch++){	CCTouch *pCurTouch =  (cocos2d::CCTouch*)(*iterTouch);	// do something}

4, Standard Delegate에서 제거:
두 번째 단계에서 사용자 정의 CCSprite를 Standard Delegate에 참가하면 이 CCSprite가 지워질 때 이 CCSprite를 제거합니다.onExit 함수에서 호출
cocos2d::CCTouchDispatcher::sharedDispatcher()->removeDelegate(this);

 
터치 포인트 확보
CCTouch에서 터치 포인트를 얻을 수 있는 위치는 다음과 같은 몇 가지 형식이 있다.
1: UIView 좌표 가져오기
CCPoint ptTouch = pTouch->locationInView(pTouch->view());

여기서 가져온 것은 장치의 UIView 좌표입니다. 원점은 왼쪽 상단에 있고 X는 오른쪽으로 증가하며 Y는 아래로 증가합니다.
2: 노드 좌표 가져오기
CCPoint ptNode = convertTouchToNodeSpace(pTouch);

노드 좌표의 계획은 GL 좌표와 같으며, 지점 노드의 왼쪽 하단을 원점으로 하고, X는 오른쪽으로 증가하고 Y는 위로 증가한다
3, 앵커 좌표 가져오기
하나의 노드, 모든 변환은 닻점, 예를 들어 평이, 회전, 축소 등을 바탕으로 한다.프로세스 함수 setAnchorPoint(CCPoint var)를 통과할 수 있습니다.앵커 포인트를 변경합니다.cocos2d-x에서 노드의 기본 닻점은 중간점, 즉 setArchorPoint(ccp(0.5,0.5)와 같다.여기서(0,0)는 왼쪽 아래, (1,1)는 오른쪽 위쪽을 나타냅니다.
CCPoint ptNodeAR = convertTouchToNodeSpaceAR(pTouch);

이때 좌표계의 원점은 이 노드의 닻점 위치에 있다.X는 오른쪽으로 늘리고 왼쪽으로 줄인다.Y는 위로 늘이고 아래로 줄어듭니다.

좋은 웹페이지 즐겨찾기