[iOS-cos2d-X 게임 개발 의 10]사용자 정의 각종 모델&터치 스크린 이벤트 설명!


 이 사이트 이화 명 히 미 오리지널,전재 는 반드시 뚜렷 한 곳 에 표시 해 야 한다.
에서 옮 겨 싣 기[흑 미 GameDev 거리] 원본 링크: http://www.himigame.com/iphone-cocos2dx/699.html ☞클릭 하여 구독 본 블 로그 의 최신 동향!제때에 최신 박문 을 당신 에 게 통지 합 니 다!
 
여기 서 하 이 미 는 또 하나의 기초 편 을 왔 다..............................................................................
1.Cocos2dx 의 튜 토리 얼 은 확실히 많 지 않 지만 Cocos2dx 는 Cocos2d 가 번식 하 는 엔진 이기 때문에 기본 API 는 큰 변화 가 없습니다.Cocos2d 를 2016.2 에 익숙해 지면 X 는 어렵 지 않 을 것 입 니 다.
2.엔진 자체 의 예 를 다시 한 번 알려 드 리 겠 습 니 다.많은 기본 적 인 문제 에 대해 소스 코드 는 충분히 고려 할 수 있 습 니 다.cocos 2d 든 cocos 2dX 든.........................................
3.그리고 많은 어린이 신발 들 이'이 기능 을 빨리 끝내 라'는 태 도 를 가지 고 일 에 도움 을 청 합 니 다.이렇게 좋 지 않 은 말,학습 개발 은 학습 과 마찬가지 로 생각 하지 않 고 답 을 얻 는 것 은 정말 뜬구름 이다..................................................병목 에 부 딪 혔 을 때 고려 해 보 세 요.밥 을 먹 을 때 입 을 벌 리 는 동 화 는 금물이다.
본론 에 들 어가 면 처음에 2016.2 라 고 말 했 습 니 다.본 편 은 주로 기본 적 인 동 화 를 배려 하기 위해 서 입 니 다.그러나 본 편 은 cocos2dx 엔진 에서 사용자 정의 모델 의 생 성과 사용 을 소개 합 니 다.소개 과정 에서 기 초 를 말 하 는 김 에 일거양득 이다.
   
   
   
   
  1. : 
  2. SpriteClassModel.h 
  3.   
  4. // 
  5. //  SpriteClassModel.h 
  6. //  Oh!MonsterMR 
  7. // 
  8. //  Created by Himi on 12-3-7. 
  9. //  Copyright (c) 2012  Augustimpression. All rights reserved. 
  10. // 
  11.   
  12. #ifndef Oh_MonsterMR_SpriteClassModel_h 
  13. #define Oh_MonsterMR_SpriteClassModel_h 
  14.   
  15. #include "cocos2d.h" 
  16. using namespace cocos2d; 
  17. class SpriteClassModel : public cocos2d::CCSprite ,public CCTouchDelegate 
  18.   
  19. public
  20.     static SpriteClassModel* spriteModelWithFile(const char *spName); // ( ) 
  21.     void myInit();//  
  22.     virtual ~SpriteClassModel(); 
  23.   
  24.     // ---- 
  25.     virtual void onEnter(); 
  26.     virtual void onExit(); 
  27.     virtual bool ccTouchBegan(CCTouch* touch, CCEvent* event); 
  28.     virtual void ccTouchMoved(CCTouch* touch, CCEvent* event); 
  29.     virtual void ccTouchEnded(CCTouch* touch, CCEvent* event); 
  30. }; 
  31.   
  32. #endif 
  33. SpriteClassModel.cpp 
  34.   
  35. // 
  36. //  SpriteClassModel.cpp 
  37. //  Oh!MonsterMR 
  38. // 
  39. //  Created by Himi on 12-3-7. 
  40. //  Copyright (c) 2012  Augustimpression. All rights reserved. 
  41. // 
  42.   
  43. #include "SpriteClassModel.h" 
  44.   
  45. using namespace cocos2d; 
  46.   
  47. SpriteClassModel* SpriteClassModel::spriteModelWithFile(const char *spName) 
  48.     SpriteClassModel *pobSprite = new SpriteClassModel(); 
  49.   
  50.     if (pobSprite && pobSprite->initWithFile(spName))// 1 
  51.     { 
  52.         pobSprite->myInit(); 
  53.         pobSprite->autorelease(); 
  54.         return pobSprite; 
  55.     } 
  56.     CC_SAFE_DELETE(pobSprite); 
  57.     return NULL; 
  58. }  
  59.   
  60. void SpriteClassModel::myInit(){ 
  61.     CCLOG("---- init "); 
  62.   
  63. //---SpriteClassModel  ----------------- 
  64. //   TouchDispatcher  ,TouchDispatcher onenter  ,onexit   
  65. bool SpriteClassModel::ccTouchBegan(CCTouch* touch, CCEvent* event) 
  66.     CCLog("%s"," 111~ccTouchBegan"); 
  67.     return true
  68.   
  69. void SpriteClassModel::ccTouchMoved(CCTouch* touch, CCEvent* event) 
  70.   
  71.     // 3d 2d  
  72.     CCPoint touchPoint = touch->locationInView( touch->view() ); 
  73.     touchPoint = CCDirector::sharedDirector()->convertToGL( touchPoint ); 
  74.   
  75.     //touchPoint.x, getPosition().y 
  76.     if(touchPoint.x> CCDirector::sharedDirector()->getWinSize().width/2){ 
  77.         CCLog("%s"," 22~~ccTouchMoved"); 
  78.     } 
  79.   
  80. void SpriteClassModel::ccTouchEnded(CCTouch* touch, CCEvent* event) 
  81.     CCLog("%s"," 33~~~ccTouchEnded"); 
  82. }  
  83.   
  84. //---SpriteClassModel  ---- 
  85. void SpriteClassModel::onEnter() 
  86.     //    1.dele ,2. ,3.YES move   end 
  87.     CCTouchDispatcher::sharedDispatcher()->addTargetedDelegate(this, 0, true); 
  88.     CCSprite::onEnter(); 
  89.   
  90. void SpriteClassModel::onExit() 
  91.     //  
  92.     CCTouchDispatcher::sharedDispatcher()->removeDelegate(this); 
  93.     CCSprite::onExit(); 
  94.   
  95. SpriteClassModel::~SpriteClassModel(){ 
  96.     CCLOG("--- "); 

 
이 사용자 정의 엘 프 류 모델 은 세 가지 점 을 중점적으로 소개 합 니 다.
  우선 사용자 정의 엘 프 류 가 어떻게 하 는 지 살 펴 보 겠 습 니 다.(코드 를 먼저 올 리 고 자세히 말 합 니 다)
1.구조 함수;
static SpriteClassModel* spriteModelWithFile(const char *spName);
이 구조 함수 의 실현 메커니즘 은 Himi 가 Cocos2dX 엔진 을 모방 하여 만 든 것 으로 한편 으로 는 사용 이 편리 하고 다른 한편 으로 는 메모리 가 자동 으로 방출 된다.
2.  구조 함수 에 비고 1 이 있 습 니 다.아직 보지 못 한 어린이 신발 은 뒤 돌아 보 세 요.여기 서 제 가 사용 하 는 아버지 류 CCSprite 의 색인 파일 이름 을 만 드 는 방식 은 다음 과 같 습 니 다.
initWithFile();
           부모 클래스 의 색인 프레임 캐 시 파일 이름 을 필요 에 따라 계속 사용자 정의 할 수 있 습 니 다.다음 과 같 습 니 다.
initWithSpriteFrameName();
물론 2016.2.사용자 정의 에 몇 가지 구 조 를 더 쓰 고 인 터 페 이 스 를 남 겨 서 사용 하면 됩 니 다.그러면 여기 Himi 는 2016.2 년 에 my Init()의 함 수 를 사용자 정의 합 니 다.이 함수 의 주요 용 도 는 두 가지 입 니 다.1.선명 화 작업 으로 코드 가 읽 기 쉽 습 니 다. 2.이러한 다양한 구조 함수 가 있 을 때 이 사용자 정의 엘 프 류 의 고유 속성 설정 등 을 이 함수 에 넣 고 코드 를 재 활용 할 수 있 습 니 다.
3.터치 스크린 에 관 한 코드 는 모두 주석 이 있 습 니 다.더 말 하지 않 아 도 현재 Himi 의 이 요정 은 터치 스크린 이벤트 배포 체 제 를 이용 하여 처리 하 는 것 입 니 다.터치 스크린 스위치 를 직접 켜 는 것 이 아 닙 니 다.(이 방법 은 너무 제한 적 입 니 다)이 두 가지 익숙 하지 않 은 어린이 신발 에 대해 다음 과 같은 글 로 이동 하 십시오.(cocos2d 는 cocos2dx 와 유사 합 니 다)
[iOS-Cocos2d 게임 개발 의 5]멀 티 터치 와 터치 스크린 사건 에 대한 상세 한 설명(단일 감청,사건 배포) 
 
 CCNode 의 사용자 정의 에 대해 서 는 더 이상 말 하지 않 습 니 다.2016.2.사용자 정의 엘 프 와 유사 한 것 은 부모 클래스 를 계승 하 는 데 변화 가 있 을 뿐 모델 은 다음 과 같 습 니 다.
 
   
   
   
   
  1. NodeClassModel.h 
  2.   
  3. // 
  4. //  NodeClassModel.h 
  5. //  Oh!MonsterMR 
  6. // 
  7. //  Created by Himi on 12-3-7. 
  8. //  Copyright (c) 2012  Augustimpression. All rights reserved. 
  9. // 
  10.   
  11. #ifndef Oh_MonsterMR_NodeClassModel_h 
  12. #define Oh_MonsterMR_NodeClassModel_h 
  13.   
  14. #include "cocos2d.h" 
  15.   
  16. class NodeClassModel : public cocos2d::CCNode 
  17.   
  18. public
  19.     static NodeClassModel* NodeModelWithInit(); 
  20.     void myInit(); 
  21.     virtual ~NodeClassModel(); 
  22.   
  23. }; 
  24.   
  25. #endif 
  26. NodeClassModel.cpp 
  27.   
  28. // 
  29. //  NodeClassModel.cpp 
  30. //  Oh!MonsterMR 
  31. // 
  32. //  Created by Himi on 12-3-7. 
  33. //  Copyright (c) 2012  Augustimpression. All rights reserved. 
  34. // 
  35.   
  36. #include "NodeClassModel.h" 
  37.   
  38. using namespace cocos2d; 
  39.   
  40. NodeClassModel* NodeClassModel::NodeModelWithInit() 
  41.     NodeClassModel *mynode = new NodeClassModel(); 
  42.     if (mynode) 
  43.     { 
  44.         mynode->myInit(); 
  45.         mynode->autorelease(); 
  46.         return mynode; 
  47.     } 
  48.     CC_SAFE_DELETE(mynode); 
  49.     return NULL; 
  50. }  
  51.   
  52. void NodeClassModel::myInit(){ 
  53.   
  54.     CCLOG("---- init "); 
  55.   
  56. NodeClassModel::~NodeClassModel(){ 
  57.     CCLOG("--- "); 

 
다음은 사용자 정의 CCLayer 의 모델 을 소개 합 니 다.(코드 를 먼저 올 린 다음 분석)
 
   
   
   
   
  1. LayerClassModel.h 
  2.   
  3. // 
  4. //  LayerClassModel.h 
  5. //  Oh!MonsterMR 
  6. // 
  7. //  Created by Himi on 12-3-7. 
  8. //  Copyright (c) 2012  Augustimpression. All rights reserved. 
  9. // 
  10.   
  11. #ifndef Oh_MonsterMR_LayerClassModel_h 
  12. #define Oh_MonsterMR_LayerClassModel_h 
  13.   
  14. #include "cocos2d.h" 
  15.   
  16. using namespace cocos2d; 
  17.   
  18. class LayerClassModel : public cocos2d::CCLayer 
  19.   
  20. public
  21.     static LayerClassModel*sharedLayerClassModel(void); 
  22.     virtual bool init(); 
  23.     static cocos2d::CCScene* scene(); 
  24.     virtual ~LayerClassModel(); 
  25.     LAYER_NODE_FUNC(LayerClassModel);// CCScene::node(); 
  26. }; 
  27.   
  28. #endif 
  29. // 
  30. //  LayerClassModel.cpp 
  31. //  Oh!MonsterMR 
  32. // 
  33. //  Created by Himi on 12-3-7. 
  34. //  Copyright (c) 2012  Augustimpression. All rights reserved. 
  35. // 
  36.   
  37. #include "LayerClassModel.h" 
  38.   
  39. using namespace cocos2d; 
  40.   
  41. static LayerClassModel* shredStatic;// 1 
  42. static bool s_bFirstRun = true;// 2 
  43.   
  44. LayerClassModel* LayerClassModel::sharedLayerClassModel(void
  45.     if (s_bFirstRun)// 3 
  46.     { 
  47.         s_bFirstRun=false
  48.     } 
  49.     return shredStatic; 
  50.   
  51. CCScene* LayerClassModel::scene() 
  52.     // 'scene'  
  53.     CCScene *scene = CCScene::node(); 
  54.     // 'layer'   
  55.     LayerClassModel *layer = LayerClassModel::node(); 
  56.     scene->addChild(layer); 
  57.     return scene; 
  58.   
  59. bool LayerClassModel::init(){ 
  60.     if ( !CCLayer::init() ) 
  61.     { 
  62.         return false
  63.     } 
  64.     shredStatic=this
  65.     //  
  66.   
  67.     return true
  68.   
  69. LayerClassModel::~LayerClassModel(){ 
  70.     CCLOG("--- "); 

사용자 정의 CCLayer 모드 에서 터치 스크린 관련 코드 를 삭 제 했 습 니 다.사용자 정의 엘 프 의 터치 스크린 구현 과 다 를 바 없습니다.
중점적으로 3 시 소개:
1.  CCLayer 와 CCScene 두 가지 종 류 는 모두 자동 으로 메모 리 를 방출 합 니 다.이 힌트 는 cocos2dx 엔진 모델 을 만 드 는 기본 Hello World Scene 류 에서 이미 알림 이 있 습 니 다.여러분 이 눈치 채 지 못 했 을 수도 있 습 니 다.그래서 여기 서 강조 하 겠 습 니 다.
2.CCLayer 는 전체 큰 UI 디자인 이나 게임 에 자주 사 용 됩 니 다.그 는 모두 주요 한 부류 로 서 사용 합 니 다.게임 요소 인 CCSprite,CCMenu,입자 등 을 Layer 에 추가 하기 때문에 이런 것들 은 게임 에서 의 상호작용 이 가장 강해 야 합 니 다.그래서 Layer ClassModel 모드 에서 저 는 정적 함 수 를 추가 하여 접근 하기 편리 하고 다른 종류 와 데이터 상호작용 을 할 수 있 도록 합 니 다(비고 1).다음 함수:
static LayerClassModel*sharedLayerClassModel(void);
좋 은 점 은 더 이상 말 할 필요 가 없습니다.예 를 들 어 CCDirector:shared Director()->getWinSize();
3. 비고 2 와 비고 3 의 역할 은 현재 클래스 가 중복 되 어 생 성 되 는 것 을 방지 합 니 다.이 알림 에서 2016.2 을 많이 소개 하지 않 습 니 다.
 
   
   
   
   
  1. StaticClassModel.h 
  2.   
  3. // 
  4. //  StaticClassModel.h 
  5. //  Oh!MonsterMR 
  6. // 
  7. //  Created by Himi on 12-3-8. 
  8. //  Copyright (c) 2012  Augustimpression. All rights reserved. 
  9. // 
  10.   
  11. #ifndef Oh_MonsterMR_StaticClassModel_h 
  12. #define Oh_MonsterMR_StaticClassModel_h 
  13. #include "cocos2d.h" 
  14.   
  15. class StaticClassModel 
  16.   
  17. public
  18.     static StaticClassModel* sharedStaticClassModel(void); 
  19.     void myInit(); 
  20.     virtual ~StaticClassModel(); 
  21.     // 
  22.     void testFun(); 
  23. }; 
  24. #endif 
  25.  
  26.  
  27. StaticClassModel.cpp 
  28.   
  29. // 
  30. //  StaticClassModel.cpp 
  31. //  Oh!MonsterMR 
  32. // 
  33. //  Created by Himi  on 12-3-8. 
  34. //  Copyright (c) 2012  Augustimpression. All rights reserved. 
  35. // 
  36.   
  37. #include "StaticClassModel.h" 
  38.   
  39. using namespace cocos2d; 
  40.   
  41. static StaticClassModel shredStatic; 
  42. static bool s_bFirstRun = true
  43.   
  44. StaticClassModel* StaticClassModel::sharedStaticClassModel(void
  45.     if (s_bFirstRun) 
  46.     { 
  47.         shredStatic.myInit(); 
  48.         s_bFirstRun=false
  49.     } 
  50.     return &shredStatic; 
  51.   
  52. void StaticClassModel::myInit(){ 
  53. shredStatic=this

  54.    CCLOG("---- Static init "); 
  55.   
  56. void StaticClassModel::testFun(){ 
  57.     CCLOG("- fstatic fun-"); 
  58.   
  59. StaticClassModel::~StaticClassModel(){ 
  60.     CCLOG("--- "); 

기본 코드 에 있어 야 할 주석 은 모두 2016.2 입 니 다.쉽게 이해 할 수 있 습 니 다.이 편 은 Cocos2dx 의 새 어린이 신발 에 참고 하 시기 바 랍 니 다.  
사용자 정의 정적 클래스 는 CCLayer 를 정적 으로 나 오 는 방식 과 유사 합 니 다.단지 CCLayer 를 계승 하 는 것 일 뿐 부모 클래스 를 계승 할 필요 가 없습니다.모드 는 다음 과 같 습 니 다.

좋은 웹페이지 즐겨찾기