• 7.cocos精灵创建和绘制


    1. 创建Layer层的类
      1.   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 };

    红色代码处是一个宏定义:

     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 }

     运行截图:

  • 相关阅读:
    云存储研发工程师(40-50万)
    数据分析师(50-70万)
    云计算-资深java研发
    云计算 -- 资深python开发
    公众号”IT高薪猎头“
    51内核mcu实现printf的一种方法
    一种基于蓝牙BLE无线控制的灯光系统的解决方案
    Ecx后台增加新菜单+新数据表+新bundle完整过程
    Ecx 生成swagger文档
    ecshopx-manage管理后台本地编译设置本地API
  • 原文地址:https://www.cnblogs.com/xiaochi/p/8349895.html
Copyright © 2020-2023  润新知