[iOS-cos2d-X 게임 개발 의 10]사용자 정의 각종 모델&터치 스크린 이벤트 설명!
36710 단어 classstaticcocos2dx【Cocos2d-x】
이 사이트 이화 명 히 미 오리지널,전재 는 반드시 뚜렷 한 곳 에 표시 해 야 한다.
에서 옮 겨 싣 기[흑 미 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 엔진 에서 사용자 정의 모델 의 생 성과 사용 을 소개 합 니 다.소개 과정 에서 기 초 를 말 하 는 김 에 일거양득 이다.
- :
- SpriteClassModel.h
-
- //
- // SpriteClassModel.h
- // Oh!MonsterMR
- //
- // Created by Himi on 12-3-7.
- // Copyright (c) 2012 Augustimpression. All rights reserved.
- //
-
- #ifndef Oh_MonsterMR_SpriteClassModel_h
- #define Oh_MonsterMR_SpriteClassModel_h
-
- #include "cocos2d.h"
- using namespace cocos2d;
- class SpriteClassModel : public cocos2d::CCSprite ,public CCTouchDelegate
- {
-
- public:
- static SpriteClassModel* spriteModelWithFile(const char *spName); // ( )
- void myInit();//
- virtual ~SpriteClassModel();
-
- // ----
- virtual void onEnter();
- virtual void onExit();
- virtual bool ccTouchBegan(CCTouch* touch, CCEvent* event);
- virtual void ccTouchMoved(CCTouch* touch, CCEvent* event);
- virtual void ccTouchEnded(CCTouch* touch, CCEvent* event);
- };
-
- #endif
- SpriteClassModel.cpp
-
- //
- // SpriteClassModel.cpp
- // Oh!MonsterMR
- //
- // Created by Himi on 12-3-7.
- // Copyright (c) 2012 Augustimpression. All rights reserved.
- //
-
- #include "SpriteClassModel.h"
-
- using namespace cocos2d;
-
- SpriteClassModel* SpriteClassModel::spriteModelWithFile(const char *spName)
- {
- SpriteClassModel *pobSprite = new SpriteClassModel();
-
- if (pobSprite && pobSprite->initWithFile(spName))// 1
- {
- pobSprite->myInit();
- pobSprite->autorelease();
- return pobSprite;
- }
- CC_SAFE_DELETE(pobSprite);
- return NULL;
- }
-
- void SpriteClassModel::myInit(){
- CCLOG("---- init ");
-
- }
- //---SpriteClassModel -----------------
- // TouchDispatcher ,TouchDispatcher onenter ,onexit
- bool SpriteClassModel::ccTouchBegan(CCTouch* touch, CCEvent* event)
- {
- CCLog("%s"," 111~ccTouchBegan");
- return true;
- }
-
- void SpriteClassModel::ccTouchMoved(CCTouch* touch, CCEvent* event)
- {
-
- // 3d 2d
- CCPoint touchPoint = touch->locationInView( touch->view() );
- touchPoint = CCDirector::sharedDirector()->convertToGL( touchPoint );
-
- //touchPoint.x, getPosition().y
- if(touchPoint.x> CCDirector::sharedDirector()->getWinSize().width/2){
- CCLog("%s"," 22~~ccTouchMoved");
- }
- }
-
- void SpriteClassModel::ccTouchEnded(CCTouch* touch, CCEvent* event)
- {
- CCLog("%s"," 33~~~ccTouchEnded");
- }
-
- //---SpriteClassModel ----
- void SpriteClassModel::onEnter()
- {
- // 1.dele ,2. ,3.YES move end
- CCTouchDispatcher::sharedDispatcher()->addTargetedDelegate(this, 0, true);
- CCSprite::onEnter();
- }
-
- void SpriteClassModel::onExit()
- {
- //
- CCTouchDispatcher::sharedDispatcher()->removeDelegate(this);
- CCSprite::onExit();
- }
-
- SpriteClassModel::~SpriteClassModel(){
- 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.사용자 정의 엘 프 와 유사 한 것 은 부모 클래스 를 계승 하 는 데 변화 가 있 을 뿐 모델 은 다음 과 같 습 니 다.
- NodeClassModel.h
-
- //
- // NodeClassModel.h
- // Oh!MonsterMR
- //
- // Created by Himi on 12-3-7.
- // Copyright (c) 2012 Augustimpression. All rights reserved.
- //
-
- #ifndef Oh_MonsterMR_NodeClassModel_h
- #define Oh_MonsterMR_NodeClassModel_h
-
- #include "cocos2d.h"
-
- class NodeClassModel : public cocos2d::CCNode
- {
-
- public:
- static NodeClassModel* NodeModelWithInit();
- void myInit();
- virtual ~NodeClassModel();
-
- };
-
- #endif
- NodeClassModel.cpp
-
- //
- // NodeClassModel.cpp
- // Oh!MonsterMR
- //
- // Created by Himi on 12-3-7.
- // Copyright (c) 2012 Augustimpression. All rights reserved.
- //
-
- #include "NodeClassModel.h"
-
- using namespace cocos2d;
-
- NodeClassModel* NodeClassModel::NodeModelWithInit()
- {
- NodeClassModel *mynode = new NodeClassModel();
- if (mynode)
- {
- mynode->myInit();
- mynode->autorelease();
- return mynode;
- }
- CC_SAFE_DELETE(mynode);
- return NULL;
- }
-
- void NodeClassModel::myInit(){
-
- CCLOG("---- init ");
- }
-
- NodeClassModel::~NodeClassModel(){
- CCLOG("--- ");
다음은 사용자 정의 CCLayer 의 모델 을 소개 합 니 다.(코드 를 먼저 올 린 다음 분석)
- LayerClassModel.h
-
- //
- // LayerClassModel.h
- // Oh!MonsterMR
- //
- // Created by Himi on 12-3-7.
- // Copyright (c) 2012 Augustimpression. All rights reserved.
- //
-
- #ifndef Oh_MonsterMR_LayerClassModel_h
- #define Oh_MonsterMR_LayerClassModel_h
-
- #include "cocos2d.h"
-
- using namespace cocos2d;
-
- class LayerClassModel : public cocos2d::CCLayer
- {
-
- public:
- static LayerClassModel*sharedLayerClassModel(void);
- virtual bool init();
- static cocos2d::CCScene* scene();
- virtual ~LayerClassModel();
- LAYER_NODE_FUNC(LayerClassModel);// CCScene::node();
- };
-
- #endif
- //
- // LayerClassModel.cpp
- // Oh!MonsterMR
- //
- // Created by Himi on 12-3-7.
- // Copyright (c) 2012 Augustimpression. All rights reserved.
- //
-
- #include "LayerClassModel.h"
-
- using namespace cocos2d;
-
- static LayerClassModel* shredStatic;// 1
- static bool s_bFirstRun = true;// 2
-
- LayerClassModel* LayerClassModel::sharedLayerClassModel(void)
- {
- if (s_bFirstRun)// 3
- {
- s_bFirstRun=false;
- }
- return shredStatic;
- }
-
- CCScene* LayerClassModel::scene()
- {
- // 'scene'
- CCScene *scene = CCScene::node();
- // 'layer'
- LayerClassModel *layer = LayerClassModel::node();
- scene->addChild(layer);
- return scene;
- }
-
- bool LayerClassModel::init(){
- if ( !CCLayer::init() )
- {
- return false;
- }
- shredStatic=this;
- //
-
- return true;
- }
-
- LayerClassModel::~LayerClassModel(){
- 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 을 많이 소개 하지 않 습 니 다.
- StaticClassModel.h
-
- //
- // StaticClassModel.h
- // Oh!MonsterMR
- //
- // Created by Himi on 12-3-8.
- // Copyright (c) 2012 Augustimpression. All rights reserved.
- //
-
- #ifndef Oh_MonsterMR_StaticClassModel_h
- #define Oh_MonsterMR_StaticClassModel_h
- #include "cocos2d.h"
-
- class StaticClassModel
- {
-
- public:
- static StaticClassModel* sharedStaticClassModel(void);
- void myInit();
- virtual ~StaticClassModel();
- //
- void testFun();
- };
- #endif
-
-
- StaticClassModel.cpp
-
- //
- // StaticClassModel.cpp
- // Oh!MonsterMR
- //
- // Created by Himi on 12-3-8.
- // Copyright (c) 2012 Augustimpression. All rights reserved.
- //
-
- #include "StaticClassModel.h"
-
- using namespace cocos2d;
-
- static StaticClassModel shredStatic;
- static bool s_bFirstRun = true;
-
- StaticClassModel* StaticClassModel::sharedStaticClassModel(void)
- {
- if (s_bFirstRun)
- {
- shredStatic.myInit();
- s_bFirstRun=false;
- }
- return &shredStatic;
- }
-
- void StaticClassModel::myInit(){
- 1
- shredStatic=this;
- CCLOG("---- Static init ");
- }
-
- void StaticClassModel::testFun(){
- CCLOG("- fstatic fun-");
- }
-
- StaticClassModel::~StaticClassModel(){
- CCLOG("--- ");
- }
기본 코드 에 있어 야 할 주석 은 모두 2016.2 입 니 다.쉽게 이해 할 수 있 습 니 다.이 편 은 Cocos2dx 의 새 어린이 신발 에 참고 하 시기 바 랍 니 다.
사용자 정의 정적 클래스 는 CCLayer 를 정적 으로 나 오 는 방식 과 유사 합 니 다.단지 CCLayer 를 계승 하 는 것 일 뿐 부모 클래스 를 계승 할 필요 가 없습니다.모드 는 다음 과 같 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
JavaScript 'getter' 대 'setter'Assalomu alaykum, bugun sizlar bilan JavaScriptda getter va setter metodlari tanishamiz. getter va setter metodlari orqa...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.