- 创建Layer层的类
- T2LayerSprite.h
1 #pragma once 2 #include "cocos2d.h" 3 USING_NS_CC; 4 5 class T2LayerSprite:public CCLayer 6 { 7 public: 8 static CCScene * scene(); 9 CREATE_FUNC(T2LayerSprite); 10 bool init(); 11 };
- T2LayerSprite.h
红色代码处是一个宏定义:
1 #define CREATE_FUNC(__TYPE__) 2 static __TYPE__* create() 3 { 4 __TYPE__ *pRet = new(std::nothrow) __TYPE__(); 5 if (pRet && pRet->init()) 6 { 7 pRet->autorelease(); 8 return pRet; 9 } 10 else 11 { 12 delete pRet; 13 pRet = nullptr; 14 return nullptr; 15 } 16 }
等同于:
static T1LayerAnchorPoint*create();
1 T1LayerAnchorPoint*T1LayerAnchorPoint::create() 2 { 3 T1LayerAnchorPoint *pRet = new T1LayerAnchorPoint(); 4 if (pRet && pRet->init()) 5 { 6 pRet->autorelease(); 7 } 8 else 9 { 10 delete pRet; 11 pRet = NULL; 12 } 13 return pRet; 14 15 }
调用顺序:scene->create->init->scene
2.T2LayerSprite.cpp
1 #include "T2LayerSprite.h" 2 3 4 CCScene * T2LayerSprite::scene() 5 { 6 CCScene *scene = CCScene::create(); 7 T2LayerSprite *layer = T2LayerSprite::create(); 8 scene->addChild(layer); 9 return scene; 10 } 11 12 bool T2LayerSprite::init() 13 { 14 CCLayer::init(); 15 16 //加载背景 17 //获取背景资源,并设置大小 18 CCSprite *bg = CCSprite::create("spirit/background.jpg",CCRectMake(0,0,680,330)); 19 //获取屏幕大小 20 auto winSize = CCDirector::sharedDirector()->getWinSize(); 21 //设置锚点 22 bg->setAnchorPoint(ccp(0, 0)); 23 //设置位置 24 bg->setPosition(ccp(0,0)); 25 //添加背景资源 26 addChild(bg); 27 28 //加载图片 29 CCImage *image = new CCImage(); 30 //图片初始化 31 image->initWithImageFile("spirit/plant.png"); 32 //创建2D纹理 33 CCTexture2D *texture = new CCTexture2D(); 34 //纹理自动释放 35 texture->autorelease(); 36 //纹理用图片初始化 37 texture->initWithImage(image); 38 //用纹理创建精灵 39 CCSprite *plant = CCSprite::createWithTexture(texture);//纹理 40 //设置位置 41 plant->setPosition(ccp(100,winSize.height/2)); 42 //添加图片 43 addChild(plant); 44 45 //加载一张大图在缓存里 46 //创建纹理 47 CCTexture2D *texture2 = CCTextureCache::sharedTextureCache()->addImage("spirit/bullet.png"); 48 //用纹理初始化精灵 49 CCSprite *bullet = CCSprite::createWithTexture(texture2); 50 //设置位置 51 bullet->setPosition(ccp(200, winSize.height / 2 + 20)); 52 //添加 53 addChild(bullet); 54 55 //加载一组帧 56 CCSpriteFrameCache::sharedSpriteFrameCache()->addSpriteFramesWithFile("spirit/zombie.plist"); 57 //此方法是先获取帧再加载 58 //CCSpriteFrame *sf = CCSpriteFrameCache::sharedSpriteFrameCache()->spriteFrameByName("z_1_attack_03.png"); 59 //CCSprite* zombie = CCSprite::createWithSpriteFrame(sf); 60 //此方法是直接通过名字加载 61 CCSprite *zombie = CCSprite::createWithSpriteFrameName("z_1_attack_03.png"); 62 //设置位置 63 zombie->setPosition(ccp(400, winSize.height / 2)); 64 //添加 65 addChild(zombie); 66 67 //创建动作 68 CCJumpBy *by = CCJumpBy::create(2, ccp(0, 0), 40, 3); 69 //zombie精灵设置跳跃动作 70 zombie->runAction(CCRepeatForever::create(by)); 71 72 //获取单个帧 73 CCSpriteFrame *frame = CCSpriteFrame::create("spirit/p_1_01.png", CCRectMake(0, 0, 80, 80)); 74 //通过帧初始化精灵 75 CCSprite *sun = CCSprite::createWithSpriteFrame(frame); 76 //设置位置 77 sun->setPosition(400, winSize.height / 2 + 50); 78 //添加 79 addChild(sun); 80 return true; 81 }
运行截图: